2

我在“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”的示例代码,但不幸的是我收到了错误。任何帮助将非常感激。谢谢!

4

4 回答 4

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'}), :);
于 2013-06-13T20:45:13.133 回答
0

以及textscan您可以使用的importdata(但textscan可能更快):

content = importdata('Samp.txt');

然后content.rowheaders将包含标签(当然是重复的)。并content.data封装所有数字:

Data = content.data;

然后使用mat2cellreshape你可以做到这一点:

Grouped = mat2cell(Data, ones(size(Data,1),1));

这样,您将组合单元格中每个标签的数据。然后使用:

Mat = reshape(Grouped, [15 size(Data,1)/15]);

Mat将是一个以排序方式包含整个数据的元胞数组。Mat{1,:}b0所有出现的数据(或用于Mat(1,:)获取所有b0数据的元胞数组)。

希望能帮助到你。

于 2013-06-14T05:25:41.367 回答
0

打开文件,并使用适当的转换说明符读取每一列。

fileID = fopen('scan1.txt');
C = textscan(fileID, '%s %s %f32 %d8 %u %f %f %s %f');
fclose(fileID);
celldisp(C)

看见:

文档中心

于 2013-06-13T20:29:36.303 回答
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);
于 2013-06-13T20:38:22.740 回答