mfscanf

reads input from the stream pointer stream (interface to the C fscanf function)

mscanf

reads input from the standard input (interface to the C scanf function)

msscanf

reads its input from the character string (interface to the C sscanf function)

Calling Sequence

[n, v_1,..., v_m] = mfscanf([niter,]fd, format)
L = mfscanf([niter,] fd,format)

[n, v_1,..., v_m] = mscanf([niter,] format)
L = mscanf([niter,]format)

[n, v_1,..., v_m] = msscanf([niter,]str, format)
L = msscanf([niter,] str, format)

Arguments

:format a Scilab string describing the format to use to write the
remaining operands. The format operand follows, as close as possible, the C printf format operand syntax as described in scanf_conversion.
: :fd a positive integer: a file descriptor returned by the function
mopen. The value -1 refers to the last opened file.

: :str a Scilab string or string vector. : :niter an integer: the number of times the format to be used. : :n an integer: the number of data read or -1 if EOL has been

encountered before any datum has been read.
: :v_i Each function reads characters, interprets them according to a
format, and stores the results in its output arguments. If more than n output arguments are provided, the last ones v_n+1, ..., v_m are set to empty matrices.
: :L if all data are homogeneous they are stored in a unique vector
which is returned, otherwise subsequences of same data type are stored in matrices and a mlist (with type cblock) containing all the built matrices is returned.

:

Description

The mfscanf function reads characters from the stream fd.

The mscanf function reads characters from Scilab window.

The msscanf function reads characters from the Scilab string str.

The niter optional argument specifies how many time the format has to used. One iteration produces one line in the output matrix. If niter==-1 the function iterates up to the end of file. The niter default value is 1.

Comments about precision:

mfscanf is based on C function fscanf. If you use ‘%f’, ‘%g’, ‘%e’ as format your data will be cast to float and returned in a Scilab variable.

If this Scilab variable is a double then you can have some precision errors. In this case, it is better to use ‘%lg’ format.

Examples

//----------------------------------------------------------
//--    Simple use                                        --
//----------------------------------------------------------
s='1 1.3'  //a string
[n,a,b]=msscanf(s,"%i %e")
L=msscanf(s,"%i %e")

//----------------------------------------------------------
//--    Formats samples                                   --
//----------------------------------------------------------

msscanf(" 12\n",'%c%c%c%c') //scan characters

msscanf('0xabc','%x') //scan with hexadecimal format

msscanf('012345abczoo','%[0-9abc]%s')  //[] notation

// reading float and double
msscanf('4345.988','%g')-4345.988 // scan as a float
msscanf('4345.988','%lg')-4345.988 // scan as a double

//----------------------------------------------------------
//--    scanning multi-line data files                    --
//----------------------------------------------------------
//create a file with data
u=`mopen`_(TMPDIR+'/foo','w');
t=(0:0.1:%pi)';`mfprintf`_(u,"%6.3f %6.3f\n",t,`sin`_(t))
`mclose`_(u);

u=`mopen`_(TMPDIR+'/foo','r'); // open the file for reading
//read the file line by line
[n,a,b]=`mfscanf`_(u,'%e %e') //first line using multiple LHS syntax
l=`mfscanf`_(u,'%e %e')       //second one using single LHS syntax
//use niter to read 5 more lines
l=`mfscanf`_(5,u,'%e %e')

//use niter=-1 to read up to the end of file
l=`mfscanf`_(-1,u,'%e %e')

`mclose`_(u); //close the file

//----------------------------------------------------------
//--    scanning multi-line  strings vectors              --
//----------------------------------------------------------
//use niter to scan a string vector
[n,Names,Ages]=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
D=msscanf(-1,["Alain 19";"Pierre 15";"Tom 12"],'%s %d')
`typeof`_(D)
Names=D(:,1) //strings
Age=D(:,2)   //numerical values

See Also

  • mclose closes an opened file
  • meof check if end of file has been reached
  • mfprintf converts, formats, and writes data to a file
  • fprintfMat writes a matrix in a file
  • fscanfMat reads a matrix from a text file
  • mget reads byte or word in a given binary format and converts to a double type
  • mgetstr reads a character string from a file
  • mopen open a file in Scilab
  • mprintf converts, formats, and writes data to the main scilab window
  • mput writes byte or word in a given binary format
  • mputstr write a character string in a file
  • mseek set current position in binary file.
  • mtell binary file management
  • mdelete deletes file(s)
  • scanf_conversion scanf, sscanf, fscanf conversion specifications

Table Of Contents

This Page