1

我有一个包含 20 列(列由 | 分隔)和许多行的文本文件。我怎样才能只阅读第 5,9,17 列?

4

3 回答 3

2

如果您想读取这样的文件(在我的示例中称为 text.txt)

1 | 2 | 3 | 4
2 | 3 | 4 | 5
3 | 4 | 5 | 6

做就是了

matrix = dlmread('text.txt');

这给了你

1     2     3     4
2     3     4     5
3     4     5     6

然后,您可以使用标准 matlab 矩阵表示法来提取例如第 1 列和第 4 列

col1 = matrix(:, 1) % the colon is used to tell matlab to take all rows
col4 = matrix(:, 4) 
于 2013-10-09T07:11:51.070 回答
1

您将必须形成另一个变量,从导入文本文件形成的变量数组中选择特定列

于 2013-10-09T06:48:43.253 回答
1

使用正确的输入参数,textscan可以做到这一点:

Ncols = 20;
colExtract = [5 9 17];

fspec = cell(1,Ncols);
fspec(:)={'%*f '}; % the asterisk tells textscan to ignore the column
fspec(colExtract)={'%f '};
fspec{end}=fspec{end}(1:end-1); % removes the space from the last parameter
fspecstr = horzcat(fspec{:});

fid = fopen(filename);
    indata = textscan(fid,fspecstr,'HeaderLines',1,'delimiter','\t');
fclose(fid);

col5 = indata{1};
col9 = indata{2};
col17= indata{3};

如您所见,我假设只有一个标题行并且数据是制表符分隔的。如果您的应用程序没有这个,当然改变它。

我想如果您正在处理只需要一小部分或无法将所有内容都保存在内存中的大文件,那么这是值得的。

于 2013-10-09T07:16:53.240 回答