为通用文件导入具有多个定界符的数据

Import Data with Multiple Delimiter for Generic Files

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

Excel 显示非常适合我的数据,如果我将它作为文本文件打开并简单地同时选择 space 和制表作为其分隔符。

如果您知道是否有任何文件导入功能可以让我遵循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 可以是另一个文本文件中的新变量。

谢谢!

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

mydata = dlmread('myfile.txt');

但是,这仅适用于数字数据,而且您的文件似乎也包含字符。相反,您可以通过使用 fgetl 从文件中获取一行然后使用 strcmp 检查 space 或制表符来执行此操作。循环中的类似内容:

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 space秒。

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

为此,我使用了 tdfread 函数,即 returns 每一列作为一个结构项,然后使用简单的 strfind.

将它们分开