读取输入文件Matlab

时间:2014-11-17 11:00:34

标签: matlab

我在Matlab中读取输入文件时遇到问题。似乎所有行都有一个参数输入,除了最后一个是矢量:

INPUT FILE 
--------------
Field1: number
Field2: text (one word)
Field3: number
Field4: number
Field5: number
Field6: number
Field7: vector

我实施的代码如下:

fid = fopen('input.inp','r');
A = textscan(fid,'%s %f','Delimiter','\t','headerLines',2);
data = cat(2,A{:});

我想要一些帮助来处理我有一些文本/数字案例以及处理最后一行的向量这一事实。感谢

1 个答案:

答案 0 :(得分:2)

这就是你要找的......?

我认为你必须使用%s %s作为文本扫描的格式,而不是浮点数,因为例如矢量无法转换为浮点数。

我将此A = textscan(fid,'%s %s','Delimiter','\t');更改为包含%s %s。 另外,我认为你想要在第一维而不是第二维连接。

我认为您实际上想要创建输入文件的键/值对,而不是仅将每行读入单元格,但您没有说明。

INPUT FILE 
--------------
Field1: 1
Field2: two
Field3: 3
Field4: 4
Field5: 5
Field6: 6
Field7: [7 8 9]


fid = fopen('D:\tmp\t.txt','r');
A = textscan(fid,'%s %s','Delimiter','\t','headerLines',2);


cat(1,A{:})
ans =
{
  [1,1] = Field1: 1
  [2,1] = Field3: 3
  [3,1] = Field5: 5
  [4,1] = Field7: [7 8 9]
  [5,1] = Field2: two
  [6,1] = Field4: 4
  [7,1] = Field6: 6
}

如果要创建键/值对,则可以使用循环将它们拆分为键和值,如果需要,可以将其与Container类一起使用。你必须稍微过滤你的字符串(例如删除冒号等),但你得到了要点。

keySet = {};
valueSet = {};
for (n=1:size(A2,1))
    s = A2{n};
    ind = strfind(s,' ');  
    keySet{n} = s(1:ind(1));
    valueSet{n} =s(ind(1):end);
end

输出

keySet =
{
  [1,1] = Field1:
  [1,2] = Field3:
  [1,3] = Field5:
  [1,4] = Field7:
  [1,5] = Field2:
  [1,6] = Field4:
  [1,7] = Field6:
}

valueSet =
{
  [1,1] =  1
  [1,2] =  3
  [1,3] =  5
  [1,4] =  [7 8 9]
  [1,5] =  two
  [1,6] =  4
  [1,7] =  6
}

来自Container class doc

mapObj = containers.Map(keySet,valueSet)