2014-07-13 2 views
-5

저는 탭 구분자 인 .txt 파일을 가지고 있습니다.Matlab은 하나의 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 

나는 다음

(다음 새 .txt 파일로 유출, Mark = 1을 감지 할 때) 코딩과 기호에 따라 별도의 세 가지가 .txt 파일로이 .txt 인을 유출하는 matlab에 사용하려는

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 

문제는 다음과 같습니다 : 출력 파일, 시간 열에서 숫자 소수점이없는 후 ... 사람이 어떻게 소수점 수를 유지하는 몇 가지 아이디어를 가지고 코드는?

+1

문서를 읽고 시작할 수 있습니다. n 개의 함수 :'fopen','regexp' 그리고'str2double'. – tashuhka

+2

내가 보는 방법대로 여기에 두 가지 질문이 있습니다 : 읽기/쓰기 데이터를 읽는 방법과 행렬을 "표시"에 따라 여러 개의 작은 것들로 분할하는 방법. 지금까지 시도한 것을 보여주고 문제가있는 부분을 보여 주어야합니다. – Amro

+0

'\ t '구분 기호를 사용하여 문자를 읽으려면'textread'를 사용하십시오. 이후,'Mark'를 사용하여 필요한 행을 찾은 다음'arrayfun'을 사용하여 해당 행을 분리하십시오. 그 후에,'fopen'과'fwrite'를 사용하여 새로운 파일을 작성하십시오. 행운을 빕니다! – rayryeng

답변

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로 설정되면 새로운 출력 파일을 생성하고 이전 출력 파일을 닫습니다.이 파일은 원본 문서에 더 이상 파일이 없을 때까지 계속 반복됩니다.

또한 모든 " 출력 파일을 만드십시오.

+0

예를 들어 'dat = dlmread ('output2.txt ','\ t ')'를 사용하려고하면 "파일과 형식 문자열이 일치하지 않습니다."라는 문제가 있습니다. 원본 파일은 탭 구분 기호 였으나 분할 후에는 더 이상 없습니다. – user3737929

+0

@ user3737929 루프는 줄을 전혀 편집하지 않으므로 이전에 탭으로 구분 된 경우 그대로 유지해야합니다. – MZimmerman6

관련 문제