# HG changeset patch # User Guillaume Flandin # Date 1683278657 -3600 # Node ID 7ce8302036c116ad1d7b2a8decf5bcc221e08e2c # Parent 9583d971e60395cdbd2ec3041147d183bc49e463 fileread.m: Add encoding parameter (bug #64139). * scripts/io/fileread.m: Add "Encoding" input parameter. Add BISTs for input validation. diff -r 9583d971e603 -r 7ce8302036c1 scripts/io/fileread.m --- a/scripts/io/fileread.m Thu May 04 18:06:08 2023 +0200 +++ b/scripts/io/fileread.m Fri May 05 10:24:17 2023 +0100 @@ -24,12 +24,23 @@ ######################################################################## ## -*- texinfo -*- -## @deftypefn {} {@var{str} =} fileread (@var{filename}) +## @deftypefn {} {@var{str} =} fileread (@var{filename}) +## @deftypefnx {} {@var{str} =} fileread (@var{filename}, @var{param}, @var{value}, @dots{}) ## Read the contents of @var{filename} and return it as a string. -## @seealso{fread, fscanf, importdata, textscan, type} +## +## @var{param}, @var{value} are optional pairs of parameters and values. Valid +## options are: +## +## @table @asis +## @item @qcode{"Encoding"} +## Specify encoding used when reading from the file. This is a character +## string of a valid encoding identifier. The default is @qcode{"utf-8"}. +## @end table +## +## @seealso{fopen, fread, fscanf, importdata, textscan, type} ## @end deftypefn -function str = fileread (filename) +function str = fileread (filename, varargin) if (nargin < 1) print_usage (); @@ -39,7 +50,32 @@ error ("fileread: FILENAME argument must be a string"); endif - fid = fopen (filename, "r"); + encoding = "utf-8"; + + if (nargin > 1) + + ## Check for parameter/value arguments + for i_arg = 1:2:numel (varargin) + + if (! ischar (varargin{i_arg})) + error ("fileread: parameter %d must be a string", i_arg); + endif + parameter = varargin{i_arg}; + if (i_arg+1 > numel (varargin)) + error ('fileread: parameter "%s" missing value', parameter); + endif + + switch (lower (parameter)) + case "encoding" + encoding = varargin{i_arg+1}; + otherwise + error ('fileread: Unknown option "%s"', parameter); + endswitch + + endfor + endif + + fid = fopen (filename, "r", "n", encoding); if (fid < 0) error ("fileread: cannot open file"); endif @@ -66,3 +102,8 @@ ## Test input validation %!error fileread () %!error fileread (1) +%!error fileread ("filename", "Encoding") +%!error +%! fileread ("filename", "UnknownParam", "UnknownValue") +%!error +%! fileread ("filename", "Encoding", "UnknownValue")