2017-03-10 5 views
1

입력란에서 하위 문자열에 대한 문제가 발생하여 대상 필드에 다른 필드 길이로 저장됩니다.RPGLE을 사용하여 문자열을 구분하고 다른 필드로 단어를 구분하는 방법은 무엇입니까?

입력란 1의 35A 위치에있는 문자가 공백이 아니고 입력란 2의 첫 번째 문자가 공백이 아닌 경우 입력란 필드 1의 마지막 단어를 대상 입력란으로 이동하면 4 개의 35A 입력 입력 조건이 생깁니다. 2. 동일한 규칙이 행 2, 3, 4와 함께 대상 필드에 적용됩니다. 또한 대상 필드 길이가 총 4 개의 입력 필드를 저장할만큼 길지 않으면 이동 입력 단어 뒤에 오류 이 표시됩니다.

시나리오 1 : 40A 라인의 각각 Input 1 35A: |No. 1241,Old Klang road,  Tom Cater|  Input 2 35A: |rried ,58785 Windfall Stand  Johnan|  Input 3 35A: | Stress bay   White hall     CHIGNA| Input 4 35A: |LL ST JAMES                        |

예상 결과 저장 4 선 대상 필드. Destination Field 1 40A: |No. 1241,Old Klang road, Tom           | Destination Field 2 40A: |Caterrried ,58785 Windfall Stand       | Destination Field 3 40A: |Johnan Stress bay   White hall         |- The 'bay  ' world remain  Destination Field 4 40A: |CHIGNALL ST JAMES                      |

시나리오 2 : 40A 라인의 각각 Input 1 35A: |No. 1241,Old Klang road,  Tom Cater| Input 2 35A: |rried ,58785 Windfall Stand  Johnan| Input 3 35A: | Stress bay   White hall     CHIGNA| Input 4 35A: |LL ST JAMES TAXES STATES STAND CITY|

예상 결과 저장 4 선 대상 필드. Destination Field 1 40A: |No. 1241,Old Klang road, Tom           | Destination Field 2 40A: |Caterrried ,58785 Windfall Stand       | Destination Field 3 40A: |Johnan Stress bay   White hall         |- The 'bay  ' world with space remain  Destination Field 4 40A: |CHIGNALL ST JAMES TAXES STATES STAND CI|- Prompt error msg as the 'TY' no enough fit in the 40 length field  

어떤 도움을 주셔서 감사합니다. 감사합니다. 가난한 영어로 죄송합니다.

+0

'% checkr (" ', str)'을 사용하여 문자열에서 마지막으로 공백이 아닌 문자를 찾을 수 있습니다. – jmarkmurphy

+0

무엇을 시도 했습니까? 어떻게 된 거예요? – jmarkmurphy

+0

나는 비 공백 문자가 아닌 마지막 문자를 찾을 수 있지만 예상되는 결과에 따라 정확한 위치를 연결하는 방법이 문제가됩니까? 어떤 생각이나 생각 논리? –

답변

0

우선 데이터가 35A로 오면 40A로 저장하려고하십니까?

둘째, 왜 하나의 필드 대신 여러 필드로 읽고 저장합니까? 5250 녹색 화면을 사용하는 경우. CNTFLD (Continued-Entry Field) 또는 WRDWRAP (Word Wrap) 키워드를 확인하십시오. 당신이 GUI 또는 웹 기반의 UI와 함께 작업하는 경우 ... 그것은

...

당신이 절대적으로 당신에 대해 질문 한 일을해야합니다 ... 더 쉽게해야 내가 %trim()을 거라고 및 모든 입력 문자열을 하나의 큰 문자열로 연결합니다. 그런 다음 루프를 통해 ..

string = %trim(Inp1) + %trim(Inp2) + %trim(Inp3) + %trim(Inp4); 
searchFrom = 40; 
strPos = 1; 
for x = 1 to 4; 
    endPos = %scanr(' ':string:searchFrom); 
    destArr(x) = %subst(string:strPos:endPos); 
    strPos = endPos + 1; 
    searchFrom = strPos + 40; 
endfor; 

위의 모든 종류의 오류 검사가 누락되었지만 아이디어를 제공해야합니다.

참고 :%scanr()은 v7.3의 새로운 기능입니다. 이전 버전에서는 자신의 scan_rev() 기능을 만들어야합니다.

+0

공간을 제대로 처리하지 못합니다. – jmarkmurphy

+0

답장을 보내 주셔서 감사합니다. 35A는 오래된 레거시 시스템이 변경되지 않고 40A가 필요합니다. % SCANR 기능은 여전히 ​​V7R2에서 사용할 수 있습니까? 그렇다면 어떤 샘플도 내장 scan_rev()를 참조 할 수 있습니까? 전체 단어가 대상 입력란에 맞지 않으면 내 시나리오 2의 오류를 표시하는 방법? –

+0

'% scanr '은 v7.3에 포함 된 내장입니다. 문자열을 역순으로 검색하여 문자열을 찾습니다. for 루프와'% substr'을 사용하여 그렇게 할 수 있어야합니다. – jmarkmurphy