Fix some typos
[scilab.git] / scilab / modules / matio / macros / loadmatfile.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2002-2010 - INRIA - Vincent COUVERT 
3 // Copyright (C) ???? - INRIA - Serge STEER 
4 // 
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at    
9 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10
11 function loadmatfile(varargin)
12 // Loads variables in a Matlab binary or ASCII file into Scilab
13 // This function has been developed following the 'MAT-File Format' description:
14 // www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/matfile_format.pdf 
15
16 // Verify that all inputs are character strings
17 for k=1:size(varargin)
18   if type(varargin(k))<>10 then
19     error(msprintf(gettext("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"),"loadmatfile"));
20   end
21 end
22
23 [lhs,rhs]=argn(0)
24
25 fil=[]
26 bin=[]
27 varnames=[]
28
29 if rhs==1 then 
30   fil = varargin(1)
31   fileExtension = fileparts(fil, "extension");
32   if isempty(fileExtension) then // No extension: looks for a file named fil.mat and treats it as a binary MAT-file
33     bin = %T
34     fil = file + ".mat";
35   elseif convstr(fileExtension, "l") <> ".mat" then // Extension other than .mat: treats the file as ASCII data.
36     bin = %F
37   else // Compatibility with old loadmatfile version
38     bin = %T
39   end
40 else // Try to find type binary or ASCII ?
41   // Filename is the first parameter: loadmatfile(filename[,opts])
42   // or the second parameter: loadmatfile(filetype,filename[,opts]) with filetype equal to -ascii or -mat
43   // filetype can also be included in opts
44   k=1
45   while k<=lstsize(varargin)
46     select varargin(k)
47     case "-mat"
48       bin=%T
49       k=k+1
50     case "-ascii"
51       bin=%F
52       k=k+1
53     case "-regexp"
54       warning(msprintf(gettext("%s: This feature has not been implemented: %s."),"loadmatfile","-regexp"));
55       while k<=lstsize(varargin) & and(varargin(k)<>["-mat","-ascii"])
56         k=k+1
57       end
58     else 
59       if isempty(fil) then // Filename
60         fil=pathconvert(varargin(k),%f,%t);
61         if fileparts(fil,"extension")==".mat" & isempty(bin) then // extension .mat and bin not already fixed by options
62           bin=%T
63         elseif isempty(bin) then
64           bin=%F
65         end
66       else // Variable names
67         varnames=[varnames;varargin(k)]
68       end
69       k=k+1
70     end
71   end
72   if isempty(bin) then
73     bin=%T
74   end
75 end
76
77 if fileparts(fil,"extension")=="" then
78   fil=fil+".mat"
79 end
80
81 // --- BINARY FILE ---
82 if bin then // Uses MATIO interface
83   
84   Name='';
85   Names=[];
86   Matrices=list()
87   
88   //-- Try to open the file
89   fd = matfile_open(pathconvert(fil, %F, %T), "r");
90   if fd==-1 then
91     error(msprintf(gettext("%s: Cannot open file %s.\n"),"loadmatfile",fil));
92   end
93   
94   //-- Read first variable
95   [Name, Matrix, Class] = matfile_varreadnext(fd);
96   
97   //-- Loop on the stored variables
98   while Name<>""
99     
100     // Old version compatibility | Name has been given
101     if isempty(varnames) | or(Name==varnames) then
102       Names=[Names,Name];Matrices($+1)=Matrix
103     end
104     
105     [Name, Matrix, Class] = matfile_varreadnext(fd);
106     
107   end
108   
109   //-- Close the file
110   matfile_close(fd)
111   
112   //-- Error while reading?
113   if isempty(Names) then
114     error(msprintf(gettext("%s: No variable read in file ''%s''. Check if your file is not corrupted.\n"),"loadmatfile",fil));
115   end
116   
117   //-- Return variables in the calling context
118   execstr('['+strcat(Names,',')+']=resume(Matrices(:))')
119   
120   // --- ASCII FILE ---
121 else
122   txt = mgetl(fil);
123   
124   // Remove comments
125   rowIndexes = grep(txt, "%")
126   for k = rowIndexes
127     txt(k) = part(txt(k), 1:(strindex(txt(k), "%") - 1));
128   end
129   
130   // Values read
131   mat = evstr(txt);
132   
133   // Output variable name generated from file name
134   name = fileparts(fil, "fname");
135   
136   execstr(name + " = resume(mat)")
137 end
138 endfunction
139