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

时间:2013-03-27 14:21:26

标签: matlab octave textscan

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

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

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

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

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

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

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

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

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

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

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)应该给我   277.912902832031250

感谢

PS我正在使用八度音,而且textscan与它不兼容。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

它看起来像octave textscan与matlab不完全​​兼容。 Octave 3.4.0中的strread和textscan与它们在Matlab 2009b(以及可能的更新版本)中的实现并不完全兼容。例如,在Octave 3.4.0中没有实现N = -1选项(直到字符串结尾的重复读取格式)。使用N =正整数(读取格式N次)的值与Matlab中的相同。我将不得不使用fscanf,但它可以使用分隔符