2

我有一堆.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逐行?

我喜欢 with 的便利性textread,但是为每一列(带有循环)'delimiter', '\n'取出单独的条目是相当痛苦的。for或者,我可以使用以下方法拆分每一行regexp

regexp(file{1}, '\|', 'split')

但这只会拆分每一行,并且不会处理空格(为此我需要再次regexp调用才能摆脱)。

那么最直接(甚至可能是最有效)的方法是什么?

EDIT1我想构建一个结构db = struct('file', [], 'time', [], 'color', [], 'tags'),一旦我读入第一行就很容易创建。

4

1 回答 1

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});
于 2012-08-16T15:24:45.697 回答