2014-02-21 3 views
2

fprintf를 사용하여 데이터 파일을 쓰려고합니다.fprintf는 루프가없는 문자와 숫자를 인쇄합니다.

fprintf(FileID, '%d, %f, %d, %d, %d', Values') 

을하지만 실제로는 그 두 번째 열은 날짜 (datestr (735123.5) = 11 Sep-을 나타냅니다

Values = [ 1, 735123.0, 23, 24, 25; 
      2, 735123.5, 34, 35, 36; 
      ... 
      8000, 739122.5, 21, 22, 43] 

내가 사용하여 파일에 그것을 쓸 수 있습니다 :이 같은 데이터를 포함하는 행렬을 말해봐 2012 12시 0분 0초) 나는 파일이

1, 11-Sep-2012 00:00:00, 23, 24, 25 
2, 11-Sep-2012 12:00:00, 34, 35, 36 
... 
8000, 24-Aug-2023 12:00:00, 21, 22, 43 

내 매트릭스는 수천 줄의 긴 내가 선호하는 것입니다 읽을 수 있도록, 데이터 파일의 두 번째 열에서 날짜를 인쇄 fprintf를하고 싶습니다 반복 할 필요가 없다. 한 줄씩.

제안하는 방법에 대한 제안이 있으십니까?

답변

0

뭔가 cellfun 비록

n = num2cell(Values'); 
n(2,:) = cellfun(@datestr, n(2, :),'UniformOutput', false); 
fprintf(FileID, '%d, %s, %d, %d, %d', n{:}); 

처럼 기본적으로 루프입니다.

+0

완벽한, 감사합니다. 나는 mat2cell을 시도하고 있었고 작동하지 않았습니다. cellfun 내 루프에 비해 충분히 빠른 것 같습니다. 아니면 'UniformOutput'부분 일 수도 있습니다. – EddyTheB

+1

또한 나중에 참조하기 위해 자정에 대한 시간 출력을 보장하기 위해 '@ datatr'대신 '@ (x) datestr (x,'dd-mm-yyyy HH : MM : SS ')' . – EddyTheB

0

for없이 루프 또는 cellfun :

separator = repmat(', ',size(Values,1),1); %// column used as separator 
lineFeeds = repmat('\n',size(Values,1),1); %// column of line feeds 
string = [ num2str((Values(:,1))) ... 
      separator ... 
      datestr(Values(:,2)) ... 
      separator ... 
      num2str(Values(:,3)) ... 
      separator ... 
      num2str(Values(:,4)) ... 
      separator ... 
      num2str(Values(:,5)) ... 
      lineFeeds ]; 
string = reshape(string.',1,[]); %'// put everything in one row 
FileID = fopen('tmp.txt', 'wt'); %// use 't', or '\n' may not get written to file 
fprintf(FileID, string); 
fclose(FileID); 
관련 문제