2

アイトラッキングデバイスからのデータを解釈しようとしています。アイトラッカーからエクスポートされたファイルは ASCII 形式です。

片目のみのデータを含む記録ファイルは次のようになります (4 行のみ表示)。

6372825   645.3   275.4  1362.0 ...
6372826   644.6   274.0  1364.0 ...
6372827   644.2   273.2  1365.0 ...
6372828   642.5   272.7  1367.0 ...

上記の各行の末尾にあるドットは、出力ファイルの一部であることに注意してください。つまり、この質問のために追加していません。私は通常、これらのドットを検出し、後でそれらを破棄します。

上記の列の形式は [タイムスタンプ、X、Y、瞳孔サイズ、{...}] です。

両目からの記録は次のようになります (4 行のみ表示)。

505076    416.8   755.4  1148.0    23.6   751.1  1239.0 .....
505077    417.0   758.4  1143.0    23.7   753.1  1244.0 .....
505078    416.7   761.4  1146.0    24.6   752.1  1249.0 .....
505079    416.1   764.8  1150.0    27.3   750.2  1250.0 .....

この場合、データ形式は [タイムスタンプ, X(左), Y(左), 瞳孔サイズ(左), X(右), Y(右), 瞳孔サイズ(右), {.....}]

どちらの場合も、テキストから数値を抽出して配列に割り当てたいと思います。片目から​​の記録でこれを行う方法は次のとおりです。

eyeData = textscan(fid,'%d %f %f %f %s');

次のコードを使用して、双眼鏡の記録についても同じことができます。

eyeData = textscan(fid,'%d %f %f %f %f %f %f %s');

問題は、扱っているデータが単眼か双眼かを自動的に検出できるようにしたいということです。つまり、ASCII ファイルの列数が 5 列か 8 列かを判別する方法が必要です。どちらの場合も、最後の列は一連のドットだけで構成されていることに注意してください。私は通常これを捨てるだけですが、記録内の目の数を決定するのに役立つ場合があります (単眼記録は各行で終了し...、両眼記録は で終了するため.....)

各ASCIIファイルに含まれる列の数をどのように計算するかについてのアイデアは大歓迎です!

4

2 に答える 2

3

最初のデータ行を読み取り、列数を確認してから、ファイル位置インジケーターを元に戻すことができます。次に例を示します。

pos = ftell(fid);
cols = numel(regexp(fgetl(fid), '\s*([^\s]*)\s*'));
fseek(fid, pos, 'bof');

これに続いて、次のことができます。

if (cols == 5)
    eyeData = textscan(fid, '%d %f %f %f %s');
else
    eyeData = textscan(fid, '%d %f %f %f %f %f %f %s');
end

ところで、パターン文字列の最後の代わりに をtextscan使用することで、ドットを破棄するように指示できることに注意してください。%*s%s

于 2013-10-23T13:39:17.133 に答える