Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 检测列式文本文件中的列数_Matlab_Textscan - Fatal编程技术网

Matlab 检测列式文本文件中的列数

Matlab 检测列式文本文件中的列数,matlab,textscan,Matlab,Textscan,我正试图解释来自眼球跟踪设备的数据。从眼动跟踪器导出的文件为ASCII格式 包含单眼数据的记录文件如下所示(仅显示四行): 请注意,上方每行末尾的点是输出文件的一部分,也就是说,我没有为了这个问题而添加它们。我通常会发现这些点,然后把它们扔掉 上述列的格式为[timestamp,X,Y,pupilSize,{…}] 双眼记录如下(仅显示四行): 在这种情况下,数据格式是[时间戳,X(左),Y(左),pupilSize(左),X(右),Y(右),pupilSize(右),{……}] 在这两种情况下

我正试图解释来自眼球跟踪设备的数据。从眼动跟踪器导出的文件为ASCII格式

包含单眼数据的记录文件如下所示(仅显示四行):

请注意,上方每行末尾的点是输出文件的一部分,也就是说,我没有为了这个问题而添加它们。我通常会发现这些点,然后把它们扔掉

上述列的格式为[timestamp,X,Y,pupilSize,{…}]

双眼记录如下(仅显示四行):

在这种情况下,数据格式是[时间戳,X(左),Y(左),pupilSize(左),X(右),Y(右),pupilSize(右),{……}]

在这两种情况下,我都希望从文本中提取数字并将其分配给数组。以下是我如何通过单眼录制的:

eyeData = textscan(fid,'%d %f %f %f %s');
我可以使用以下代码对双目记录执行相同的操作:

eyeData = textscan(fid,'%d %f %f %f %f %f %f %s');
问题是,我希望能够自动检测我处理的数据是单目还是双目。换句话说,我需要一种方法来确定ASCII文件是有五列还是八列。请注意,这两种情况下的最后一列只是由一系列点组成。虽然我通常只是把它扔掉,但它可能有助于确定记录中的眼睛数量(因为单目记录以
..
结束每一行,双目记录以
..
结束)


任何关于如何计算每个ASCII文件中有多少列的想法都是欢迎的

您可以使用shell命令对文件中的列进行计数,您可以使用

s=系统(shell_命令)

要生成符合您需要的“shell_命令”,请查看以下链接


您可以使用shell命令对文件中的列进行计数,您可以使用

s=系统(shell_命令)

要生成符合您需要的“shell_命令”,请查看以下链接


您可以读取第一行数据,检查列数,然后还原文件位置指示器,例如:

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

顺便说一下,请注意,您可以通过使用
%*s
而不是模式字符串中的最后一个
%s
来告诉
textscan
放弃点。

您可以读取第一行数据,检查列数,然后还原文件位置指示器,例如:

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
来丢弃点。

使用ftell和fseek,而不仅仅是frewind,是否有特定的原因?@Magla您无法确定原始位置是文件的开头(例如,数据前面有标题行)。使用ftell和fseek,而不是单独使用frewind,是否有特殊原因?@Magla您无法确定原始位置是文件的开头(例如,数据前面有标题行)。