annotate scripts/strings/str2double.m @ 8920:eb63fbe60fab

update copyright notices
author John W. Eaton <jwe@octave.org>
date Sat, 07 Mar 2009 10:41:27 -0500
parents cadc73247d65
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8920
eb63fbe60fab update copyright notices
John W. Eaton <jwe@octave.org>
parents: 8507
diff changeset
1 ## Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 by Alois Schloegl
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
2 ##
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
3 ## This file is part of Octave.
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
4 ##
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
6 ## under the terms of the GNU General Public License as published by
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5920
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5920
diff changeset
8 ## your option) any later version.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
9 ##
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
13 ## General Public License for more details.
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
14 ##
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
15 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5920
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 5920
diff changeset
17 ## <http://www.gnu.org/licenses/>.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
18
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
19 ## -*- texinfo -*-
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
20 ## @deftypefn {Function File} {[@var{num}, @var{status}, @var{strarray}] =} str2double (@var{str}, @var{cdelim}, @var{rdelim}, @var{ddelim})
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
21 ## Convert strings into numeric values.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
22 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
23 ## @code{str2double} can replace @code{str2num}, but avoids the use of
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
24 ## @code{eval} on unknown data.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
25 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
26 ## @var{str} can be the form @samp{[+-]d[.]dd[[eE][+-]ddd]} in which
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
27 ## @samp{d} can be any of digit from 0 to 9, and @samp{[]} indicate
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
28 ## optional elements.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
29 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
30 ## @var{num} is the corresponding numeric value. If the conversion
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
31 ## fails, status is -1 and @var{num} is NaN.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
32 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
33 ## @var{status} is 0 if the conversion was successful and -1 otherwise.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
34 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
35 ## @var{strarray} is a cell array of strings.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
36 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
37 ## Elements which are not defined or not valid return NaN and the
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
38 ## @var{status} becomes -1.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
39 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
40 ## If @var{str} is a character array or a cell array of strings, then
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
41 ## @var{num} and @var{status} return matrices of appropriate size.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
42 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
43 ## @var{str} can also contain multiple elements separated by row and
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
44 ## column delimiters (@var{cdelim} and @var{rdelim}).
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
45 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
46 ## The parameters @var{cdelim}, @var{rdelim}, and @var{ddelim} are
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
47 ## optional column, row, and decimal delimiters.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
48 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
49 ## The default row-delimiters are newline, carriage return and semicolon
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
50 ## (ASCII 10, 13 and 59). The default column-delimiters are tab, space
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
51 ## and comma (ASCII 9, 32, and 44). The default decimal delimiter is
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
52 ## @samp{.} (ASCII 46).
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
53 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
54 ## @var{cdelim}, @var{rdelim}, and @var{ddelim} must contain only nul,
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
55 ## newline, carriage return, semicolon, colon, slash, tab, space, comma,
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
56 ## or @samp{()[]@{@}} (ASCII 0, 9, 10, 11, 12, 13, 14, 32, 33, 34, 40,
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
57 ## 41, 44, 47, 58, 59, 91, 93, 123, 124, 125).
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
58 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
59 ## Examples:
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
60 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
61 ## @example
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
62 ## @group
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
63 ## str2double ("-.1e-5")
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
64 ## @result{} -1.0000e-006
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
65 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
66 ## str2double (".314e1, 44.44e-1, .7; -1e+1")
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
67 ## @result{}
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
68 ## 3.1400 4.4440 0.7000
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
69 ## -10.0000 NaN NaN
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
70 ##
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7017
diff changeset
71 ## line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN";
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
72 ## [x, status] = str2double (line)
7031
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7017
diff changeset
73 ## @result{} x =
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7017
diff changeset
74 ## 200 300 NaN -Inf NaN NaN 999 NaN NaN
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7017
diff changeset
75 ## @result{} status =
120f3135952f [project @ 2007-10-15 15:30:03 by jwe]
jwe
parents: 7017
diff changeset
76 ## 0 0 0 0 -1 -1 0 -1 0
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
77 ## @end group
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
78 ## @end example
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
79 ## @seealso{str2num}
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
80 ## @end deftypefn
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
81
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
82 ## Author: Alois Schloegl <a.schloegl@ieee.org>
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
83 ## Adapted-by: jwe
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
84
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
85 function [num, status, strarray] = str2double (s, cdelim, rdelim, ddelim)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
86
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
87 ## digits, sign, exponent,NaN,Inf
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
88 ## valid_char = '0123456789eE+-.nNaAiIfF';
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
89
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
90 ## Valid delimiters.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
91 valid_delim = char (sort ([0, 9:14, 32:34, abs("()[]{},;:\"|/")]));
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
92
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
93 if (nargin < 1 || nargin > 4)
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
94 print_usage ();
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
95 endif
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
96
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
97 if (nargin < 2)
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
98 ## Column delimiter.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
99 cdelim = char ([9, 32, abs(",")]);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
100 else
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
101 ## Make unique cdelim.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
102 cdelim = char (sort (cdelim(:)));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
103 tmp = [1; 1+find(diff(abs(cdelim))>0)];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
104 cdelim = cdelim(tmp)';
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
105 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
106
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
107 if (nargin < 3)
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
108 ## Row delimiter.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
109 rdelim = char ([0, 10, 13, abs(";")]);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
110 else
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
111 ## Make unique rdelim.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
112 rdelim = char (sort (rdelim(:)));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
113 tmp = [1; 1+find(diff(abs(rdelim))>0)];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
114 rdelim = rdelim(tmp)';
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
115 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
116
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
117 if (nargin < 4)
7428
0c11c6907c38 [project @ 2008-01-29 23:28:10 by jwe]
jwe
parents: 7031
diff changeset
118 ddelim = ".";
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
119 elseif (length (ddelim) != 1)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
120 error ("decimal delimiter must be exactly one character");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
121 endif
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
122
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
123 ## Check if RDELIM and CDELIM are distinct.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
124
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
125 delim = sort (abs ([cdelim, rdelim, ddelim]));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
126 tmp = [1, 1+find(diff(delim)>0)];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
127 delim = delim(tmp);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
128 ## [length(delim),length(cdelim),length(rdelim)]
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
129 if (length (delim) < (length(cdelim) + length(rdelim))+1)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
130 ## length (ddelim) must be one.
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
131 error ("row, column and decimal delimiter are not distinct");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
132 endif
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
133
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
134 ## Check if delimiters are valid.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
135 tmp = sort (abs ([cdelim, rdelim]));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
136 flag = zeros (size (tmp));
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
137 curr_row = 1;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
138 curr_col = 1;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
139 while (curr_row <= length (tmp) && curr_col <= length (valid_delim)),
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
140 if (tmp(curr_row) == valid_delim(curr_col))
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
141 flag(curr_row) = 1;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
142 curr_row++;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
143 elseif (tmp(curr_row) < valid_delim(curr_col))
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
144 curr_row++;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
145 elseif (tmp(curr_row) > valid_delim(curr_col))
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
146 curr_col++;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
147 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
148 endwhile
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
149 if (! all (flag))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
150 error ("invalid delimiters!");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
151 endif
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
152
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
153 ## Various input parameters.
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
154
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
155 if (isnumeric (s))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
156 if (all (s < 256) && all (s >= 0))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
157 s = char (s);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
158 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
159 error ("str2double: input variable must be a string");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
160 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
161 endif
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
162
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
163 if (isempty (s))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
164 num = [];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
165 status = 0;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
166 return;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
167 elseif (iscell (s))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
168 strarray = s;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
169 elseif (ischar (s) && all (size (s) > 1))
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
170 ## Char array transformed into a string.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
171 for k = 1:size (s, 1)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
172 tmp = find (! isspace (s(k,:)));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
173 strarray{k,1} = s(k,min(tmp):max(tmp));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
174 endfor
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
175 elseif (ischar (s)),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
176 num = [];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
177 status = 0;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
178 strarray = {};
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
179 ## Add stop sign; makes sure last digit is not skipped.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
180 s(end+1) = rdelim(1);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
181 RD = zeros (size (s));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
182 for k = 1:length (rdelim),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
183 RD = RD | (s == rdelim(k));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
184 endfor
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
185 CD = RD;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
186 for k = 1:length (cdelim),
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 8506
diff changeset
187 CD = CD | (s == cdelim(k));
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
188 endfor
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
189
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
190 curr_row = 1;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
191 curr_col = 0;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
192 curr_elt = 0;
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
193
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
194 sl = length (s);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
195 ix = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
196 ## while (ix < sl) & any(abs(s(ix))==[rdelim,cdelim]),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
197 while (ix < sl && CD(ix))
5920
bf4241378994 [project @ 2006-08-14 16:46:32 by jwe]
jwe
parents: 5307
diff changeset
198 ix++;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
199 endwhile
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
200 ta = ix;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
201 te = [];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
202 while (ix <= sl)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
203 if (ix == sl)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
204 te = sl;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
205 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
206 ## if any(abs(s(ix))==[cdelim(1),rdelim(1)]),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
207 if (CD(ix))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
208 te = ix - 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
209 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
210 if (! isempty (te))
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
211 curr_col++;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
212 curr_elt++;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
213 strarray{curr_row,curr_col} = s(ta:te);
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
214 ## strarray{curr_row,curr_col} = [ta,te];
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
215
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
216 flag = 0;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
217 ## while any(abs(s(ix))==[cdelim(1),rdelim(1)]) & (ix < sl),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
218 while (CD(ix) && ix < sl)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
219 flag = flag | RD(ix);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
220 ix++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
221 endwhile
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
222
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
223 if (flag)
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
224 curr_col = 0;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
225 curr_row++;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
226 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
227 ta = ix;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
228 te = [];
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
229 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
230 ix++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
231 endwhile
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
232 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
233 error ("str2double: invalid input argument");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
234 endif
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
235
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
236 [nr, nc]= size (strarray);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
237 status = zeros (nr, nc);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
238 num = repmat (NaN, nr, nc);
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
239
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
240 for curr_row = 1:nr
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
241 for curr_col = 1:nc
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
242 t = strarray{curr_row,curr_col};
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
243 if (length (t) == 0)
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
244 ## Return error code.
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
245 status(curr_row,curr_col) = -1;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
246 num(curr_row,curr_col) = NaN;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
247 else
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
248 ## Get mantisse.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
249 g = 0;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
250 v = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
251 if (t(1) == "-")
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
252 v = -1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
253 l = min (2, length(t));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
254 elseif (t(1) == "+")
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
255 l = min (2, length (t));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
256 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
257 l = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
258 endif
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
259
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
260 if (strcmpi (t(l:end), "inf"))
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
261 num(curr_row,curr_col) = v*Inf;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
262 elseif (strcmpi (t(l:end), "NaN"));
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
263 num(curr_row,curr_col) = NaN;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
264 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
265 if (ddelim == ".")
8507
cadc73247d65 style fixes
John W. Eaton <jwe@octave.org>
parents: 8506
diff changeset
266 t(t == ddelim) = ".";
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
267 endif
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
268 [v, tmp2, c] = sscanf(char(t), "%f %s", "C");
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
269 ## [v,c,em,ni] = sscanf(char(t),"%f %s");
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
270 ## c = c * (ni>length(t));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
271 if (c == 1),
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
272 num(curr_row,curr_col) = v;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
273 else
8506
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
274 num(curr_row,curr_col) = NaN;
bc982528de11 comment style fixes
John W. Eaton <jwe@octave.org>
parents: 8442
diff changeset
275 status(curr_row,curr_col) = -1;
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
276 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
277 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
278 endif
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
279 endfor
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
280 endfor
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
281
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
282 endfunction
8442
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
283
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
284 %!error <Invalid call to str2double> str2double();
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
285 %!error <Invalid call to str2double> str2double("1e10", " ", "\n", ".", "x");
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
286 %!assert (str2double ("-.1e-5"), -1.0000e-006);
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
287 %!assert (str2double (".314e1, 44.44e-1, .7; -1e+1"),
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
288 %! [3.1400, 4.4440, 0.7000; -10.0000, NaN, NaN]);
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
289 %!test
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
290 %! line = "200, 300, NaN, -inf, yes, no, 999, maybe, NaN";
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
291 %! [x, status] = str2double (line);
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
292 %! assert (x, [200, 300, NaN, -Inf, NaN, NaN, 999, NaN, NaN]);
502e58a0d44f Fix docstrings, add examples, references and tests to string functions
Thorsten Meyer <thorsten.meyier@gmx.de>
parents: 7428
diff changeset
293 %! assert (status, [0, 0, 0, 0, -1, -1, 0, -1, 0]);