파일 I/O에 대한 get 고려사항
데이터베이스를 포함하지 않는 파일 I/O의 컨텍스트에서 EGL get 문은 파일에서 레코드 데이터를 검색합니다.
검색하는 데이터는 명령문에서 지정한 레코드 변수로 들어가며 명령문의 정확한 동작은 레코드 변수를 스테레오타입화한 방법에 따라 다릅니다.
구문

- positionOption
- 상대 및 직렬 레코드의 경우, 사용 가능한 유일한 위치 키워드는 next입니다. 이 주제에서 특정 레코드 스테레오타입에 대한 "get next" 절을 참조하십시오. 색인화 레코드의 경우에는 previous 키워드도 사용 가능합니다. 이 주제의 "색인화 레코드로 이전 가져오기"를 참조하십시오.
- recordVariable
- 데이터를 복사할 레코드 변수의 이름입니다.
- forUpdate
- 후속 삭제 및 대체를 위해 레코드를 보유하는 옵션입니다.
CSV 레코드
CSVRecord 스테레오타입의 레코드를 지정할 때 사용할 수 있는 get 문의 형식은 단일 변수인 경우 get next와 배열의 경우 get뿐입니다.
- 파일에서 데이터의 첫 번째 행을 읽습니다.
- 레코드의 delimiter 특성 값을 기반으로 행을 문자열로 구분합니다. 레코드에 필드보다 많은 문자열이 있는 경우 EGL은 여분의 문자열을 무시합니다. 누락된 필드는 널로 남아 있습니다.
- 레이블 배열을 지우고 2단계의 문자열로 다시 채웁니다.
그런 다음 EGL은 파일에서 다음 행을 읽어서 delimiter 특성의 값을 기반으로 개별 문자열로 구분합니다. 레코드에 필드보다 많은 문자열이 있는 경우 EGL은 여분의 문자열을 무시합니다.
끝으로, EGL은 문자열을 사용하여 레코드의 필드를 업데이트합니다. EGL은 기존 변환 규칙을 사용하여 문자열을 적절한 값으로 변환합니다. EGL은 BOOLEAN 필드의 값으로 "true"와 "false"를 예상하며, 대소문자는 무시합니다. 특정 필드에 해당하는 문자열이 없는 경우, 해당 필드는 널값을 수신합니다.
- 새 배열 요소(a CSVRecord)를 작성합니다.
- get next 문을 사용하여 다음 레코드를 읽습니다.
- 행의 문자열을 변환하여 위와 같이 레코드 필드에 저장합니다.
- 해당 레코드를 배열의 끝에 추가합니다.
파일이 비어 있는 경우(행을 읽지 않았고 배열의 크기가 0임), 배열의 I/O 오류 상태는 noRecordFound로 설정됩니다. 전체 파일을 배열로 읽은 경우, I/O 오류 상태는 endOfFile로 설정됩니다.
읽기를 완료한 후 EGL은 파일을 닫습니다.
색인화 레코드
IndexedRecord 스테레오타입의 레코드를 참조하는 get 문을 실행하는 경우, 레코드의 키 값은 파일에서 검색할 레코드를 판별합니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 replace 문인 경우, 파일에서 레코드가 변경됩니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 delete 문인 경우, 파일의 레코드가 삭제로 표시됩니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 get 문이고 이 명령문이 forUpdate 옵션을 포함하는 경우, 후속 replace 또는 delete 문은 새로 읽은 파일 레코드에 대해 유효합니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 get 문(forUpdate 옵션을 사용하지 않음)이거나 동일 파일에 대한 close 문인 경우, 파일 레코드는 변경되지 않고 해제됩니다.
get 문(forUpdate 옵션 사용)은 다른 프로그램이 해당 레코드를 변경하지 않도록 방지합니다. 자세한 정보는 이 주제의 "호환성"을 참조하십시오.
색인화 레코드에 대한 get next
- get 문, 다른 get next 문 또는 get previous 문과 같은 입력 또는 출력(I/O) 조작
- position 수정자가 있는 set 문
- 파일이 열려 있지 않은 경우, get next 문은 파일에서 가장 낮은 키 값을 가진 레코드를 읽습니다.
- 각 후속 get next 문은 현재 파일 위치와 비교하여 다음으로 가장 높은 키 값을 가진 레코드를 읽습니다. 중복 키 상황에 대해서도 이 주제에서 설명합니다.
- get next 문이 파일에서 가장 높은 키 값을 가진 레코드를 읽은 후, 다음 get next 문은 EGL 오류 값 endOfFile을 생성합니다.
- 현재 파일 위치는 다음 조작의 영향을 받습니다.
- position 수정자가 있는 EGL set 문은 값 설정을 기반으로 파일 위치를 설정하며, 값 설정은 set 문이 참조하는 색인화 레코드의 키 값입니다. 동일한 색인화 레코드 변수를 참조하는 후속 get next 문은 값 설정보다 크거나 같은 키 값을 가진 파일 레코드를 읽습니다. 해당 레코드가 없는 경우 get next의 결과는 endOfFile입니다.
- get next 문 이외의 성공적인 I/O 문은 새 파일 위치를 설정하고, 동일한 EGL 레코드에 대해 실행된 후속 get next 문은 다음 파일 레코드를 읽습니다. 예를 들어, get previous 문이 파일 레코드를 읽은 후 get next 문은 다음으로 가장 높은 키의 파일 레코드를 읽거나 endOfFile을 리턴합니다.
- get previous 문이 endOfFile을 리턴하면 후속 get next 문은 파일의 첫 번째 레코드를 검색합니다.
- get, get next 또는 get previous 문이 실패한 후 파일 위치는 정의되지 않으며, set 문과 position 수정자로 다시 설정되거나 get next 또는 get previous 문 이외의 I/O 조작으로 다시 설정되어야 합니다.
- 파일에서 대체 색인과 중복 키를 사용하는 경우, 다음 규칙이 적용됩니다.
- 더 높은 값의 키를 가진 레코드 검색은 get next 문이 가장 최근에 검색된 레코드와 같은 키를 가진 모든 레코드를 읽은 후에만 발생합니다. 중복 키 레코드가 검색되는 순서는 EGL이 레코드를 리턴하는 순서입니다.
- 프로그램이 동일한 키를 포함하는 레코드 그룹에서 마지막 레코드를 검색하는 경우에는 EGL 오류 값 duplicate가 설정되지 않습니다.
- get next 이외의 성공적인 I/O 조작 다음에 get next가 있는 경우, get next 문은 중복 키 레코드를 건너뛰고 다음으로 높은 키의 레코드를 검색합니다.
1, 2, 2, 2, 3, 4
다음 각 표는 동일한 색인화 레코드에 대한 EGL 문 시퀀스의 실행 효과를 보여줍니다.
| EGL 문(순서대로) | 색인화 레코드의 키 | 명령문에 의해 검색되는 파일 레코드의 키 | EGL 오류 값 |
|---|---|---|---|
| get | 2 | 2(셋 중 첫 번째) | duplicate |
| get next | 임의 | 3 | -- |
| EGL 문(순서대로) | 색인화 레코드의 키 | 명령문에 의해 검색되는 파일 레코드의 키 | EGL 오류 값 |
|---|---|---|---|
| set position | 2 | 검색되지 않음 | -- |
| get next | 임의 | 2(셋 중 첫 번째) | duplicate |
| get next | 임의 | 2(두 번째) | duplicate |
| get next | 임의 | 2(세 번째) | -- |
| get next | 임의 | 3 | -- |
색인화 레코드에 대한 get previous
- 파일이 열려 있지 않은 경우, get previous 문은 파일에서 가장 높은 키 값을 가진 레코드를 읽습니다.
- 각 후속 get previous는 현재 파일 위치와 비교하여 다음으로 가장 낮은 키 값을 가진 레코드를 읽습니다. 중복 키의 상황에 대해서는 나중에 설명합니다.
- get previous 문이 파일에서 가장 낮은 키 값을 가진 레코드를 읽은 후, 다음 get previous 문은 EGL 오류 값 endOfFile을 생성합니다.
- 현재 파일 위치는 다음 조작의 영향을 받습니다.
- position 수정자가 있는 EGL set 문은
값 설정을 기반으로 파일 위치를 설정하며, 값 설정은 set 문이 참조하는 색인화 레코드의 키 값입니다.
동일한 색인화 레코드를 참조하는 후속 get previous 문은 값 설정보다
작거나 같은 키 값을 가진 파일 레코드를 읽습니다. 해당 레코드가 없는 경우
get previous 문의 결과는 endOfFile입니다. 값 설정이 16진수 FF로 채워진 경우, set position 문의 결과는 다음과 같습니다.
- set 문이 파일의 마지막 레코드 다음에 파일 위치를 설정합니다.
- get previous 문이 다음 I/O 조작인 경우, 생성된 코드는 파일의 마지막 레코드를 검색합니다.
- get previous 문 이외의 성공적인 I/O 문은 새 파일 위치를 설정하고, 동일한 EGL 레코드 변수를 참조하는 후속 get previous 문은 새 위치에 대해 상대적인 레코드를 찾으려고 시도합니다.
- get next 문이 endOfFile을 리턴하면 후속 get previous 문은 파일의 마지막 레코드를 검색합니다.
- get, get next 또는 get previous 문이 실패한 후 파일 위치는 정의되지 않으며, set position 문으로 다시 설정되거나 get next 또는 get previous 문 이외의 I/O 조작으로 다시 설정되어야 합니다.
- position 수정자가 있는 EGL set 문은
값 설정을 기반으로 파일 위치를 설정하며, 값 설정은 set 문이 참조하는 색인화 레코드의 키 값입니다.
동일한 색인화 레코드를 참조하는 후속 get previous 문은 값 설정보다
작거나 같은 키 값을 가진 파일 레코드를 읽습니다. 해당 레코드가 없는 경우
get previous 문의 결과는 endOfFile입니다.
- 파일에서 대체 색인과 중복 키를 사용하는 경우, 다음 규칙이 적용됩니다.
- 더 낮은 값의 키를 가진 레코드 검색은 get previous 문이 가장 최근에 검색된 레코드와 같은 키를 가진 모든 레코드를 읽은 후에만 발생합니다. 중복 키 레코드가 검색되는 순서는 EGL이 레코드를 리턴하는 순서입니다.
- 프로그램이 동일한 키를 포함하는 레코드 그룹에서 마지막 레코드를 검색하는 경우에는 EGL 오류 값 duplicate가 설정되지 않습니다.
- get previous 이외의 성공적인 I/O 조작 다음에 get previous가 있는 경우, get previous 문은 중복 키 레코드를 건너뛰고 다음으로 낮은 키의 레코드를 검색합니다.
1, 2, 2, 2, 3, 4
다음 각 표는 동일한 색인화 레코드에 대한 EGL 문 시퀀스의 실행 효과를 보여줍니다.
| EGL 문(순서대로) | 색인화 레코드의 키 | 명령문에 의해 검색되는 파일 레코드의 키 | EGL 오류 값 |
|---|---|---|---|
| get | 3 | 3 | -- |
| get previous | 임의 | 2(셋 중 첫 번째) | duplicate |
| get previous | 임의 | 2(두 번째) | duplicate |
| get previous | 임의 | 2(세 번째) | -- |
| get previous | 임의 | 1 | -- |
| get previous | 임의 | -- | endOfFile |
| EGL 문(순서대로) | 색인화 레코드의 키 | 명령문에 의해 검색되는 파일 레코드의 키 | EGL 오류 값 |
|---|---|---|---|
| set position | 2 | -- | -- |
| get next | 임의 | 2(첫 번째) | duplicate |
| get next | 임의 | 2(두 번째) | duplicate |
| get previous | 임의 | 1 | -- |
| get previous | 임의 | -- | endOfFile |
| EGL 문(순서대로) | 색인화 레코드의 키 | 명령문에 의해 검색되는 파일 레코드의 키 | EGL 오류 값 |
|---|---|---|---|
| set position | 1 | -- | -- |
| get previous | 임의 | 1 | -- |
| get previous | 임의 | -- | endOfFile |
상대 레코드에 대한 get
- 동일한 레코드 내의 필드
- 프로그램에 대해 글로벌이거나 get 문을 실행하는 함수에 대해 로컬인 레코드의 필드
- 프로그램에 대해 글로벌이거나 get 문을 실행하는 함수에 대해 로컬인 변수
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 replace 문인 경우, 파일에서 레코드가 변경됩니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 delete 문인 경우, 파일의 레코드가 삭제로 표시됩니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 get 문이고 이 명령문이 forUpdate 옵션을 포함하는 경우, 후속 대체 및 삭제는 새로 읽은 파일 레코드에 대해 유효합니다.
- 동일한 EGL 레코드에 대한 다음 I/O 조작이 get 문(forUpdate 옵션 없음)이거나 동일한 파일에 대한 close 문인 경우, 파일 또는 레코드는 변경되지 않고 해제됩니다.
상대 레코드에 대한 get next
- 파일이 열려 있지 않은 경우, get next 문은 파일의 첫 번째 레코드를 읽습니다.
- 각 후속 get next는 현재 파일 위치와 비교하여 다음으로 가장 높은 레코드 번호 값을 가진 레코드를 읽습니다.
- 다음 레코드가 삭제된 경우, get next는 noRecordFound를 리턴하지 않습니다. 대신 get next는 삭제된 레코드를 건너뛰고 파일에서 다음 레코드를 검색합니다.
- 현재 파일 위치는 다음 조작의 영향을 받습니다.
- get next 이외의 성공적인 I/O 문은 새 파일 위치를 설정하고, 동일한 EGL 레코드를 참조하는 후속 get next는 새 파일 위치를 기반으로 레코드를 찾으려고 시도합니다.
- get 또는 get next 문이 실패한 후 파일 위치는 정의되지 않으며, get next 문 이외의 I/O 조작으로 다시 설정되어야 합니다.
- get next 문이 파일의 마지막 레코드를 읽은 후 다음 get next 문은 EGL 오류 값 endOfFile 및 noRecordFound를 생성합니다.
직렬 레코드에 대한 get next
get 문은 직렬 레코드에 대해 사용할 수 없습니다.
- 파일이 열려 있지 않은 경우, get next 문은 파일의 첫 번째 레코드를 읽습니다.
- 각 후속 get next 문이 다음 레코드를 읽습니다.
- get next 문이 마지막 레코드를 읽은 후 후속 get next 문은 EGL 오류 값 endOfFile을 생성합니다.
- EGL은 프로그램이 파일의 쓰기에서 읽기로 또는 읽기에서 쓰기로 변경될 때마다 파일을 닫았다가 다시 엽니다. 예를 들어, add 문을 사용하여 직렬 레코드에 쓴 후 get next 문을 사용하여 동일한 파일에서 데이터를 읽는 경우 EGL은 해당 파일을 닫습니다. get next 문 다음의 add는 파일의 시작 부분에 레코드를 추가합니다. add 문 다음의 get next 문은 파일에서 첫 번째 레코드를 읽습니다. 이 동작은 get next 문과 add 문이 다른 프로그램에 있고 한 프로그램이 다른 프로그램을 호출하는 경우에도 발생합니다.
예제
myCustomer CustomerRecord; // create record variable
myCustomer.customerNumber = 1001; // set key in record variable
try
get myCustomer;
onException(fileErr FileIOException)
myErrorHandler(fileErr); // exits the program
end