]> Creatis software - CreaPhase.git/blobdiff - octave_packages/statistics-1.1.3/private/tbl_delim.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / statistics-1.1.3 / private / tbl_delim.m
diff --git a/octave_packages/statistics-1.1.3/private/tbl_delim.m b/octave_packages/statistics-1.1.3/private/tbl_delim.m
new file mode 100644 (file)
index 0000000..ce77a92
--- /dev/null
@@ -0,0 +1,126 @@
+## Copyright (C) 2008 Bill Denney <bill@denney.ws>
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {[@var{d}, @var{err}] = } tbl_delim (@var{d})
+## Return the delimiter for tblread or tblwrite.
+##
+## The delimeter, @var{d} may be any single character or
+## @itemize
+## @item "space" " " (default)
+## @item "tab" "\t"
+## @item "comma" ","
+## @item "semi" ";"
+## @item "bar" "|"
+## @end itemize
+##
+## @var{err} will be empty if there is no error, and @var{d} will be NaN
+## if there is an error.  You MUST check the value of @var{err}.
+## @seealso{tblread, tblwrite}
+## @end deftypefn
+
+function [d, err] = tbl_delim (d)
+
+  ## Check arguments
+  if nargin != 1
+    print_usage ();
+  endif
+
+  err = "";
+  ## Format the delimiter
+  if ischar (d)
+    ## allow for escape characters
+    d = sprintf (d);
+    if numel (d) > 1
+      ## allow the word forms
+      s.space = " ";
+      s.tab = "\t";
+      s.comma = ",";
+      s.semi = ";";
+      s.bar = "|";
+      if ! ismember (d, fieldnames (s))
+        err = ["tblread: delimiter must be either a single " ...
+               "character or one of\n" ...
+               sprintf("%s, ", fieldnames (s){:})(1:end-2)];
+        d = NaN;
+      else
+        d = s.(d);
+      endif
+    endif
+  else
+    err = "delimiter must be a character";
+    d = NaN;
+  endif
+  if isempty (d)
+    err = "the delimiter may not be empty";
+    d = NaN;
+  endif
+
+endfunction
+
+## Tests
+## The defaults
+%!test
+%! [d err] = tbl_delim (" ");
+%! assert (d, " ");
+%! assert (err, "");
+## Named delimiters
+%!test
+%! [d err] = tbl_delim ("space");
+%! assert (d, " ");
+%! assert (err, "");
+%!test
+%! [d err] = tbl_delim ("tab");
+%! assert (d, sprintf ("\t"));
+%! assert (err, "");
+%!test
+%! [d err] = tbl_delim ("comma");
+%! assert (d, ",");
+%! assert (err, "");
+%!test
+%! [d err] = tbl_delim ("semi");
+%! assert (d, ";");
+%! assert (err, "");
+%!test
+%! [d err] = tbl_delim ("bar");
+%! assert (d, "|");
+%! assert (err, "");
+## An arbitrary character
+%!test
+%! [d err] = tbl_delim ("x");
+%! assert (d, "x");
+%! assert (err, "");
+## An arbitrary escape string
+%!test
+%! [d err] = tbl_delim ('\r');
+%! assert (d, sprintf ('\r'))
+%! assert (err, "");
+## Errors
+%!test
+%! [d err] = tbl_delim ("bars");
+%! assert (isnan (d));
+%! assert (! isempty (err));
+%!test
+%! [d err] = tbl_delim ("");
+%! assert (isnan (d));
+%! assert (! isempty (err));
+%!test
+%! [d err] = tbl_delim (5);
+%! assert (isnan (d));
+%! assert (! isempty (err));
+%!test
+%! [d err] = tbl_delim ({"."});
+%! assert (isnan (d));
+%! assert (! isempty (err));