2013-05-31 3 views
2

fprtinf 명령 (및 sprintf)을 사용하여 MATLAB (2012a)에서 문자열을 인쇄하는 데 문제가 있습니다.MATLAB - 문자열의 첫 번째 문자 만이 인쇄됩니다.

12 개의 날짜 (숫자)의 배열이 있습니다.

Jan12
Feb12
Mar12
Apr12
: I가 months 변수를 호출 할 때 I는 이하의 (원하는) 출력을 얻을

months = datestr(data(:,1)-365,12); %Mar13 format 

: I는 다음과 같은 명령을 사용하여 문자열로 변환하고

문제는 제가 fprintf 또는 sprintf으로 전화 할 때 다음과 같이 말합니다. ode :

fprintf('%s', months(1)) 

나는 전체 문자열이 아닌 한 달의 첫 문자 만받습니다. 모든 아이디어를 전체 문자열을 인쇄하는 방법?

감사합니다.

답변

3

당신의 months 변수의 결과 데이터 유형이 (이 또한 'dddd' 같은 비 고정 길이 날짜 형식으로 작동합니다) 셀 배열로 결과를 변환 할 cellstr 기능을 사용할 수 있습니다 NxM 문자 배열. 대신 문자열의 셀 배열로 처리해야합니다.

dates = num2cell(data(:,1)-365) 
months = cellfun(@(x) datestr(x,12),dates,'UniformOutput',false) 
fprintf('%s', months{1}) 

원하는 것을 얻을 수 있습니다.

+0

이것은 작동합니다. 설명을 해주셔서 대단히 감사합니다. 문자 배열을 깨닫지 못했습니다. 이전에는 그럴 수 없었습니다. 감사! – msmf14

2

단순히

fprintf('%s', months(1, :)) 

datestr은 별도의 행에 제공된 날짜의 각각의 문자열을 반환에 전화를 변경합니다.

은 또는 당신

months = cellstr(months); 
fprintf('%s', months{1}); 
+0

또한 작동합니다. 빠른 응답을 부탁드립니다. 그에 따라 내 코드가 조정됩니다. – msmf14

+0

흠, 우리의 솔루션이 작동 순서와 반대되는 것처럼 보입니다. :) – Doresoom

+2

그래, 내가 둘 다 받아 들일 수 있으면 좋겠다! – msmf14

관련 문제