annotate scripts/strings/str2double.m @ 5920:bf4241378994

[project @ 2006-08-14 16:46:32 by jwe]
author jwe
date Mon, 14 Aug 2006 16:46:33 +0000
parents 4c8a2e4e0717
children 93c65f2a5668
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
1 ## Copyright (C) 2004 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
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
7 ## the Free Software Foundation; either version 2, or (at your option)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
8 ## any later version.
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
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
16 ## along with Octave; see the file COPYING. If not, write to the Free
5307
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5187
diff changeset
17 ## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4c8a2e4e0717 [project @ 2005-04-26 19:24:27 by jwe]
jwe
parents: 5187
diff changeset
18 ## 02110-1301, USA.
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
19
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
20 ## -*- texinfo -*-
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
21 ## @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
22 ## Convert strings into numeric values.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
23 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
24 ## @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
25 ## @code{eval} on unknown data.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
26 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
27 ## @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
28 ## @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
29 ## optional elements.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
30 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
31 ## @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
32 ## 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
33 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
34 ## @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
35 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
36 ## @var{strarray} is a cell array of strings.
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
37 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
38 ## 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
39 ## @var{status} becomes -1.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
40 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
41 ## 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
42 ## @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
43 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
44 ## @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
45 ## column delimiters (@var{cdelim} and @var{rdelim}).
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
46 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
47 ## 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
48 ## optional column, row, and decimal delimiters.
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
49 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
50 ## 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
51 ## (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
52 ## 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
53 ## @samp{.} (ASCII 46).
5184
d35c5104ffbe [project @ 2005-03-03 06:37:19 by jwe]
jwe
parents: 5183
diff changeset
54 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
55 ## @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
56 ## newline, carriage return, semicolon, colon, slash, tab, space, comma,
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
57 ## 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
58 ## 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
59 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
60 ## Examples:
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
61 ##
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
62 ## @example
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 ##
5187
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
71 ## line = "200,300,400,NaN,-inf,cd,yes,no,999,maybe,NaN";
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
72 ## [x, status] = str2double (line)
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
73 ## x =
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
74 ## 200 300 400 NaN -Inf NaN NaN NaN 999 NaN NaN
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
75 ## status =
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
76 ## 0 0 0 0 0 -1 -1 -1 0 -1 0
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
77 ## @end example
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
78 ## @end deftypefn
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
79
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
80 ## Author: Alois Schloegl <a.schloegl@ieee.org>
e58bbd2b9c94 [project @ 2005-03-03 07:20:32 by jwe]
jwe
parents: 5185
diff changeset
81 ## Adapted-by: jwe
5183
cfd451656707 [project @ 2005-03-03 06:30:04 by jwe]
jwe
parents:
diff changeset
82
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
83 function [num, status, strarray] = str2double (s, cdelim, rdelim, ddelim)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
84
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
85 FLAG_OCTAVE = exist('OCTAVE_VERSION','builtin');
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
90 ## valid delimiters
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
93 if (nargin < 1)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
94 error ("missing input argument");
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)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
98 ## column delimiter
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
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
101 ## make unique cdelim
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)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
108 ## row delimiter
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
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
111 ## make unique rdelim
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)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
118 ddelim = '.';
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
134 ## check if delimiters are valid
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));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
137 k1 = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
138 k2 = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
139 while (k1 <= length (tmp) && k2 <= length (valid_delim)),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
140 if (tmp(k1) == valid_delim(k2))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
141 flag(k1) = 1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
142 k1++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
143 elseif (tmp(k1) < valid_delim(k2))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
144 k1++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
145 elseif (tmp(k1) > valid_delim(k2))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
146 k2++;
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
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))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
170 ## char array transformed into a string.
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 = {};
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
179 ## add stop sign; makes sure last digit is not skipped
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),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
187 CD = CD | (s==cdelim(k));
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
190 k1 = 1; # current row
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
191 k2 = 0; # current column
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
192 k3 = 0; # current element
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))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
211 k2++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
212 k3++;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
213 strarray{k1,k2} = s(ta:te);
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
214 ## strarray{k1,k2} = [ta,te];
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)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
224 k2 = 0;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
225 k1++;
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
5185
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
240 for k1 = 1:nr
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
241 for k2 = 1:nc
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
242 t = strarray{k1,k2};
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
243 if (length (t) == 0)
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
244 ## return error code
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
245 status(k1,k2) = -1;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
246 num(k1,k2) = NaN;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
247 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
248 ## get mantisse
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"))
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
261 num(k1,k2) = v*Inf;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
262 elseif (strcmpi (t(l:end), "NaN"));
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
263 num(k1,k2) = NaN;
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 == ".")
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
266 t(t==ddelim) = ".";
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),
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
272 num(k1,k2) = v;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
273 else
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
274 num(k1,k2) = NaN;
75a442ecd410 [project @ 2005-03-03 06:59:01 by jwe]
jwe
parents: 5184
diff changeset
275 status(k1,k2) = -1;
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