Mercurial > octave-nkf
view scripts/io/textread.m @ 12860:abd4093753e0
textread.m: Tests for function
* textread.m: Add 4 tests for function.
author | Philip Nienhuis <prnienhuis@users.sf.net> |
---|---|
date | Sun, 17 Jul 2011 17:35:56 -0700 |
parents | f38cf6224452 |
children | fe6e2afcd9ee |
line wrap: on
line source
## Copyright (C) 2009-2011 Eric Chassande-Mottin, CNRS (France) ## ## This file is part of Octave. ## ## Octave 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. ## ## Octave 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 Octave; see the file COPYING. 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, format = "%f", varargin) ## Check input if (nargin < 1) print_usage (); endif if (!ischar (filename) || !ischar (format)) error ("textread: FILENAME and FORMAT 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 (strcmpi (varargin, "headerlines"), 1); if (! isempty (headerlines)) hdr_lines = floor (varargin{headerlines + 1}); ## Beware of zero valued headerline, fskipl will count lines to EOF then if (hdr_lines > 0) fskipl (fid, hdr_lines); endif 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, format, varargin {:}); endfunction %!test %! f = tmpnam(); %! d = rand (5, 3); %! dlmwrite (f, d, 'precision', '%5.2f'); %! [a, b, c] = textread (f, "%f %f %f", "delimiter", ",", "headerlines", 3); %! unlink(f); %! assert (a, d(4:5, 1), 1e-2); %! assert (b, d(4:5, 2), 1e-2); %! assert (c, d(4:5, 3), 1e-2); %% Test input validation %!error textread () %!error textread (1) %!error textread ("fname", 1)