我在“file.txt”中有以下格式的数据:
b0, 2,1
b1, 3,4
b2, 5,6
b3, 7,8
b4, 9,10
L0, 11, 12
L1, 13, -154
L2, 16, 18
L3,-19,-20
L4,-21,-22
L5,-23,24
L6, 25,28
L7, 27,30
L8, 31,35
L9,-38,40
b0, 0.1,89
该数据继续以相同的顺序(即b1,b2,b3 ......)继续直到大数。我想以矩阵格式读取b0 ... b4的两个数字(即每行中用逗号分隔的数字)中的每一个,这样我就可以用它们做进一步的计算。基本上每个b0在“file.txt”中每15行出现,依次为b1,b2,b3,b4。我尝试使用一些带有“textscan”的示例代码,但不幸的是我收到了错误。任何帮助将非常感激。谢谢!
答案 0 :(得分:0)
打开文件,并使用适当的转换说明符读取每列。
fileID = fopen('scan1.txt');
C = textscan(fileID, '%s %s %f32 %d8 %u %f %f %s %f');
fclose(fileID);
celldisp(C)
看到它:
答案 1 :(得分:0)
这是我的方法。在MATLAB中使用for循环很糟糕,但是每当我处理单元格时,我都会发现它被使用了。这可能是一种更好的方法,但这似乎适用于你给我的数据。
f = fopen('data.txt');
a = textscan(f, '%s', 'Delimiter', ',');
names = [];
vals_a = [];
vals_b = [];
for i = 1:3:numel(a{1})
names = [names; a{1}{i+0}];
vals_a = [vals_a; str2num(a{1}{i+1})];
vals_b = [vals_b; str2num(a{1}{i+2})];
end
fclose(f);
答案 2 :(得分:0)
由于您使用逗号分隔值,因此需要更改textscan
使用的分隔符。要将这两个数字组合成一个数组,您可以使用CollectOutput
选项:
fid = fopen('sample.txt');
C = textscan(fid, '%s %f %f', 'Delimiter', ',', 'CollectOutput', true);
fclose(fid);
提取所有b0
字段:
values = C{2}(strcmp(C{1}, 'b0'), :);
并提取以b0, ..., b4
values = C{2}(ismember(C{1}, {'b0', 'b1', 'b2', 'b3', 'b4'}), :);
答案 3 :(得分:0)
与textscan
一样,您可以使用importdata
(但textscan
可能会更快):
content = importdata('Samp.txt');
然后content.rowheaders
将包含标签(当然会重复)。 content.data
封装了所有数字:
Data = content.data;
Grouped = mat2cell(Data, ones(size(Data,1),1));
这样,您将组合单元格中每个标签的数据。然后使用:
Mat = reshape(Grouped, [15 size(Data,1)/15]);
Mat
将是一个以排序方式包含整个数据的单元格数组。 Mat{1,:}
所有匹配项的b0
数据(或使用Mat(1,:)
获取所有b0
数据的单元格数组。)
希望它有所帮助。