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', '|'に属しているかを判断する必要がありますか?
  • fread1行ずつ?

textreadwithの便利さは気に入っていますが、各列の個々のエントリを(ループ'delimiter', '\n'を使用して)取得するのは非常に面倒です。forまたは、次を使用して各行を分割することもできますregexp

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

ただし、これは各行を分割するだけで、空白は処理されません(空白をregexp取り除くには、別の呼び出しが必要になります)。

では、これを行うための最も簡単な(そしておそらく最も効率的な)方法は何ですか?

EDIT1db = 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 に答える