我在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{:});
我想要一些帮助来处理我有一些文本/数字案例以及处理最后一行的向量这一事实。感谢
答案 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
}
mapObj = containers.Map(keySet,valueSet)