分隔间距不一致的文本文件

时间:2014-04-22 11:15:37

标签: matlab parsing delimiter

我有一个充满传感器数据的文本文件,每行有以下格式:

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', ' ');

有解决方法吗?

2 个答案:

答案 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)))