2014-01-16 1 views
-1

단어로 줄을 분리하고 문자열을 제거하는 방법 & Java Regex를 사용하여 숫자 단어.단어로 라인을 분할하고 Java Regex에서 문자열 및 숫자 단어를 제거하십시오.

Input: 
05 ECPRF-057  PIC S9(4) VALUE +0057 COMP-3. 

Output: 
ECPRF-057 
PIC 
S 
VALUE 
COMP-3 


Input: 
88 ACCT-LVL-CHG  VALUE 'WT ' 'WTO', "AA ", 

Output: 
ACCT-LVL-CHG 
VALUE 

감사를 사전 키 쇼어에 내가 3 단계 1 단계에서 AA 솔루션을 가지고

+0

을 당신은 어떻게하는 것인지 우리를 말할 수 : 여기

그래서 당신은 다른 솔루션을 계속 보면 당신이 도움이 될 수 질문 몇 가지 링크입니다 ... 너 뭐 해봤 니? – TheLostMind

+1

정규식으로 Cobol을 구문 분석하거나 스캔 할 수 없습니다. 상황에 맞는 파서가 필요합니다. PICTURE 문자열은 나머지 언어와 완전히 다른 어휘 규칙을가집니다. 또한 데이터 정의가 모두 한 줄로 작성되거나 특정 순서로 절이 작성된다고 가정 할 수 없습니다. – EJP

+0

'** Input **'다음의 줄은 정규식을 적용하기위한 문자열입니까?'** Output ** '다음의 줄은 결과를 원하는 것입니까 ?? – MElliott

답변

0

:

String line = srcLine.replaceAll("((?:\"(?:[[^\"]|\"\"]*)\")|(?:\'(?:[[^\']|\'\']*)\'))", ""); 
먼저 문자열을 제거 여기에 입력 I 수신 및 출력이 내가 원하는 무엇이다

2 단계 : 단어로 줄 바꿈

Pattern pattern = Pattern.compile("\\b(?:(?<=\")[^\"]*(?=\")|(?<=\\')[^\\']*(?=\\')|[\\w\\d-]+)\\b"); 

Pahse 3 : 마지막으로 숫자 데이터를 버립니다.

4

아니요.

05 ECPRF-057  PIC S9(4) VALUE +0057 COMP-3. 
05 ECPRF-057  COMP-3 PIC S9(4) VALUE +0057. 
05 ECPRF-057  VALUE +0057 PIC S9(4) USAGE COMP-3. 
05 ECPRF-057  VALUE +0057 PIC S9(4) USAGE IS COMP-3. 
05 ECPRF-057  VALUE +0057 PICTURE IS S9(4) USAGE IS COMP-3. 
05 ECPRF-057  VALUE +0057 PICTURE S9(4) USAGE IS COMP-3. 
05 ECPRF-057  VALUE +0057 PIC S9(4) COMP-3. 
05 ECPRF-057  VALUE +0057 COMP-3 PIC S9(4). 
05 ECPRF-057  VALUE +0057 PACKED-DECIMAL PIC S9(4). 
05 ECPRF-057  VALUE +0057 PIC S9(4). 

또한 COMP-3은 COMPUTATIONAL-3 또는 PACKED-DECIMAL로 기록 할 수 있습니다. 그리고 이들 중 누구도 같은 노선에 있어야하지 않으며 매우 자주하지 않을 것입니다.

이들은 모두 동일합니다. 그리고 많은 조합을 만드십시오. 그 마지막 것조차 확실한가요? 네, 어딘가에 전에 그 (즉시, 또는 그 이전 라인의 수) 때문에 : 두 번째 예에서 88 레벨로받지 않고입니다

02 ECPRF-057-GROUP COMP-3. (which may also have the combinations relating to COMP-3) 

. 더 높은 수준의 데이터 별 "자격을 갖춘"IN 또는 중 하나의 사용을 필요로 할 때 유효 중복 데이터 이름없이입니다

05 PIC X(20) VALUE SPACE. 

:없이입니다

.

다시 정의하지 않았습니다.

COMP/COMP-4/COMP-5/BINARY가 없으므로 보유 할 수있는 최대 값은 컴파일러 옵션에 따라 다릅니다.

모두 처리중인 데이터가 이미 엄격하게 표준화되어 있지 않으면이 작업을 시도하지 마십시오.

플러스 VALUE라는 단어는 쓸모가 없습니다. 원하는 VALUE 절과 관련된 실제 내용입니다 (단, 존재하는 경우 단 하나, 레벨 01-49에서는 VALUE가 선택 사항 또는 무제한 배수 일 수 있음). 숫자의 수 또는 바이트를 무시합니다 (PICture에 따라 다르며 심지어 숫자가 짝수인지, 홀수인지, 또는 컴파일 옵션으로 인해 여부에 달려 있습니다).

이전에 COBOL 프로그램을 프로그래밍 방식으로보고 있었는지 묻는 질문에 답하지 않았습니다.

메인 프레임에서 프로그램이 COBOL을 이해하기를 원한다면, 그것은 이미 존재합니다. 그것은 Enterprise COBOL 컴파일러입니다.

COBOL 프로그램을 "이해"하려고하여 실제로 뭔가를하고 싶다면 최소한 작업 순서를 더 쉽게 만들고 컴파일러에서 생성하는 컴파일 목록을 사용하십시오.당신은 여전히 ​​소수점 이하의 자리수와 무언가가 발생하는 횟수를 알아 내야 할 것입니다. 그러나 이것들은 컴파일 목록의 데이터에 의해 제공 될 수있는 제한된 맥락에서 구체적으로 찾을 수있는 사소한 것들입니다.

VALUE와 관련된 값을 무시할 필요가있는 경우 비유 상수 (SPACE (S), LOW-VALUES, HIGH-VALUES, ZERO (S/ES), QUOTE (S))가 있습니다. 또한 USAGE POINTER 항목에서 VALUE로 찾을 수있는 NULL을 더한 것입니다. 또한 주어진 데이터 항목이 속한 그룹에서 이들을 지정할 수 있음을 알아야합니다.

시간은 지금 약간의 확장을 허용하므로 이러한 살펴있다 : 당신은 05 레벨의 정의를 보면

01 A-GROUP VALUE ZERO. 
     05 PIC 9. 
     05 A-NAME-1 PIC S9(4). 
     05 A-NAME-2 PIC S9999. 
     05 A-NAME-3 REDEFINES A-NAME-2 PIC 9999. 
    01 B-GROUP BINARY. 
     05 PIC 9. 
     05 B-NAME-1 PIC S9(4). 
     05 B-NAME-2 PIC S9999. 
     05 B-NAME-3 REDEFINES B-NAME-2 PIC 9999. 
    01 C-GROUP COMPUTATIONAL-3. 
     05 PIC 9. 
     05 C-NAME-1 PIC S9(4). 
     05 C-NAME-2 PIC S9999. 
     05 C-NAME-3 REDEFINES C-NAME-2 PIC 9999. 

    01 D-GROUP SIGN LEADING SEPARATE. 
     05 PIC 9. 
     05 D-NAME-1 PIC S9(4). 
     05 D-NAME-2 PIC S9999. 
     05 FILLER REDEFINES D-NAME-2. 
      10 FILLER PIC X. 
      10 D-NAME-3 PIC 9999. 

는, 모든 필드는 그룹 간에서 같은 모습을. 그들은 그렇지 않습니다. 그들은 01 수준의 추가 조항으로 인해 모두 다릅니다.

나는 표면을 긁적조차하지 않았습니다. COBOL은 복잡한 데이터 구조를 생성하기 위해 쉽게 적용 할 수있는 매우 광범위한 데이터 정의를 가지고 있습니다.

COBOL은 (는) 오래된 언어입니다. 많은 COBOL 프로그램은 COBOL에 대한 다양한 코딩 스타일과 다양한 수준의 지식을 가진 많은 사람들이 이미 변경 한 오래된 프로그램입니다. 모든 프로그램에서 위와 같은 정의를 찾을 수 있습니까? 아니, 그걸 좀 찾아 줄래? 아마도. 데이터를 처리 할 때 Maybes를 사용할 수 없습니다.

압축 해제하려는 데이터가 저에게 의미가 없습니다. 레벨 번호가 중요하며 내용의이 중요합니다. 필드의 자릿수는 바이트 단위의 필드 크기와 마찬가지로 중요합니다. 아마 당신은 이것들 중 어느 것도 필요로하지 않을 것이지만, 나는 그것을 의심합니다.

이 경로를 포기하십시오.

IBM 메인 프레임에서 COBOL 프로그램을 "이해해야"하는 경우, 모든 목록 옵션으로 컴파일하고 목록을 사용하십시오. 또는 Enterprise COBOL Programming Guide의 SYSADATA 부록을보고 컴파일러 옵션을 사용하여 해당 데이터를 생성하십시오 (이 작업은 컴파일하는 데 시간이 오래 걸리지 만 몇 가지 고유 한 작업을 수행해야 할 경우 수행해야 할 작업이 줄어 듭니다. 이미)).

다른 작업을 시도하면 매우 많은 양의 작업이 필요합니다. COBOL에 익숙하지 않고 디자인에 대한 유용한 지식을 얻을 수있는 곳이 없으면 최상의 결과를 얻을 수 있습니다.

이와 관련하여 이전 질문에 대해 더 자세히 대답했다면 위의 내용을 모두 저장했을 것입니다.

Generating Record Layouts for EBCDIC Data Files.

Is there a Python library to parse and manipulate COBOL code?

Is there a free (as in beer) Flow chart generator for COBOL Code?

관련 문제