我有一个像这样的.txt文件,它是制表符分隔符。
nr Time Lx Ly Lz Rx Ry Rz Mark
1 32874.4114 0.4 -0.2 0.7 0.2 0 -0.7 0
2 32874.4213 0.4 -0.2 0.4 0.2 0 -0.7 0
3 32874.4313 0.4 -0.2 0.4 0.2 0 -0.9 1
4 32874.4413 0.4 -0.2 0.4 0.2 0 -0.9 0
5 32874.4514 0.2 -0.2 0.4 0.2 0 -0.9 1
6 32874.4613 0.2 -0.2 0.4 0.2 0 -0.9 0
7 32874.4713 0.2 -0.2 0.4 0.2 0 -0.9 1
8 32874.4813 0.2 -0.2 0.7 0.2 0 -0.9 0
我想使用Matlab编写代码,并根据Mark(当检测到Mark = 1
时将此.txt文件分散到三个单独的.txt文件中,然后将其溢出到新的.txt文件中)
以下是代码:
function splitdata(filename)
thelist=find(filename(:,9)==1)
thelist=[1; thelist];
n=length(filename);
m=length(thelist)
for i=2:m
out=zeros(thelist(i-1)-thelist(i),9);
out=filename(thelist(i-1):thelist(i)-1,:);
thename=['output' num2str(i-1,'%03i') '.txt']
dlmwrite(thename,out,'\t');
end
if thelist(m)<n
out=filename(thelist(m):n,:);
thename=['output' num2str(m,'%03i') '.txt']
dlmwrite(thename,out,'\t');
end
问题是:在输出文件中,时间列,小数点后的数字丢失了...有人想知道如何保留小数点后的数字吗?
答案 0 :(得分:0)
下面的解决方案应该可以解决问题(至少它适用于您上面提供的简化版本。
fi = fopen('myFile.txt','r');
fileCount = 1;
fo = fopen(['output',num2str(fileCount),'.txt'],'w');
header = fgets(fi);
fprintf(fo,header);
tline = header;
first = true;
mark_index = 8;
while ischar(tline)
if (~first)
values = cell2mat(textscan(tline,'%f '));
if values(mark_index) == 1
fclose(fo);
fileCount = fileCount+1;
fo = fopen(['output',num2str(fileCount),'.txt'],'w');
fprintf(fo,header);
end
fprintf(fo,tline);
tline = fgets(fi);
else
first = false;
tline = fgets(fi);
end
end
fclose(fo);
fclose(fi);
它将逐行读取原始文件,并查找标记,如果它看到标记设置为1,它将创建一个新的输出文件并关闭旧的输出文件。这将继续重复,直到原始文档中没有更多文件。
它还会将相同的“标题”放入所有创建输出文件中。