使用octave / matlab中的fscanf将文本文件读取到单元格数组中

Reading text file using fscanf in octave / matlab into cell array

我有一个用逗号分隔的单个文本文件,该文件包含要尝试导入单元格数组中的字符串和整数。然后,我想将其导出到基于相同Resonance Freq的多个文件。并将文本添加到文件名行

这是要导入的文本文件的示例:(请注意,文件将比这个大得多)

1
2
3
4
5
6
7
Resonance Freq,number,Filename,time,fs,Split-3675,Session Num
277.912902832031250,1,p000001,00:00:01,44100,3675,0
123.912902832031250,2,p000002,00:00:02,44100,3675,2
277.912902832031250,3,p000003,00:00:03,44100,3675,0
277.912902832031250,4,p000001,00:00:01,44100,3675,1
343.912902832031250,5,p000002,00:00:02,44100,3675,0
277.912902832031250,6,p000003,00:00:03,44100,3675,4

这是我要创建的导出文本文件(文本file1)

1
2
3
277.912902832031250,1,/tmp/p000001.wav,00:00:01,44100,3675,0
277.912902832031250,3,/tmp/p000003.wav,00:00:03,44100,3675,0
277.912902832031250,4,/tmp/p000001.wav,00:00:01,44100,3675,1

这是我要创建的导出文本文件(文本file2)

1
123.912902832031250,2,/tmp/p000002.wav,00:00:02,44100,3675,2

这是我要创建的导出文本文件(文本file3)

1
343.912902832031250,5,/tmp/p000002.wavadded ,00:00:02,44100,3675,0

我在使用fscanf并使用逗号分隔的数据时遇到问题

1
2
3
fid = fopen('/tmp/freq_range_color_coded.txt');
m_s = fscanf(fid,'%f %f %s %s %f %f %f');
fclose(fid);

当我访问m_s(1,2)这样的单元格时,我得到的是单个字母而不是字段。如何获得它,所以当我键入m_s(1,2)时,我会得到整个字段示例

m_s(2,1) should give me
277.912902832031250

谢谢

PS我正在使用Octave音程,而textscan与之不兼容。


使用textscan导入时尝试跳过标题行:

1
2
3
fid = fopen('/tmp/freq_range_color_coded.txt');
m_s = textscan(fid,'%f %f %s %s %f %f %f','delimiter', ',', 'HeaderLines', 1);
fclose(fid);


看起来Octavetextscan与Matlab不完全??兼容。 Octave 3.4.0中的strread和textscan与Matlab 2009b(可能还有更高版本)中的实现不完全兼容。例如,在Octave 3.4.0中未实现N = -1选项(重复读取格式直到字符串结尾)。使用N =正整数(读取格式N次)与Matlab中的工作原理相同。我必须使用fscanf,但可以使用定界符