在Matlab中读取文本文件

时间:2012-02-08 14:56:01

标签: matlab file-io text-files

我在阅读 txt 文件时遇到问题,该文件包含10列和2行标题,但问题是文件中间出现了多次相同的标题并且{{1没有功能。这是我的文件示例:

file.txt的

textread()

这是我试过的代码:

headerline1 aaaa
headerline2 111 123
20/12/2000 name1 name2 name3... name8 0
21/12/2000 name1 name2 name3... name8 0
22/12/2000 name1 name2 name3... name8 0
headerline1 aaaa
headerline2 111 123
25/12/2000 name1 name2 name3... name8 0
27/12/2000 name1 name2 name3... name8 0
...

它在重复标题的行中准确地给出了错误。你有什么想法我怎么能避免这些标题并阅读完整的文件?问题是我有数百种这类文件,所以我不能每次都手动删除。

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

您可以先使用textscan逐行读取文件,将整行作为字符串。然后删除标题,并处理其余的

以下是一个例子:

%# read the whole file to a temporary cell array
fid = fopen(filename,'rt');
tmp = textscan(fid,'%s','Delimiter','\n');
fclose(fid);

%# remove the lines starting with headerline
tmp = tmp{1};
idx = cellfun(@(x) strcmp(x(1:10),'headerline'), tmp);
tmp(idx) = [];

%# split and concatenate the rest
result = regexp(tmp,' ','split');
result = cat(1,result{:});

%# delete temporary array (if you want)
clear tmp

答案 1 :(得分:2)

如果您不想使用perl,awk或类似的东西来预处理您的数据(我实际上可以理解),您可以尝试使用fopen,{{逐行读取您的文件1}}和fgetl(例如,这里可以看到一个例子:https://stackoverflow.com/a/2858208/701049)并检查每一行是否包含标题。如果是这样,feof你的循环。如果没有,请像现在一样使用continue之类的方法来处理它。