我有一堆.txt
个文件,格式如下:
|file | time | color | tags |
|1 | 1:10 | red | ok, correct|
|2 | 2:20 | blue | bad |
|3 | 1:20 | yellow | sometag |
第一行指定列名称。 后续行是“数据库”条目。
我想阅读此文件,并将所有信息放入Matlab结构中。我想知道最有效的方法是什么。
textread
与'delimiter', '\n'
并分别处理每一行?textread
与'delimiter', '|'
并且必须确定哪些条目属于一起?fread
逐行?我喜欢使用textread
'delimiter', '\n'
的便利性,但是为每个列输出个别条目(使用for
循环)会非常痛苦。或者,我可以使用regexp
分割每一行:
regexp(file{1}, '\|', 'split')
但这只会拆分每一行,并且不会处理空格(我需要另外regexp
调用才能摆脱它。)
那么最直接(甚至最有效)的方式是什么?
EDIT1 我想构建一个类似db = struct('file', [], 'time', [], 'color', [], 'tags')
的结构,一旦我读完第一行就很容易创建。
答案 0 :(得分:1)
让我们使用textscan:
fid = fopen('asdf.txt');
header = textscan(fid, '%s', 5, 'delimiter', '|');
data=textscan(fid, '|%d %s %s %s','delimiter','|');
fclose(fid);
给出:
data =
[3x1 double] {3x1 cell} {3x1 cell} {3x1 cell}
从这里可以很容易地找到你想要的结构。字符串还有一些额外的空格,需要修剪:
data{2} = strtrim(data{2});