我需要将空格和制表分隔数据导入矩阵样式变量或结构,但文件的格式不同,不允许我选择%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可以是另一个文本文件中的新变量。
谢谢!
答案 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
将它们分开。