move
- 바이트별
- 이름별, 하나의 구조에 있는 이름 지정된 필드에서 다른 구조의 동일한 이름이 지정된 필드로 복사
- 위치별, 하나의 구조에 있는 각 필드에서 다른 구조의 동등한 위치에 있는 필드로 복사
- 해당되는 경우 필드 대 필드 호환성이 있는지 이동을 검사합니다. (이 검사는 바이트별 이동에서는 발생하지 않습니다.) 자르기, 채우기, 유형 변환에 대한 규칙은 EGL 지정과 관련하여 자세히 설명한 규칙과 동일합니다(“지정” 참조). 그러나 move 문의 전체 동작은 지정의 동작과 다릅니다.
- 동적 배열에 대한 작업 수행 시 배열의 현재 크기로 마지막 요소를 판별합니다. move 문은 배열에 요소를 추가하지 않습니다. 동적 배열을 확장하려면 배열 고유 함수 appendElement() 또는 appendAll()을 사용하십시오. “배열”을 참조하십시오.
- 소스 또는 대상 요소에 고정 구조가 있는 경우 move 문은 구조의 최상위 레벨에서 다른 기본 유형을 지정하지 않는 한 해당 구조를 CHAR 필드로 처리합니다. for all 또는 for count를 사용 중인 경우 move 문에서는 하위 구조를 고려하지 않습니다.
구문

source와 target의 의미는 명령문의 옵션에 따라 다릅니다. move 문의 다른 양식은 아래 절을 참조하십시오.
move {justify = left} 또는 move {justify = right}
justify는 고정 길이 텍스트 유형 대상 변수 또는 고정 길이 텍스트 유형 배열에서만 사용 가능합니다. 모든 데이터 유형 변환을 비롯한 표준 EGL 조작에서 소스를 이동한 후 대상에서 자리맞춤 조작이 발생합니다. 하위 문자열이 대상 변수에 지정되면 자리맞춤에서 하위 문자열이된 문자만 수정합니다.
move {justify=left} a to b;
left가 지정된 경우 결과 대상 피연산자의 선행 공백이 제거되고 값은 왼쪽으로 이동합니다. 소스 피연산자는 변경되지 않습니다. 고정 길이 대상 변수의 오른쪽에서 필요한 문자는 공백으로 삽입됩니다.
move {justify=right} a to b;
right가 지정된 경우 결과 대상 피연산자의 후미 공백이 제거되고 값은 오른쪽으로 이동합니다. 소스 피연산자는 변경되지 않습니다. 고정 길이 대상 변수의 왼쪽에서 필요한 문자는 공백으로 삽입됩니다.
move(규정자 없음)
move 문에 byName 또는 byPosition 규정자를 지정하지 않으면 EGL이 정보를 바이트별로 소스에서 대상으로 이동합니다. 소스는 대상과 지정 호환 가능해야 합니다. 세부사항은 “ EGL의 지정 호환성”을 참조하십시오.
move byName
이 양식의 move 문에서 EGL은 소스의 각 필드에서 대상에 있는 동일한 이름의 필드로 데이터를 지정합니다. 조작은 소스에서 필드가 있는 순서대로 발생합니다. 소스는 대상과 지정 호환 가능해야 합니다. 세부사항은 “ EGL의 지정 호환성”을 참조하십시오.
- 구조화 레코드의 동적 배열
- 비구조화 레코드
- 구조화 레코드
- 하위 구조가 있는 이름 지정된 구조 필드
- 하위 구조가 있는 구조 필드 배열
- dataTable
- 양식
이름이 별표(*)인 구조 필드를 소스 필드로 사용할 수 없지만 해당 필드의 하위 구조에 있는 이름 지정된 필드를 사용할 수 있습니다.
- 소스에 있는 둘 이상의 필드가 동일한 이름을 갖고 있습니다.
- 대상에 있는 둘 이상의 필드가 동일한 이름을 갖고 있습니다.
- 소스 필드가 다차원 구조 필드 배열 또는 배열 내의 1차원 구조 필드 배열입니다.
- 대상 필드가 다차원 구조 필드 배열 또는 배열 내의 1차원 구조 필드 배열입니다.
- 단순한 경우 소스는 고정 구조이지만 소스 자체가 배열
요소는 아닙니다. 대상도 마찬가지입니다. 다음
규칙이 적용됩니다.
- 배열을 복사하지 않으면 소스 구조에 있는 각 하위 필드의 값이 대상 구조에서 동일한 이름을 가진 필드에 복사됩니다.
- 구조 필드의 배열을 구조 필드의 배열로 복사하는 경우 조작이 move for all로 처리됩니다. 이 주제의 "배열이 있는 move"를 참조하십시오.
- 다른 경우 소스 또는 대상은 레코드입니다. 소스의 필드가 대상의 이름이 동일한 필드에 지정됩니다.
- 더 복잡한 경우는 예에서 자세히 소개합니다. 소스는
구조화 레코드 10개의 배열이며 각 레코드는 다음 구조 필드를
포함합니다.
10 empnum CHAR(3); 10 empname CHAR(20);대상은 다음 구조 필드를 포함하는 고정 구조입니다.10 empnum CHAR(3)[10]; 10 empname CHAR(20)[10];move 조작은 다음 조치를 수행합니다.- 첫 번째 구조 레코드의 empnum 필드 값을 구조 필드 배열 empnum의 첫 번째 요소에 복사합니다.
- 첫 번째 구조 레코드의 empname 필드 값을 구조 필드 배열 empname의 첫 번째 요소에 복사합니다.
- 소스 배열의 구조 레코드마다 프로세스를 반복합니다. 즉, 소스 배열의 두 번째 구조 레코드에 있는 필드가 해당 구조 필드의 두 번째 요소에 복사되는 식입니다.
소스가 다음과 같은 하위 구조를 가진 단일 구조 레코드인 경우 이와 동등한 조작이 발생합니다.10 mySubStructure[10] 15 empnum CHAR(3); 15 empname CHAR(20); - 마지막으로 소스가 다음 구조 필드를 포함하는 구조화
레코드인 경우를 검토합니다.
10 empnum CHAR(3); 10 empname CHAR(20)[10];대상은 다음 하위 구조를 가진 구조 필드 또는 구조화 레코드, 양식입니다.10 empnum CHAR(3)[10]; 10 empname CHAR(20);EGL은 소스의 empnum 필드 값을 대상에 있는 empnum의 첫 번째 요소에 복사하고 소스에서 empname의 첫 번째 요소 값을 대상의 empname 필드에 복사합니다. 대상 empname을 배열로 변경하지 않으면 추가적인 복사가 발생할 수 없으므로 move 문은 여기서 완료됩니다.
move byPosition
이 양식의 move 문에서 EGL은 소스의 각 필드에서 대상의 동등한 위치에 있는 필드에 데이터를 복사합니다. EGL은 소스의 필드 위치 순서대로 바이트별로 각 필드를 복사합니다. 소스는 대상과 지정 호환 가능해야 합니다. 세부사항은 “ EGL의 지정 호환성”을 참조하십시오.
- 구조화 레코드의 동적 배열
- 레코드
- 구조화 레코드
- 하위 구조가 있는 구조 필드
- 하위 구조가 있는 구조 필드 배열
- dataTable
레코드와 구조화 레코드 또는 필드 간에 데이터를 이동하는 경우 대상의 최상위 레벨 필드만 고려됩니다. 두 개의 구조화 레코드 또는 필드 간에 데이터를 이동하는 경우에는 양쪽의 최하위 레벨(리프) 필드만 고려됩니다.
소스 또는 대상 필드가 다차원 구조 필드 배열이거나 배열 내의 1차원 구조 필드 배열인 경우에는 조작이 올바르지 않습니다.
- 단순한 경우 소스는 고정 구조이지만 소스 자체가 배열
요소는 아닙니다. 대상도 마찬가지입니다. 다음
규칙이 적용됩니다.
- 배열을 복사 중이지 않은 경우 EGL은 소스 구조에 있는 각 리프 필드의 값을 해당 위치에 있는 대상 구조의 리프 필드에 복사합니다.
- 구조 필드를 구조 필드의 배열로 복사하는 경우 조작이 move for all로 처리됩니다. 이 주제의 "배열이 있는 move"를 참조하십시오.
- 다른 경우 소스 또는 대상은 레코드입니다. 소스의 최상위 레벨 또는 리프 필드(소스 유형에 따라 다름)가 대상의 최상위 레벨 또는 리프 필드(대상 유형에 따라 다름)에 지정됩니다.
record myCustomer type BasicRecord
customerNumber CHAR(6);
customerName CHAR(25);
end
record mySavedCustomer type BasicRecord
savedCustomerNumber CHAR(6);
savedCustomerName CHAR(25);
end
...
move myCustomer to mySavedCustomer byPosition;
배열이 있는 move
move 문의 대상이 배열인 경우 모든 요소(for all) 또는 요소의 순차 서브세트(for count)에 값을 지정할 수 있습니다.
- 레코드, 구조화 레코드 또는 기본 변수의 동적 배열
- 레코드
- 구조화 레코드
- 하위 구조가 있거나 없는 구조 필드
- 하위 구조가 있거나 없는 구조 필드 배열
- 기본 변수
- 리터럴 또는 상수
- 레코드, 구조화 레코드 또는 기본 변수의 동적 배열
- 하위 구조가 있거나 없는 구조 필드 배열
- 동적 또는 구조 필드 배열의 요소
배열이 있는 move 문은 대상 배열 요소당 하나씩인 다중 EGL 바이트별 복사와 동등하며 시도된 복사가 올바르지 않은 경우 오류가 발생합니다. 유효성에 대한 세부사항은 지정의 내용을 참조하십시오.
for all 또는 for count를 사용 중인 경우 move 문에서는 하위 구조를 무시합니다.
소스가 배열이거나 배열의 요소인 경우 소스 배열의 각 연속되는 요소는 대상 배열의 다음 순차 요소에 복사됩니다. 대상 배열 또는 소스 배열이 더 길 수 있으며 다른 배열의 요소와 일치하는 마지막 요소에서 데이터가 복사되면 조작을 종료합니다.
소스가 배열의 요소인 경우 소스는 지정된 요소가 첫 번째 요소인 배열로 처리되고 이전 요소는 무시됩니다.
소스가 배열도, 배열 요소도 아닌 경우에는 조작에서 소스 값을 사용하여 대상 배열의 모든 요소를 초기화합니다.
소스가 레코드 배열(또는 배열의 요소)인 경우 대상은 레코드 배열이어야 합니다. 소스가 기본 변수 배열(또는 배열의 요소)인 경우 대상은 기본 변수 배열이거나 구조 필드 배열이어야 합니다. 소스가 구조 필드 배열(또는 배열의 요소)인 경우 대상은 기본 변수 배열이거나 구조 필드 배열이어야 합니다.
- 정수 리터럴
- EGL이 정수로 평가하는 변수
- 숫자 표현식(함수 호출은 제외)
- 다음 명령문은 "abc"를 target 배열의 7, 8, 9
요소로 이동합니다.
move "abc" to target[7] for 3; - 다음 명령문은 source의 2, 3, 4 요소를
target의 7, 8, 9 요소로 이동합니다.
move source[2] to target[7] for 3;
move withV60Compat
withV60Compat 수정자는 버전 6 이전의 EGL 또는 VisualAge® Generator 프로그램에서 마이그레이션된 프로그램에서 사용됩니다. 새 코드에서는 이 수정자를 사용하지 마십시오.
move 문이 참조하는 변수가 독립형 함수에서 선언되어 마이그레이션에서 변수의 유형을 판별할 수 없는 경우 이 수정자를 사용하십시오. 이 옵션은 수정자가 없는 move 문에 대한 호환성을 제공합니다.
- 소스가 다음 값 중 하나인 경우 명령문을
지정 명령문인 것처럼 처리합니다.
- 기본 변수
- 고정 구조의 필드
- 리터럴
- 상수
- 그렇지 않으면 명령문이 move by name으로 처리됩니다.
호환성
| 플랫폼 | 문제 |
|---|---|
| Rich UI | 유동 레코드의 byName을 제외하고 move가 지원되지 않습니다. |