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

在octave/matlab中使用fscanf读取单元格数组中的文本文件,matlab,octave,textscan,Matlab,Octave,Textscan,我有一个逗号分隔的单个文本文件,其中包含字符串和整数,我正试图将其导入单元格数组。然后,我想基于相同的共振频率将其导出到多个文件中,并向文件名行添加文本 这是要导入的文本文件的示例:(请注意,该文件将比此文件大得多) 这是我想要创建的导出文本文件(文本文件1) 这是我想要创建的导出文本文件(文本文件2) 这是我想要创建的导出文本文件(文本文件3) 我在fscanf和使用逗号分隔的数据时遇到问题 fid = fopen('/tmp/freq_range_color_coded.txt'); m_s

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

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

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

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

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

我在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_(2,1)应该给我 277.912902832031250

谢谢


PS我使用的是倍频程,textscan与之不兼容。

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

看起来倍频程文本扫描与matlab不完全兼容。Octave 3.4.0中的stread和textscan与Matlab2009b中的实现不完全兼容(可能还有更高版本)。例如,在Octave 3.4.0中没有实现N=-1选项(重复读取格式直到字符串结束)。使用值N=正整数(读取格式N次)的工作原理与Matlab中的相同。我将不得不使用fscanf,但它是否可以使用分隔符

这不起作用,返回时出现错误:“textscan”在第6行附近未定义。这是文本扫描代码行。看起来倍频程文本扫描与matlab不完全兼容。Octave 3.4.0中的stread和textscan与Matlab2009b中的实现不完全兼容(可能还有更高版本)。例如,在Octave 3.4.0中没有实现N=-1选项(重复读取格式直到字符串结束)。使用值N=正整数(读取格式N次)的工作原理与Matlab中的相同。我将不得不使用fscanf,但它可以使用分隔符“表示它未定义”。你能详细介绍一下吗?Octave 3.4.0中的stread和textscan与Matlab 2009b中的实现不完全兼容(可能还有更高版本)。例如,在Octave 3.4.0中没有实现N=-1选项(重复读取格式直到字符串结束)。使用值N=正整数(读取格式N次)的工作原理与Matlab中的相同。我将不得不使用fscanf和delimters
123.912902832031250,2,/tmp/p000002.wav,00:00:02,44100,3675,2
343.912902832031250,5,/tmp/p000002.wavadded ,00:00:02,44100,3675,0
fid = fopen('/tmp/freq_range_color_coded.txt');
m_s = fscanf(fid,'%f %f %s %s %f %f %f');
fclose(fid);
fid = fopen('/tmp/freq_range_color_coded.txt');
m_s = textscan(fid,'%f %f %s %s %f %f %f','delimiter', ',', 'HeaderLines', 1);
fclose(fid);