annotate scripts/io/textread.m @ 14621:1804d5422f61

doc: Periodic spellcheck of documentation. * aspell-octave.en.pws: Add new words to Octave-specific dictionary. * textread.m, textscan.m, shrinkfaces.m, splinefit.m: Correct spelling in docstring.
author Rik <octave@nomad.inbox5.com>
date Thu, 10 May 2012 22:18:52 -0700
parents 98aaebc56d7c
children 5d3a684236b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14138
72c96de7a403 maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents: 13141
diff changeset
1 ## Copyright (C) 2009-2012 Eric Chassande-Mottin, CNRS (France)
9746
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: 10793
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: 10793
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: 10793
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: 10793
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: 10793
diff changeset
8 ## your option) any later version.
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10793
diff changeset
9 ##
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10793
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: 10793
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10793
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2c356a35d7f5 fix copyright notices
John W. Eaton <jwe@octave.org>
parents: 10793
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: 10793
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: 10627
diff changeset
20 ## @deftypefn {Function File} {[@var{a}, @dots{}] =} textread (@var{filename})
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10627
diff changeset
21 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format})
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
22 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format}, @var{n})
11563
3c6e8aaa9555 Grammarcheck m-files before 3.4 release.
Rik <octave@nomad.inbox5.com>
parents: 11523
diff changeset
23 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format}, @var{prop1}, @var{value1}, @dots{})
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
24 ## @deftypefnx {Function File} {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format}, @var{n}, @var{prop1}, @var{value1}, @dots{})
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
25 ## Read data from a text file.
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
26 ##
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9746
diff changeset
27 ## The file @var{filename} is read and parsed according to @var{format}. The
10793
be55736a0783 Grammarcheck the documentation from m-files.
Rik <octave@nomad.inbox5.com>
parents: 10627
diff changeset
28 ## function behaves like @code{strread} except it works by parsing a file
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
29 ## instead of a string. See the documentation of @code{strread} for details.
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
30 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
31 ## In addition to the options supported by @code{strread}, this function
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
32 ## supports two more:
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
33 ##
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
34 ## @itemize
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
35 ## @item "headerlines":
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
36 ## The first @var{value} number of lines of @var{filename} are skipped.
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
37 ##
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
38 ## @item "endofline":
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
39 ## Specify a single character or "\r\n". If no value is given, it will be
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
40 ## inferred from the file. If set to "" (empty string) EOLs are ignored as
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
41 ## delimiters.
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
42 ## @end itemize
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
43 ##
14621
1804d5422f61 doc: Periodic spellcheck of documentation.
Rik <octave@nomad.inbox5.com>
parents: 14565
diff changeset
44 ## The optional input @var{n} specifies the number of data lines to read; in
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
45 ## this sense it differs slightly from the format repeat count in strread.
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
46 ##
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
47 ## @seealso{strread, load, dlmread, fscanf, textscan}
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
48 ## @end deftypefn
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
49
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11104
diff changeset
50 function varargout = textread (filename, format = "%f", varargin)
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
51
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
52 BUFLENGTH = 4096; # Read buffer to speed up processing @var{n}
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
53
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
54 ## Check input
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
55 if (nargin < 1)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
56 print_usage ();
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
57 endif
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11563
diff changeset
58
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
59 if (! ischar (filename) || ! ischar (format))
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
60 error ("textread: FILENAME and FORMAT arguments must be strings");
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
61 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
62
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
63 if (! isempty (varargin) && isnumeric (varargin{1}))
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
64 nlines = varargin{1};
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
65 else
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
66 nlines = Inf;
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
67 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
68 if (nlines < 1)
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
69 printf ("textread: N = 0, no data read\n");
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
70 varargout = cell (1, nargout);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
71 return
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
72 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
73
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
74 ## Read file
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
75 fid = fopen (filename, "r");
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
76 if (fid == -1)
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
77 error ("textread: could not open '%s' for reading", filename);
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
78 endif
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
79
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
80 ## Skip header lines if requested
9828
b96e9239178e fix textread bug
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
81 headerlines = find (strcmpi (varargin, "headerlines"), 1);
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
82 ## Beware of zero valued headerline, fskipl would skip to EOF
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
83 if (! isempty (headerlines) && (varargin{headerlines + 1} > 0))
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
84 fskipl (fid, varargin{headerlines + 1});
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
85 varargin(headerlines:headerlines+1) = [];
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
86 endif
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
87 st_pos = ftell (fid);
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
88
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
89 ## Read a first file chunk. Rest follows after endofline processing
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
90 [str, count] = fscanf (fid, "%c", BUFLENGTH);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
91 if (isempty (str) || count < 1)
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
92 warning ("textread: empty file");
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
93 varargout = cell (1, nargout);
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
94 return;
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
95 endif
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
96
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
97 endofline = find (strcmpi (varargin, "endofline"), 1);
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
98 if (! isempty (endofline))
13141
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12880
diff changeset
99 ## 'endofline' option set by user.
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12880
diff changeset
100 if (! ischar (varargin{endofline + 1}));
e81ddf9cacd5 maint: untabify and remove trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 12880
diff changeset
101 error ("textread: character value required for EndOfLine");
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
102 endif
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
103 else
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
104 ## Determine EOL from file. Search for EOL candidates in first BUFLENGTH chars
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
105 eol_srch_len = min (length (str), BUFLENGTH);
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
106 ## First try DOS (CRLF)
14214
2fe0f5fa8cc3 Replace to-be-deprecated findstr occurrences with strfind.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
107 if (! isempty (strfind ("\r\n", str(1 : eol_srch_len))))
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
108 eol_char = "\r\n";
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
109 ## Perhaps old Macintosh? (CR)
14214
2fe0f5fa8cc3 Replace to-be-deprecated findstr occurrences with strfind.
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
110 elseif (! isempty (strfind ("\r", str(1 : eol_srch_len))))
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
111 eol_char = "\r";
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
112 ## Otherwise, use plain UNIX (LF)
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
113 else
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
114 eol_char = "\n";
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
115 endif
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
116 ## Set up default endofline param value
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
117 varargin(end+1:end+2) = {"endofline", eol_char};
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
118 endif
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
119
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
120 ## Now that we know what EOL looks like, we can process format_repeat_count.
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
121 ## FIXME The below isn't ML-compatible: counts lines, not format string uses
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
122 if (isfinite (nlines) && (nlines > 0))
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
123 l_eol_char = length (eol_char);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
124 eoi = findstr (str, eol_char);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
125 n_eoi = length (eoi);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
126 nblks = 0;
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
127 ## Avoid slow repeated str concatenation, first seek requested end of data
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
128 while (n_eoi < nlines && count == BUFLENGTH)
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
129 [nstr, count] = fscanf (fid, "%c", BUFLENGTH);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
130 if (count > 0)
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
131 ## Watch out for multichar EOL being missed across buffer boundaries
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
132 if (l_eol_char > 1)
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
133 str = [str(end - length (eol_char) + 2 : end) nstr];
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
134 else
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
135 str = nstr;
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
136 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
137 eoi = findstr (str, eol_char);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
138 n_eoi += numel (eoi);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
139 ++nblks;
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
140 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
141 endwhile
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
142 ## Found EOL delimiting last requested line. Compute ptr (incl. EOL)
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
143 if (isempty (eoi))
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
144 printf ("textread: format repeat count specified but no endofline found\n");
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
145 eoi_pos = nblks * BUFLENGTH + count;
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
146 else
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
147 eoi_pos = (nblks * BUFLENGTH) + eoi(end + min (nlines, n_eoi) - n_eoi);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
148 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
149 fseek (fid, st_pos, "bof");
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
150 str = fscanf (fid, "%c", eoi_pos);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
151 else
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
152 fseek (fid, st_pos, "bof");
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
153 str = fread(fid, "char=>char").';
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
154 endif
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
155 fclose (fid);
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
156
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
157 ## Set up default whitespace param value if needed
14565
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
158 if (isempty (find (strcmpi ("whitespace", varargin))))
98aaebc56d7c 2012-03-25 Philip Nienhuis <prnienhuis@users.sf.net>
Philip Nienhuis <prnienhuis@@users.sf.net>
parents: 14430
diff changeset
159 varargin(end+1:end+2) = {"whitespace", " \b\t"};
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
160 endif
12866
fe6e2afcd9ee Revamp strread, textscan, textread functions for Matlab compatability
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12860
diff changeset
161
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
162 ## Call strread to make it do the real work
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
163 [varargout{1:max (nargout, 1)}] = strread (str, format, varargin {:});
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11104
diff changeset
164
9746
31a22d48f41f scripts/io/strread.m scripts/io/textread.m: new functions
Soren Hauberg <hauberg@gmail.com>
parents:
diff changeset
165 endfunction
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
166
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
167
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
168 %!test
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14214
diff changeset
169 %! f = tmpnam ();
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
170 %! d = rand (5, 3);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14214
diff changeset
171 %! dlmwrite (f, d, "precision", "%5.2f");
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
172 %! [a, b, c] = textread (f, "%f %f %f", "delimiter", ",", "headerlines", 3);
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14214
diff changeset
173 %! unlink (f);
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
174 %! assert (a, d(4:5, 1), 1e-2);
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
175 %! assert (b, d(4:5, 2), 1e-2);
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
176 %! assert (c, d(4:5, 3), 1e-2);
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
177
14430
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
178 %!test
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
179 %! f = tmpnam ();
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
180 %! d = rand (7, 2);
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
181 %! dlmwrite (f, d, "precision", "%5.2f");
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
182 %! [a, b] = textread (f, "%f, %f", "headerlines", 1);
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
183 %! unlink (f);
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
184 %! assert (a, d(2:7, 1), 1e-2);
df5488e46dca fix bug in input validation for textread
Carlo de Falco <kingcrimson@tiscali.it>
parents: 14363
diff changeset
185
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
186 %% Test input validation
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
187 %!error textread ()
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
188 %!error textread (1)
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14214
diff changeset
189 %!error <arguments must be strings> textread (1, "%f")
12877
ddea3962b024 Various improvements to strread, textread, textscan functions
Rik <octave@nomad.inbox5.com>
parents: 12866
diff changeset
190 %!error <arguments must be strings> textread ("fname", 1)
12860
abd4093753e0 textread.m: Tests for function
Philip Nienhuis <prnienhuis@users.sf.net>
parents: 12679
diff changeset
191