]> Creatis software - CreaPhase.git/blob - 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
1 ## Copyright (C) 2008 Bill Denney <bill@denney.ws>
2 ##
3 ## This program is free software; you can redistribute it and/or modify it under
4 ## the terms of the GNU General Public License as published by the Free Software
5 ## Foundation; either version 3 of the License, or (at your option) any later
6 ## version.
7 ##
8 ## This program is distributed in the hope that it will be useful, but WITHOUT
9 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
11 ## details.
12 ##
13 ## You should have received a copy of the GNU General Public License along with
14 ## this program; if not, see <http://www.gnu.org/licenses/>.
15
16 ## -*- texinfo -*-
17 ## @deftypefn {Function File} {[@var{d}, @var{err}] = } tbl_delim (@var{d})
18 ## Return the delimiter for tblread or tblwrite.
19 ##
20 ## The delimeter, @var{d} may be any single character or
21 ## @itemize
22 ## @item "space" " " (default)
23 ## @item "tab" "\t"
24 ## @item "comma" ","
25 ## @item "semi" ";"
26 ## @item "bar" "|"
27 ## @end itemize
28 ##
29 ## @var{err} will be empty if there is no error, and @var{d} will be NaN
30 ## if there is an error.  You MUST check the value of @var{err}.
31 ## @seealso{tblread, tblwrite}
32 ## @end deftypefn
33
34 function [d, err] = tbl_delim (d)
35
36   ## Check arguments
37   if nargin != 1
38     print_usage ();
39   endif
40
41   err = "";
42   ## Format the delimiter
43   if ischar (d)
44     ## allow for escape characters
45     d = sprintf (d);
46     if numel (d) > 1
47       ## allow the word forms
48       s.space = " ";
49       s.tab = "\t";
50       s.comma = ",";
51       s.semi = ";";
52       s.bar = "|";
53       if ! ismember (d, fieldnames (s))
54         err = ["tblread: delimiter must be either a single " ...
55                "character or one of\n" ...
56                sprintf("%s, ", fieldnames (s){:})(1:end-2)];
57         d = NaN;
58       else
59         d = s.(d);
60       endif
61     endif
62   else
63     err = "delimiter must be a character";
64     d = NaN;
65   endif
66   if isempty (d)
67     err = "the delimiter may not be empty";
68     d = NaN;
69   endif
70
71 endfunction
72
73 ## Tests
74 ## The defaults
75 %!test
76 %! [d err] = tbl_delim (" ");
77 %! assert (d, " ");
78 %! assert (err, "");
79 ## Named delimiters
80 %!test
81 %! [d err] = tbl_delim ("space");
82 %! assert (d, " ");
83 %! assert (err, "");
84 %!test
85 %! [d err] = tbl_delim ("tab");
86 %! assert (d, sprintf ("\t"));
87 %! assert (err, "");
88 %!test
89 %! [d err] = tbl_delim ("comma");
90 %! assert (d, ",");
91 %! assert (err, "");
92 %!test
93 %! [d err] = tbl_delim ("semi");
94 %! assert (d, ";");
95 %! assert (err, "");
96 %!test
97 %! [d err] = tbl_delim ("bar");
98 %! assert (d, "|");
99 %! assert (err, "");
100 ## An arbitrary character
101 %!test
102 %! [d err] = tbl_delim ("x");
103 %! assert (d, "x");
104 %! assert (err, "");
105 ## An arbitrary escape string
106 %!test
107 %! [d err] = tbl_delim ('\r');
108 %! assert (d, sprintf ('\r'))
109 %! assert (err, "");
110 ## Errors
111 %!test
112 %! [d err] = tbl_delim ("bars");
113 %! assert (isnan (d));
114 %! assert (! isempty (err));
115 %!test
116 %! [d err] = tbl_delim ("");
117 %! assert (isnan (d));
118 %! assert (! isempty (err));
119 %!test
120 %! [d err] = tbl_delim (5);
121 %! assert (isnan (d));
122 %! assert (! isempty (err));
123 %!test
124 %! [d err] = tbl_delim ({"."});
125 %! assert (isnan (d));
126 %! assert (! isempty (err));