获取特定的行和列值ascii文件Matlab

时间:2017-02-02 14:30:32

标签: matlab

我有一个这样的文件:

A   B      C  D E  F G     H   I
1   105.28 1 22 84 2 10.55 21  2
2   357.01 0 32 34 1 11.43 28  1
3   150.23 3 78 22 0 12.02 11  0
4   357.01 0 32 34 1 11.43 28  1
5   357.01 0 32 34 1 11.43 28  1
6   357.01 0 32 34 1 11.43 28  1
...
17000 357.01 0 32 34 1 11.43 28  1

我希望从中获得基于行值(1)和列值(2)的特定值(如105.28)。我该怎么做呢?我用谷歌搜索,但没有找到任何解决方案。可能只是我很愚蠢,但我非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您可以先使用fopen首先打开文件,然后使用fgetl读取第一行,这样我们就可以分析有多少个标题,最终导致有多少列。确保使用strtrim删除前导和尾随空格。我假设每个列标题都没有空格。我们可以使用strsplit将行拆分为单独的字符串,忽略多个空格,我们只计算其中有多少这些空格。接下来,使用textscan读取文件的其余部分,指定您拥有与每行标头一样多的浮点数。您可以使用repmat来帮助您定义此内容。因为数字之间有多个空格,我们需要确保textscan忽略这些并将它们视为单个空格。完成后,textscan将返回数据列的单元格数组。您应该将所有这些与cell2mat组合以获取数字数组,然后您可以访问第一行和第二列。确保在fclose之后关闭文件。

假设您的文件名为text.txt,请执行以下操作:

% Open up the file
f = fopen('text.txt', 'r');

% Get the first line
line = fgetl(f);

% Split up the line into separate headers
c = strsplit(strtrim(line), ' ', 'CollapseDelimiters', true);

% Create formatting string
formatter = repmat('%f', 1, numel(c));

% Read the rest of the file
chars = textscan(f, formatter, 'MultipleDelimsAsOne', true);

% Combine the cell array into a numeric array
out = cell2mat(chars);

% Close the file
fclose(f);

out包含输出,我们得到了您的示例:

>> out

out =

    1.0000  105.2800    1.0000
    2.0000  357.0100         0
    3.0000  150.2300    3.0000

最后要访问第一行,第二列只使用普通索引:

>> out(1,2)

ans =

  105.2800