2014-07-16 1 views
0

matlab에서 longstrings을 파싱 중이며 int로 str2num을 사용할 때마다 이상한 중국어 또는 그리스어 기호가 대신 출력됩니다. matlab에서 문자열 변환이 int 값과 함께 작동하지 않습니다.

satrec.satnum = str2num(longstr1(3:7)); 

내가 문자열로 출력에 의해 확인, 제대로 작동하지만 난 int로 변경을 관리하지 않는 경우 나중에 내 계산에 사용할 수 없습니다. 내 문자열의 문자 3 ~ 7은 int (예 : 8188)입니다. 내 문자열이 두 배로 작동하는 것처럼 보이기 때문에 다음과 같이 시도했습니다.

satrec.satnum = longstr1(3:7); 
satrec.satnum = strcat(satrec.satnum,'.0'); 
satrec.satnum = str2num(satrec.satnum); 
fprintf('satellite number : %s\n',satrec.satnum); 

그러나 동일한 이상한 기호가 출력됩니다. 아무도 내가 뭘 할 수 있는지 아니?

+0

'longstr1'은 어떻게 생겼습니까? –

+0

다음과 같이하십시오 : '1 28895U 05043F 14195.24580016 .00000503 00000-0 10925-3 0 8188' –

+0

파일에서 이것을 읽으십니까? 파일이 이상한 인코딩으로되어있을 가능성이 있습니까? –

답변

0

NORAD 2 줄 요소 데이터처럼 보입니다. 이 경우 비 ASCII 문자가 없어야하므로 파일 인코딩은 US-ASCII 또는 UTF-8입니다.

귀하의 문제는이 라인에있는 것으로 나타납니다

fprintf('satellite number : %s\n',satrec.satnum); 

satrec.satnum는 정수이지만, 매트랩 문자열로 해석되도록 당신은 형식 문자열에 %의 문자를 인쇄 . 이것을 (를)

fprintf('satellite number : %d\n',satrec.satnum); 

으로 바꾸십시오. 그러면 올바른 결과를 얻게됩니다.

는 추가 편집

사실 제대로 int로 문자열을 변환이 matlab에!

0
나는 당신이 당신의 예제와 함께 제공되는 코드를 실행했는데, 당신이 설명하는 문제가 재현 드릴 수 없습니다

: 나는 textscan 또는 dlmread 같은 것을 사용하는 것이 좋습니다 것 어떤 경우

longstr1='1 28895U 05043F 14195.24580016 .00000503 00000-0 10925-3 0 8188'; 
satrec.satnum = str2num(longstr1(3:7)) 

satrec = 

    satnum: 28895 

을 :

Data = textscan(longstr1,'%u8 %u16 %c %u16 %c %f %f %u16-%u8 %u16-%u8 %u8 %u16', 'delimiter', '') 

Data = 

    Columns 1 through 9 

    [1] [28895] 'U' [5043] 'F' [1.4195e+04] [5.0300e-06] [0] [0] 

    Columns 10 through 13 

    [10925] [3] [0] [8188] 

위의 예에서 일부 데이터 유형을 추측하여 사용하도록 업데이트해야합니다. 보시다시피이 코드는 문자열에서 작동합니다. 그러나 fileID를 제공하면이 템플리트를 사용하여 파일 (see documentation for textscan)의 모든 행을 읽습니다.

사이드 노트 : char(28895)이 한자를 출력하는 것으로 나타났습니다.

관련 문제