【问题标题】:Reading text file using fscanf in octave / matlab into cell array在octave / matlab中使用fscanf将文本文件读入单元格数组
【发布时间】:2013-03-27 14:21:26
【问题描述】:

我有一个逗号分隔的单个文本文件,其中包含字符串和整数,我正在尝试将其导入到元胞数组中。然后我想将它导出到基于相同共振频率的多个文件中。并将文本添加到文件名行

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

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 我用的是 octave 和 textscan 不兼容。

【问题讨论】:

  • “说它是未定义的。”。你能扩展一下吗?
  • Octave 3.4.0 中的 strread 和 textscan 与它们在 Matlab 2009b 中的实现不完全兼容(可能还有更高的版本)。例如,在 Octave 3.4.0 中没有实现 N=-1 选项(重复读取格式直到字符串结尾)。使用 N=a 正整数(读取格式 N 次)的值与在 Matlab 中的工作方式相同。我必须使用带分隔符的 fscanf

标签: matlab octave textscan


【解决方案1】:

使用 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);

【讨论】:

  • 这不起作用返回错误:`textscan' undefined near line 6. 这是 textscan 代码行
  • 看起来 octave textscan 与 matlab 不完全兼容。 Octave 3.4.0 中的 strread 和 textscan 与它们在 Matlab 2009b 中的实现不完全兼容(可能还有更高版本)。例如,在 Octave 3.4.0 中没有实现 N=-1 选项(重复读取格式直到字符串结束)。使用 N=a 正整数(读取格式 N 次)的值与在 Matlab 中的工作方式相同。我必须使用 fscanf 但它可以使用分隔符
【解决方案2】:

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

【讨论】:

    最近更新 更多