Я пытаюсь интерпретировать данные с устройства отслеживания взгляда. Файлы, экспортированные из устройства отслеживания взгляда, имеют формат ASCII.
Файлы записи, содержащие данные только для одного глаза, выглядят следующим образом (показаны только четыре строки):
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, размер зрачка, {...}]
Запись для обоих глаз выглядит так (показаны только четыре ряда):
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 пять столбцов или восемь. Обратите внимание, что последний столбец в обоих случаях состоит просто из набора точек. Хотя я обычно просто выбрасываю это, это может быть полезно для определения количества глаз в записи (поскольку монокулярные записи заканчиваются каждой строкой на ...
, а бинокулярные на .....
).
Любые идеи о том, как я могу определить, сколько столбцов в каждом файле ASCII, приветствуются!