Mercurial > hg > octave-lyh
annotate scripts/io/importdata.m @ 15546:3bf1e0da76b0
importdata: new function
author | Erik Kjellson <erikiiofph7@users.sourceforge.net> |
---|---|
date | Fri, 19 Oct 2012 13:56:22 -0400 |
parents | |
children | 9a455cf96dbe |
rev | line source |
---|---|
15546
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
1 ## Copyright (C) 2012 Erik Kjellson <erikiiofph7@users.sourceforge.net> |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
2 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
3 ## This program is free software; you can redistribute it and/or modify |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
4 ## it under the terms of the GNU General Public License as published by |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
5 ## the Free Software Foundation; either version 3 of the License, or |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
6 ## (at your option) any later version. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
7 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
8 ## This program is distributed in the hope that it will be useful, |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
11 ## GNU General Public License for more details. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
12 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
13 ## You should have received a copy of the GNU General Public License |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
14 ## along with this program; if not, see <http://www.gnu.org/licenses/>. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
15 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
16 ## -*- texinfo -*- |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
17 ## @deftypefn {Function File} {@var{A} =} importdata (@var{fileName}) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
18 ## @deftypefnx {Function File} {@var{A} =} importdata (@var{fileName}, @var{delimiter}) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
19 ## @deftypefnx {Function File} {@var{A} =} importdata (@var{fileName}, @var{delimiter}, @var{headerRows}) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
20 ## @deftypefnx {Function File} {[@var{A}, @var{delimiter}] =} importdata (...) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
21 ## @deftypefnx {Function File} {[@var{A}, @var{delimiter}, @var{headerRows}] =} importdata (...) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
22 ## Importing data from file. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
23 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
24 ## Importing the contents of file @var{fileName} into workspace. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
25 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
26 ## Input parameters: |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
27 ## @table @input |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
28 ## @item @var{fileName} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
29 ## The file name for the file to import. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
30 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
31 ## @item @var{delimiter} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
32 ## The character separating columns of data. Use @code{\t} for tab. (Only valid for ascii files) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
33 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
34 ## @item @var{headerRows} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
35 ## Number of header rows before the data begins. (Only valid for ascii files) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
36 ## @end table |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
37 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
38 ## Different file types are supported: |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
39 ## @itemize |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
40 ## @item Ascii table |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
41 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
42 ## Importing ascii table using the specified number of header rows and the specified delimiter. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
43 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
44 ## @item Image file |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
45 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
46 ## @item Matlab file |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
47 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
48 ## @item Wav file |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
49 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
50 ## @end table |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
51 ## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
52 ## @seealso{textscan, dlmread, csvread, load} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
53 ## @end deftypefn |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
54 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
55 ## Author: Erik Kjellson <erikiiofph7@users.sourceforge.net> |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
56 ## 2012-10-16 First version |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
57 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
58 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
59 function [output, delimiter, headerRows] = importdata(varargin) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
60 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
61 # Default values |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
62 fileName = ''; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
63 delimiter = ''; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
64 headerRows = -1; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
65 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
66 ########## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
67 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
68 # Check input arguments |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
69 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
70 if (nargin < 1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
71 print_usage (); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
72 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
73 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
74 fileName = varargin{1}; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
75 # Check that the file name really is a string |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
76 if not(ischar(fileName)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
77 error('importdata: File name needs to be a string.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
78 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
79 if strcmpi(fileName, '-pastespecial') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
80 error('importdata: Option ''-pastespecial'' not implemented.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
81 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
82 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
83 if (nargin > 1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
84 delimiter = varargin{2}; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
85 # Check that the delimiter really is a string |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
86 if not(ischar(delimiter)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
87 error('importdata: Delimiter needs to be a character.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
88 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
89 if ((length(delimiter) > 1) && not(strcmpi(delimiter, '\t'))) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
90 error('importdata: Delimiter cannot be longer than 1 character.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
91 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
92 if strcmpi(delimiter, '\') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
93 delimiter = '\\'; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
94 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
95 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
96 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
97 if (nargin > 2) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
98 headerRows = varargin{3}; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
99 if ((~isnumeric(headerRows)) || (headerRows < 0)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
100 error('importdata: Number of header rows needs to be an integer number >= 0.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
101 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
102 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
103 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
104 if (nargin > 3) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
105 error('importdata: Too many input arguments.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
106 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
107 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
108 ########## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
109 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
110 # Check file format |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
111 # Get the extension from the file name. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
112 [d n fileExt v] = fileparts(fileName); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
113 # Make sure file extension is in lower case. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
114 fileExt = lower(fileExt); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
115 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
116 switch fileExt |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
117 case {'.au','.snd'} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
118 error(['importdata: Not implemented for file format ''' fileExt '''.']) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
119 case '.avi' |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
120 error(['importdata: Not implemented for file format ''' fileExt '''.']) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
121 case {'.bmp', '.cur', '.gif', '.hdf', '.ico', '.jpe', '.jpeg', '.jpg', '.pbm', '.pcx', '.pgm', '.png', '.pnm', '.ppm', '.ras', '.tif', '.tiff', '.xwd'} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
122 delimiter = NaN; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
123 headerRows = 0; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
124 [output.cdata, output.colormap, output.alpha] = imread(fileName); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
125 case '.mat' |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
126 delimiter = NaN; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
127 headerRows = 0; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
128 output = load(fileName); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
129 case '.wk1' |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
130 error(['importdata: Not implemented for file format ''' fileExt '''.']) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
131 case {'.xls', '.xlsx'} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
132 #FIXME: implement Excel import. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
133 error(['importdata: Not implemented for file format ''' fileExt '''.']) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
134 case {'.wav', '.wave'} |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
135 delimiter = NaN; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
136 headerRows = 0; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
137 [output.data, output.fs] = wavread(fileName); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
138 otherwise |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
139 # Assume the file is in ascii format. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
140 [output, delimiter, headerRows] = importdata_ascii(fileName, delimiter, headerRows); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
141 endswitch |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
142 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
143 # If there are any empty fields in the output structure, then remove them |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
144 if (isstruct(output) && (length(output) == 1)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
145 fields = fieldnames(output); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
146 for i=1:length(fields) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
147 if isempty(getfield(output, fields{i})) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
148 output = rmfield(output, fields{i}); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
149 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
150 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
151 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
152 # If only one field is left, replace the structure with the field, i.e. output = output.onlyFieldLeft |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
153 # Update the list of fields |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
154 fields = fieldnames(output); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
155 if (length(fields) == 1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
156 output = getfield(output, fields{1}); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
157 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
158 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
159 endfunction |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
160 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
161 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
162 ######################################## |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
163 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
164 function [output, delimiter, headerRows] = importdata_ascii(fileName, delimiter, headerRows) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
165 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
166 # Define the fields in the output structure so that the order will be correct. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
167 output.data = []; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
168 output.textdata = []; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
169 output.rowheaders = []; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
170 output.colheaders = []; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
171 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
172 # Read file into string and count the number of header rows |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
173 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
174 fileContent = fileread(fileName); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
175 # The characters need to be in a row vector instead of a column vector to be recognized as a proper string. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
176 if (size(fileContent,2) == 1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
177 fileContent = fileContent'; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
178 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
179 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
180 # Split the file into rows (using \r\n or \n as delimiters between rows). |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
181 fileContentRows = regexp(fileContent, '\r?\n', 'split'); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
182 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
183 #FIXME: guess delimiter, if it isn't defined |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
184 if (isempty(delimiter)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
185 error('importdata: Guessing delimiter is not implemented yet, you have to specify it.') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
186 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
187 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
188 #FIXME: A more intelligent way to count number of header rows. This is needed e.g. when delimiter=' ' and the header contains spaces... |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
189 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
190 # If number of header rows is undefined, then count the number of header rows by step through row by row and look for the delimiter. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
191 # Assume that the header can't contain any delimiter. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
192 if (headerRows < 0) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
193 headerRows = 0; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
194 for i=1:length(fileContentRows) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
195 if (isempty(regexp(fileContentRows{i}, delimiter, 'once'))) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
196 headerRows++; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
197 else |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
198 # Data part has begun and therefore no more header rows can be found |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
199 break; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
200 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
201 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
202 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
203 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
204 # Put the header rows in output.textdata. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
205 if (headerRows > 0) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
206 output.textdata = fileContentRows(1:headerRows)'; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
207 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
208 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
209 # If space is the delimiter, then remove spaces in the beginning of each data row. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
210 if strcmpi(delimiter, ' ') |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
211 for i=(headerRows+1):length(fileContentRows) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
212 # strtrim does not only remove the leading spaces but also the tailing spaces, but that doesn't really matter. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
213 fileContentRows{i} = strtrim(fileContentRows{i}); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
214 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
215 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
216 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
217 # Remove empty data rows. Go through them backwards so that you wont get out of bounds. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
218 for i=length(fileContentRows):-1:(headerRows+1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
219 if (length(fileContentRows{i}) < 1) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
220 fileContentRows = [fileContentRows(1:i-1), fileContentRows(i+1:length(fileContentRows))]; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
221 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
222 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
223 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
224 # Count the number of data columns. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
225 # If there are different number of columns, use the greatest value. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
226 dataColumns = 0; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
227 delimiterPattern = delimiter; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
228 # If space is the delimiter, then multiple spaces should count as ONE delimiter. Also ignore leading spaces. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
229 if (strcmpi(delimiter, ' ')) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
230 delimiterPattern = ' +'; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
231 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
232 for i=(headerRows+1):length(fileContentRows) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
233 dataColumns = max(dataColumns, length(regexp(fileContentRows{i}, delimiterPattern, 'split'))); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
234 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
235 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
236 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
237 # Go through the data and put it in either output.data or output.textdata depending on if it is numeric or not. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
238 output.data = NaN(length(fileContentRows)-headerRows, dataColumns); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
239 for i=(headerRows+1):length(fileContentRows) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
240 # Only use the row if it contains anything other than white-space characters. |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
241 if (length(regexp(fileContentRows{i}, '\S','match')) > 0) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
242 rowData = regexp(fileContentRows{i}, delimiterPattern, 'split'); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
243 for j=1:length(rowData) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
244 # Try to convert the column to a number, if it works put it in output.data, otherwise in output.textdata |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
245 if (length(str2num(rowData{j})) > 0) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
246 output.data((i-headerRows),j) = str2num(rowData{j}); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
247 else |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
248 output.textdata{i,j} = rowData{j}; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
249 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
250 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
251 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
252 endfor |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
253 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
254 # Check wether rowheaders or colheaders should be used |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
255 if ((headerRows == dataColumns) && (size(output.textdata,2) == 1)) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
256 output.rowheaders = output.textdata; |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
257 elseif (size(output.textdata,2) == dataColumns) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
258 output.colheaders = output.textdata(end,:); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
259 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
260 |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
261 # When delimiter = '\t' convert it to a tab, as is done in the Matlab version |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
262 if (strcmpi(delimiter, '\t')) |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
263 delimiter = sprintf('\t'); |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
264 endif |
3bf1e0da76b0
importdata: new function
Erik Kjellson <erikiiofph7@users.sourceforge.net>
parents:
diff
changeset
|
265 endfunction |