从文本文件中将数据读入MATLAB

Fif*_*ion 4 file-io matlab text-files

我有一个具有以下结构的文本文件:

1999-01-04
1,100.00
1,060.00
1,092.50
0
6,225
1,336,605
37
1999-01-05 
1,122.50
1,087.50
1,122.50
0
3,250
712,175
14
...
Run Code Online (Sandbox Code Playgroud)

该文件包含重复的八个值集合(一个日期后跟七个数字,每个数字各自独立).

我想把它读入MATLAB并将值放到不同的向量中.我试图用几种不同的方法来实现这一点,但没有一种方法有效 - 都输出了某种错误.

如果它很重要,我在Mac上这样做.

gno*_*ice 9

编辑:这是我之前在答案中的代码的较短版本...

如果您想直接读取数据文件,而不必像dstibbe建议那样进行预处理,则以下内容应该有效:

fid = fopen('datafile.txt','rt');
data = textscan(fid,'%s %s %s %s %s %s %s %s','Delimiter','\n');
fclose(fid);
data = [datenum(data{1}) cellfun(@str2double,[data{2:end}])]';
Run Code Online (Sandbox Code Playgroud)

上面的代码将每组8个值放入8×N矩阵中,N是数据文件中8个线组的数量.日期将转换为序列日期编号,以便它可以包含在矩阵中的其他双精度值中.以下函数(在上面的代码中使用)可能是有意义的:TEXTSCAN,DATENUM,CELLFUN,STR2DOUBLE.

  • @Fifth:让你的案子变得困难的是在数字格式中使用逗号.通常,逗号将用于将数字彼此分开,而不是表示数字内的数千和数百万之间的分隔.从Amro的例子中可以看出,对于具有更好格式化数字的情况,MATLAB代码是微不足道的. (2认同)
  • @Fifth:实际上,我能够提出更短的代码版本,与Amro的紧凑答案相比,无需对数据文件进行任何预处理. (2认同)
  • 这确实更短:)顺便说一句,你可以在textscan上使用'CollectOutput'选项,因此你可以避免调用cellfun:> data = textscan(%...%,'CollectOutput',1); > M = [datenum(data {1}(:,1))str2double(data {1}(:,2:end))]; (2认同)