如何处理非数字文本文件并最有效地转换为struct?

时间:2012-08-16 14:56:36

标签: matlab

我有一堆.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')的结构,一旦我读完第一行就很容易创建。

1 个答案:

答案 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});