2010-08-23 4 views
0

Fortran, C 및 C++를 사용하는 매우 오래된 대규모 금융 시스템에서 버그를 수정해야합니다. 나는 주로 C++ 사람이고, Fortran을 전혀 모른다. 나는 .LT와의 포트란 문자열 비교

if (instructions .lt. ' ') then 
    instructions = ' ' 
endif 

instructions

텍스트/문자열입니다 .... 나는 우리의 시스템에서 심한 버그가 발생했습니다 생각 포트란 문을 이해하는 문제가있다.

위의 코드는 어떻게 동작합니까? 테스트 한 첫 번째 문자 만 허용합니까? 기본적으로 이것은 제작상의 문제이며 고객에게 해결 방법을 제시하려고합니다. 원래 올바른 포트란 코드는

답변

2
if (instructions .lt. ' ') then 

뭣 때문에 사전에 ...

감사도 할 것이다 제기 문자열을 비교합니다. Fortram은 "미만"을 의미하므로 instructions이 공백보다 작은 경우 공백으로 대체하십시오. 전체 문자열을 고려하지만, 오른쪽은 단일 공간이므로 instructions의 첫 번째 문자 만 살펴 봐야합니다. 첫 번째 문자가 공백보다 작 으면 (즉, ASCII에 대해 말하면 제어 문자입니다.)보다 작습니다. 첫 번째 chanracter가 공백 이상인 경우 (즉, 인쇄 가능한 문자),보다 작지 않습니다.

+0

한 가지 미묘한 측면 : "instructions"문자열의 선언 된 길이가 1보다 길면 할당 문 (호출되는 경우)은 "instructions"문자열의 나머지 부분을 공백으로 설정합니다. Fortran 고정 길이 문자열은 오른쪽에 공백으로 채워집니다. –