Mercurial > hg > octave-nkf
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