我有一个这样的文件:
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)。我该怎么做呢?我用谷歌搜索,但没有找到任何解决方案。可能只是我很愚蠢,但我非常感谢任何帮助!
答案 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