2011-12-19 4 views
4

특정 형식에 따라 .txt 파일로 인쇄해야하는 셀 배열이 있습니다. . 나는 온라인 도움말의 일부를 시도 (MATLAB은 dlmcell 중앙하지만 심지어 나에게 원하는 답을 제공하지 않습니다 구분 기호 \됩니다 t을 포함Matlab에서 .txt로 셀 배열 인쇄

cellarray = { ... 
     'AAPL' '2/20/2011' 100.5 
     'MSFT' '2/15/2011' 43.4551 
      } ; 

출력은 다음과 같은 형식으로 .txt 파일에 있어야합니다. : 셀은 8000 행의 최소 15000의 최대 행이 비어있는 열이 없을 것입니다.해야합니다

"AAPL" "2/20/2011" 100.5 
"MSFT" "2/15/2011" 43.4551 

(사용하여 탭 구분 기호) 도움을 주셔서 감사까요? 벡터화 솔루션 수 있습니다. 자주

답변

7

다음은 예를 들어 작동합니다 :이 입력 될 때까지입니다

C = cellarray.'; 
fid = fopen('file.dlm', 'wt'); 
fprintf(fid, '"%s"\t"%s"\t%g\n', C{:}); 
fclose(fid); 

MATLAB은 형식 문자열을 다시 사용합니다. 원칙적으로, 먼저 포맷 문자열을 만들 수 있습니다 :

fstr = ''; 
for ic = 1:size(cellarray,2) 
    switch class(cellarray{1,ic}) 
     case 'char' 
      fstr = [fstr '"%s"']; 
     otherwise 
      % Assume numeric 
      fstr = [fstr '%g']; 
    end 
    if ic < size(cellarray,2), fstr = [fstr '\t']; else fstr = [fstr '\n']; end 
end 

그런

C = cellarray.'; 
fid = fopen('file.dlm', 'wt'); 
fprintf(fid, fstr, C{:}); 
fclose(fid); 
+0

thanks. 하지만 두 솔루션 모두 동일한 오류가 발생합니다 -> 오류 1 ??? 셀 내용이 비 - 셀 배열 객체에서 참조됩니다. ==> 에있는 오류 fprintf (fid, ' "% s"\ t "% s"\ t % g \ n', C {:}); 오류 2 – Maddy

+0

스위치 클래스 (cellarray {1, ic}) – Maddy

+1

즉, 'cellarray'는 셀 배열이 아닙니다. – Nzbuu

3

I DLMWRITE와 XLS의 조합 사용 쓰다. DLMWRITE는 텍스트 파일을 만드는 데 사용되므로 XLSWRITE는 파일을 Excel 형식으로 생성하지 않고 텍스트로 남겨 둡니다.

filename = 'file.txt'; 
dlmwrite(filename, 1) 
xlswrite(filename, cellarray) 

참고 COM 당신이 DLMWRITE에 대한 호출을 필요가 없습니다, 텍스트 쓰기 XLSWRITE (리눅스 등)을 사용할 수 없습니다 OS에.


UPDATE

이 방법은 MATLAB (이후 아마 R2012b)의 최신 버전으로 더 이상 작동하지 않습니다. xlswrite은 항상 Excel 형식의 파일에 씁니다.

그러나 R2013b MATLAB은 TABLES을 도입 했으므로 셀 배열을 테이블 (CELL2TABLE 체크 기능)로 변환 할 수 있으면 WRITETABLE 기능이 훌륭하게 작동합니다.

+0

덕분에 불쾌 해합니다. 그것은 잘 작동하지만 15k 행 3 cols 인쇄에 18 초 걸립니다. 나는 더 빠른 대안을 기대하고있다. 나는 지금 가능한지 확실치 않다. – Maddy

+0

'xlswrite'는 Excel을 먼저 시작하고 연결해야하기 때문에 꽤 느리다. 하지만 아마 2 초 정도 걸릴 것입니다. – Nzbuu

+0

이것은 loosps에 대한 지저분한 일을 겪지 않고 출력물을 작성하는 가장 좋은 방법입니다 ... thanks – RnD