我有一个充满传感器数据的文本文件,每行有以下格式:
Date: 2014-04-22_09-48-16.547400 Timestamp: 2873652.086362542 Gyro.X: -0.0372661240398884 Gyro.Y: 0.0541165024042130 Gyro.Z: 0.1216094791889191 UserAccel.X: -0.0201703608036041 UserAccel.Y: -0.0118222190067172 UserAccel.Z: -0.0187157746404409 Gravity.X: -0.9937761425971985 Gravity.Y: -0.0025820778682828 Gravity.Z: -0.1113654002547264
我想从文件中得到的只是时间戳,陀螺仪,加速度和重力的数值。
我尝试过使用空格作为分隔符,但我遇到了问题,因为如果值为正值,则每个值前面有两个空格,但如果值为负则只有一个空格。
到目前为止,我有以下内容,但只有在每个值之间有一个空格(每个值必须为负数)时,它才会起作用。
data = textscan(fid, '%*s %*s %*s %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f', 'delimiter', ' ');
有解决方法吗?
答案 0 :(得分:2)
将选项'MultipleDelimsAsOne'
设置为1,如下所示:
string = 'Date: 2014-04-22_09-48-16.547400 Timestamp: 2873652.086362542 Gyro.X: -0.0372661240398884 Gyro.Y: 0.0541165024042130 Gyro.Z: 0.1216094791889191 UserAccel.X: -0.0201703608036041 UserAccel.Y: -0.0118222190067172 UserAccel.Z: -0.0187157746404409 Gravity.X: -0.9937761425971985 Gravity.Y: -0.0025820778682828 Gravity.Z: -0.1113654002547264';
data = textscan(string,...
'%*s %*s %*s %*s %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f %*s %f',...
'delimiter', ' ', 'MultipleDelimsAsOne', 1);
在格式字符串的开头,缺少一个%*s
,并且在我删除的格式字符串的末尾有一个不必要的%*s %f
。这会产生一个包含9个浮点值的单元格。
答案 1 :(得分:0)
您可以使用仅使用single space
作为分隔符的importdata
将元素分隔到单元格数组的不同单元格中。
<强>代码强>
imp_data = importdata(inputtext_filename,' ')
t_data = imp_data.textdata
d_data = cellfun(@str2num,t_data,'uni',0)
data1 = [cell2mat(d_data) imp_data.data]
Date1 = cell2mat(t_data(:,2))
Timestamp = data1(:,1)
Gyro = struct('X', num2cell(data1(:,2)), 'Y', num2cell(data1(:,3)), 'Z', num2cell(data1(:,4)))
UserAccel = struct('X', num2cell(data1(:,5)), 'Y', num2cell(data1(:,6)), 'Z', num2cell(data1(:,7)))
Gravity = struct('X', num2cell(data1(:,8)), 'Y', num2cell(data1(:,9)), 'Z', num2cell(data1(:,10)))