使用多个分隔符导入通用文件的数据

时间:2015-10-16 04:51:51

标签: matlab import delimiter

我需要将空格和制表分隔数据导入矩阵样式变量或结构,但文件的格式不同,不允许我选择%f%s预格式化函数作为解决方案。新列将被添加或从文件中删除到另一个,我甚至不知道它们的类型。

如果我将数据作为文本文件打开,并且只是在其分隔符的同时选择空格和制表符,那么Excel显示我的数据非常适合。

如果您知道是否有任何文件的导入功能可以让我遵循Excel的惯例或对如何解决我的问题有任何想法,请说说!

所用文字的一部分示例如下:

loggername  date__________ time________ s1a[m/s]    s1x[m/s]    s1i[m/s]    s1s[m/s]    s2a[m/s]    s2x[m/s]    s2i[m/s]    s2s[m/s]    s3a[m/s]    s3x[m/s]    s3i[m/s]    s3s[m/s]    d1a[°]  d1s[°]  d2a[°]  d2s[°]  h1a[%]  t1a[°C] b1a[hPa]    s4a[m/s]    s4x[m/s]    s4i[m/s]    s4s[m/s]    vxa[V]  bla[V]  bra[V]  [-1=error]  [ser.no.]

TA-48   01/10/2015 00:00:00 5,8 7,1 4,9 0,4 5,7 7,3 4,8 0,4 4,9 5,8 4,1 0,3 161,0   7,0 167,0   8,0 81,0    24,65   1000,0  4,0 4,7 3,3 0,3 12,7    8,0 8,7     C120104

TA-48   01/10/2015 00:10:00 5,8 6,5 5,3 0,2 5,8 6,5 5,1 0,2 5,1 5,6 4,3 0,3 164,0   7,0 171,0   9,0 81,0    24,65   1000,0  4,1 4,8 3,4 0,3 12,7    8,0 8,7     C120104

TA-48   01/10/2015 00:20:00 5,7 6,2 5,2 0,2 5,6 6,2 4,9 0,2 4,6 5,2 3,7 0,3 162,0   7,0 169,0   9,0 82,0    24,55   999,0   3,6 4,3 3,0 0,3 12,7    8,0 8,7     C120104

这里第一行代表变量的标题和单位,后面是相邻行中的值。

例如,

s5a,s5x,s5i,s5s可以是另一个文本文件中的新变量。

谢谢!

2 个答案:

答案 0 :(得分:1)

没有任何选项的dlmread函数会将空格和制表符视为分隔符(至少在R2014a中):

mydata = dlmread('myfile.txt');

但是,这只适用于数字数据,看起来您的文件也有字符。相反,您可以使用fgetl从文件中获取一行,然后使用strcmp检查空格或制表符,从而实现此目的。循环中有这样的东西:

line = fgetl(fid);
for k = 1:(length(line)-3);
    if strcmp(line(k:(k+3)),'    ');
        % there's a tab here!
    end
end
for k = 1:length(line);
    if strcmp(line(k),' ');
        % there's a space here!
    end
end

请注意,这假设标签为4个空格。

答案 1 :(得分:1)

由于唯一的空格分隔变量是日期和时间,因此我决定在导入整个制表符分隔文件后将它们分开。

为此,我使用了tdfread函数,它将每列作为结构项返回,然后使用简单的strfind将它们分开。