如何在matlab / octave中读取格式化输入?

时间:2012-09-26 23:10:39

标签: matlab octave

我打算阅读带有5列的格式化.txt文件,并按以下方式进行组织:

0 1:0.007477 2:0.000000 3:1.000000 id:10002 #we = GX008-86-4444840 an = 1 asd = 0.086622
0 1:0.603738 2:0.000000 3:1.000000 id:10002 #we = GX037-06-11625428 an = 0.0031586555555558 asd = 0.0897452
0 1:0.214953 2:0.000000 3:0.000000 id:10002 #we = GX044-30-4142998 an = 0.00841930701072746 asd = 0.0999735

我计划将这些文件的内容读入矩阵,其中每个元素都将被视为字符串。在我成功将其读入矩阵后,我计划在八度音阶中使用字符串操作函数来删除不必要的id:etc。

但是,我无法正确读取文件。我尝试了textscanfscanf和其他此类命令等。

例如:

[sam,count]=fscanf(fid,'%d %*s %*s %*s %*s %*s',[5,inf])

返回sam = [] (0x1) ???count = 0。我试图阅读关于此的文档,但它非常严重。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

这是使用textscan的工作示例。在Matlab中,它正在发挥作用。我没有用Octave测试它。

>> fid = fopen('test.txt')
>> A = textscan(fid,'%f 1:%f 2:%f 3:%f id:%f %*[^\n]')

A = 

  Columns 1 through 4

    [3x1 double]    [3x1 double]    [3x1 double]    [3x1 double]

  Column 5

    [3x1 double]

>> A{2}

ans =

    0.0075
    0.6037
    0.2150

编辑:将其转换为矩阵:

cell2mat(A)

答案 1 :(得分:0)

使用fopenfgetl,您可以将文件的每一行读入MATLAB / OCTAVE单元格数组。

一个简单的例子是

fid=foepn('c:\path\to\file.txt') %# open the file for reading

%#Loop through the file reading one line at a time
i=0;
while ~feof(fid)
   i=i+1;
   cellContents{i,1}=fgetl(fid);
end

现在cellContents的每个元素都是文件中一行的内容。