diff scripts/io/textread.m @ 9746:31a22d48f41f

scripts/io/strread.m scripts/io/textread.m: new functions
author Soren Hauberg <hauberg@gmail.com>
date Mon, 19 Oct 2009 20:19:40 +0200
parents
children 09da0bd91412
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/io/textread.m
@@ -0,0 +1,64 @@
+## Copyright (C) 2009 Eric Chassande-Mottin, CNRS (France)
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 3 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File}  {[@var{a}, @dots{}] =} textread (@var{filename})
+## @deftypefnx {Function File}  {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format})
+## @deftypefnx {Function File} {[@var{a}, @dots{}] =} textread (@var{filename}, @var{format}, @
+## @var{prop1}, @var{value1}, @dots{})
+## Read data from a text file.
+##
+## The file @var{filename} is read and parsed according to @var{format}. The
+## function behaves like @code{strread} except it works by parsing a file instead
+## of a string. See the documentation of @code{strread} for details.
+## In addition to the options supported by @code{strread}, this function
+## supports one more:
+## @itemize
+## @item "headerlines":
+## @end itemize
+## The first @var{value} number of lines of @var{str} are skipped.
+## @seealso{strread, load, dlmread, fscanf}
+## @end deftypefn
+
+function varargout = textread (filename, formatstr = "%f", varargin)
+  ## Check input
+  if (nargin < 1)
+    print_usage ();
+  endif
+  
+  if (!ischar (filename) || !ischar (filename))
+    error ("textread: first and second input arguments must be strings");
+  endif
+
+  ## Read file
+  fid = fopen (filename, "r");
+  if (fid == -1)
+    error ("textread: could not open '%s' for reading", filename);
+  endif
+
+  ## Maybe skip header lines
+  headerlines = find (strncmp (varargin, "headerlines"), 1);
+  if (! isempty (headerlines))
+    fskipl (fid, headerlines);
+    varargin(headerlines:headerlines+1) = [];
+  endif
+  
+  str = fread (fid, "char=>char").';
+  fclose (fid);
+  
+  ## Call strread to make it do the real work
+  [varargout{1:max (nargout, 1)}] = strread (str, formatstr, varargin {:});
+endfunction