annotate scripts/io/strread.m @ 11127:64728cd28d7a

strread.m: Improve compatibility with Matlab.
author Ben Abbott <bpabbott@mac.com>
date Thu, 21 Oct 2010 23:38:15 +0800
parents a44f979a35ce
children a81994607ca0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
1 ## Copyright (C) 2009 Eric Chassande-Mottin, CNRS (France)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
2 ##
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
3 ## This file is part of Octave.
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
4 ##
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
6 ## under the terms of the GNU General Public License as published by
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
8 ## your option) any later version.
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
9 ##
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
13 ## General Public License for more details.
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
14 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
11104
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10846
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
18
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
19 ## -*- texinfo -*-
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
20 ## @deftypefn {Function File} {[@var{a}, @dots{}] =} strread (@var{str})
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
21 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} strread (@var{str}, @var{format})
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
22 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} strread (@var{str}, @var{format}, @
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
23 ## @var{prop1}, @var{value1}, @dots{})
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
24 ## Read data from a string.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
25 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
26 ## The string @var{str} is split into words that are repeatedly matched to the
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
27 ## specifiers in @var{format}. The first word is matched to the first
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
28 ## specifier,
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
29 ## the second to the second specifier and so forth. If there are more words
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
30 ## than
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
31 ## specifiers, the process is repeated until all words have been processed.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
32 ##
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
33 ## The string @var{format} describes how the words in @var{str} should be
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
34 ## parsed.
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
35 ## It may contain any combination of the following specifiers:
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
36 ## @table @code
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
37 ## @item %s
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
38 ## The word is parsed as a string.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
39 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
40 ## @item %d
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
41 ## @itemx %f
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
42 ## The word is parsed as a number.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
43 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
44 ## @item %*
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
45 ## The word is skipped.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
46 ## @end table
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
47 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
48 ## Parsed word corresponding to the first specifier are returned in the first
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
49 ## output argument and likewise for the rest of the specifiers.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
50 ##
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
51 ## By default, @var{format} is @t{"%f"}, meaning that numbers are read from
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10549
diff changeset
52 ## @var{str}.
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
53 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
54 ## For example, the string
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
55 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
56 ## @example
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
57 ## @group
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
58 ## @var{str} = "\
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
59 ## Bunny Bugs 5.5\n\
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
60 ## Duck Daffy -7.5e-5\n\
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
61 ## Penguin Tux 6"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
62 ## @end group
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
63 ## @end example
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
64 ##
10846
a4f482e66b65 Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
65 ## @noindent
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
66 ## can be read using
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
67 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
68 ## @example
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
69 ## [@var{a}, @var{b}, @var{c}] = strread (@var{str}, "%s %s %f");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
70 ## @end example
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
71 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
72 ## The behaviour of @code{strread} can be changed via properties @var{prop}
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
73 ## @itemize @code
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
74 ## @item "commentstyle":
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
75 ## Parts of @var{str} are considered comments and will be skipped.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
76 ## @var{value} is the comment style and can be any of the following.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
77 ## @itemize
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
78 ## @item "shell"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
79 ## Everything from @code{#} characters to the nearest end-line is skipped.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
80 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
81 ## @item "c"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
82 ## Everything between @code{/*} and @code{*/} is skipped.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
83 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
84 ## @item "c++"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
85 ## Everything from @code{//} characters to the nearest end-line is skipped.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
86 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
87 ## @item "matlab"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
88 ## Everything from @code{%} characters to the nearest end-line is skipped.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
89 ## @end itemize
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
90 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
91 ## @item "delimiter"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
92 ## Any character in @var{value} will be used to split @var{str} into words.
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10793
diff changeset
93 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
94 ## @item "emptyvalue"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
95 ## Parts of the output where no word is available is filled with @var{value}.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
96 ## @end itemize
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
97 ##
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
98 ## @seealso{textread, load, dlmread, fscanf}
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
99 ## @end deftypefn
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
100
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
101 function varargout = strread (str, formatstr = "%f", varargin)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
102 ## Check input
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
103 if (nargin < 1)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
104 print_usage ();
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
105 endif
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
106
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
107 if (!ischar (str) || !ischar (formatstr))
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
108 error ("strread: first and second input arguments must be strings");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
109 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
110
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
111 ## Parse options
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
112 comment_flag = false;
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
113 numeric_fill_value = 0;
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
114 white_spaces = " \n\r\t\b";
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
115 delimiter_str = "";
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
116 for n = 1:2:length (varargin)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
117 switch (lower (varargin {n}))
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
118 case "commentstyle"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
119 comment_flag = true;
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
120 switch (lower (varargin {n+1}))
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
121 case "c"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
122 comment_specif = {"/*", "*/"};
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
123 case "c++"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
124 comment_specif = {"//", "\n"};
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
125 case "shell"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
126 comment_specif = {"#", "\n"};
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
127 case "matlab"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
128 comment_specif = {"%", "\n"};
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
129 otherwise
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
130 warning ("strread: unknown comment style '%s'", val);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
131 endswitch
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
132 case "delimiter"
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9758
diff changeset
133 delimiter_str = varargin {n+1};
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
134 case "emptyvalue"
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9758
diff changeset
135 numeric_fill_value = varargin {n+1};
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
136 case "bufsize"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
137 ## XXX: We could synthesize this, but that just seems weird...
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
138 warning ("strread: property \"bufsize\" is not implemented");
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
139 case "whitespace"
10549
95c3e38098bf Untabify .m scripts
Rik <code@nomad.inbox5.com>
parents: 9758
diff changeset
140 white_spaces = varargin {n+1};
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
141 case "expchars"
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
142 warning ("strread: property \"expchars\" is not implemented");
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
143 otherwise
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
144 warning ("strread: unknown property \"%s\"", varargin {n});
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
145 endswitch
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
146 endfor
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
147 if (isempty (delimiter_str))
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
148 delimiter_str = white_spaces;
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
149 endif
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
150
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
151 ## Parse format string
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
152 idx = strfind (formatstr, "%")';
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
153 specif = formatstr ([idx, idx+1]);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
154 nspecif = length (idx);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
155 idx_star = strfind (formatstr, "%*");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
156 nfields = length (idx) - length (idx_star);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
157
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
158 if (max (nargout, 1) != nfields)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
159 error ("strread: the number of output variables must match that of format specifiers");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
160 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
161
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
162 ## Remove comments
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
163 if (comment_flag)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
164 cstart = strfind (str, comment_specif{1});
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
165 cstop = strfind (str, comment_specif{2});
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
166 if (length (cstart) > 0)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
167 ## Ignore nested openers.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
168 [idx, cidx] = unique (lookup (cstop, cstart), "first");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
169 if (idx(end) == length (cstop))
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
170 cidx(end) = []; # Drop the last one if orphaned.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
171 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
172 cstart = cstart(cidx);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
173 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
174 if (length (cstop) > 0)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
175 ## Ignore nested closers.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
176 [idx, cidx] = unique (lookup (cstart, cstop), "first");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
177 if (idx(1) == 0)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
178 cidx(1) = []; # Drop the first one if orphaned.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
179 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
180 cstop = cstop(cidx);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
181 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
182 len = length (str);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
183 c2len = length (comment_specif{2});
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
184 str = cellslices (str, [1, cstop + c2len], [cstart - 1, len]);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
185 str = [str{:}];
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
186 endif
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
187
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
188 ## Determine the number of words per line
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
189 [~, ~, ~, fmt_words] = regexp (formatstr, "[^\\s]+");
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
190
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
191 num_words_per_line = numel (fmt_words);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
192 for m = 1:numel(fmt_words)
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
193 ## Convert formats such as "%Ns" to "%s" (see the FIXME below)
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
194 if (length (fmt_words{m}) > 2)
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
195 if (strcmp (fmt_words{m}(1:2), "%*"))
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
196 fmt_words{m} = "%*";
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
197 elseif (fmt_words{m}(1) == "%")
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
198 fmt_words{m} = fmt_words{m}([1, end]);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
199 endif
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
200 endif
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
201 endfor
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
202
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
203 ## Split 'str' into words
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
204 words = split_by (str, delimiter_str);
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
205 num_words = numel (words);
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
206 num_lines = ceil (num_words / num_words_per_line);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
207
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
208 ## For each specifier
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
209 k = 1;
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
210 for m = 1:num_words_per_line
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
211 data = words (m:num_words_per_line:end);
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
212 ## Map to format
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
213 ## FIXME - add support for formats like "%4s" or "<%s>", "%[a-zA-Z]"
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
214 ## Someone with regexp experience is needed.
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
215 switch fmt_words{m}
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
216 case "%s"
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
217 data (end+1:num_lines) = {""};
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
218 varargout {k} = data';
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
219 k++;
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
220 case {"%d", "%f"}
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
221 n = cellfun (@isempty, data);
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
222 data = str2double (data);
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
223 data(n) = numeric_fill_value;
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
224 data (end+1:num_lines) = numeric_fill_value;
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
225 varargout {k} = data.';
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
226 k++;
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
227 case {"%*", "%*s"}
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
228 ## skip the word
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
229 otherwise
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
230 ## Ensure descriptive content is consistent
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
231 if (numel (unique (data)) > 1
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
232 || ! strcmpi (unique (data), fmt_words{m}))
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
233 error ("strread: format does not match data")
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
234 endif
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
235 endswitch
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
236 endfor
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
237 endfunction
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
238
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
239 function out = split_by (text, sep)
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
240 sep = union (sep, "\n");
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
241 pat = sprintf ("[^%s]+", sep);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
242 [~, ~, ~, out] = regexp (text, pat);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
243 out(cellfun (@isempty, out)) = {""};
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
244 out = strtrim (out);
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
245 endfunction
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
246
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
247 %!test
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
248 %! str = "# comment\n# comment\n1 2 3";
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
249 %! [a, b] = strread (str, '%d %s', 'commentstyle', 'shell');
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
250 %! assert (a, [1; 3]);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
251 %! assert (b, {"2"; ""});
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
252
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
253 %!test
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
254 %! str = '';
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
255 %! a = rand (10, 1);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
256 %! b = char (round (65 + 20 * rand (10, 1)));
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
257 %! for k = 1:10
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
258 %! str = sprintf ('%s %.6f %s\n', str, a (k), b (k));
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
259 %! endfor
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
260 %! [aa, bb] = strread (str, '%f %s');
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
261 %! assert (a, aa, 1e-5);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
262 %! assert (cellstr (b), bb);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
263
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
264 %!test
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
265 %! str = '';
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
266 %! a = rand (10, 1);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
267 %! b = char (round (65 + 20 * rand (10, 1)));
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
268 %! for k = 1:10
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
269 %! str = sprintf ('%s %.6f %s\n', str, a (k), b (k));
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
270 %! endfor
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
271 %! aa = strread (str, '%f %*s');
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
272 %! assert (a, aa, 1e-5);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
273
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
274 %!test
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
275 %! str = sprintf ('/* this is\nacomment*/ 1 2 3');
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
276 %! a = strread (str, '%f', 'commentstyle', 'c');
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
277 %! assert (a, [1; 2; 3]);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
278
11127
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
279 %!test
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
280 %! str = sprintf ("Tom 100 miles/hr\nDick 90 miles/hr\nHarry 80 miles/hr");
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
281 %! fmt = "%s %f miles/hr";
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
282 %! c = cell (1, 2);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
283 %! [c{:}] = strread (str, fmt);
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
284 %! assert (c{1}, {"Tom"; "Dick"; "Harry"})
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
285 %! assert (c{2}, [100; 90; 80])
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
286
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
287 %!test
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
288 %! a = strread ("a b c, d e, , f", "%s", "delimiter", ",");
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
289 %! assert (a, {"a b c"; "d e"; ""; "f"});
64728cd28d7a strread.m: Improve compatibility with Matlab.
Ben Abbott <bpabbott@mac.com>
parents: 11120
diff changeset
290