파일에 쓰기 및 읽기
순차 및 쉼표로 구분된 값(CSV) 파일과 같은 파일에 읽고 쓰는 것은 다른 유형의 데이터 소스의 레코드를 쓰고 읽는 것과 유사합니다. 그러나 데이터 소스에 대한 연결 프로세스는 다르며 EGL 데이터 액세스 명령문의 특정 변형으로 제한됩니다.
EGL은 색인화된 파일, 순차 파일, 쉼표로 구분된 값(CSV) 파일(구분된 파일이라고도 함)을 포함하여 여러 파일 유형을 쓰고 읽도록 허용합니다. 이런 유형의 파일은 주로 정보를 파일에 저장하는 방법에서 차이가 납니다. 파일을 읽고 파일에 쓰는 프로세스는 각 유형마다 유사합니다. 이 주제에서는 순차 파일 및 CSV 파일을 처리합니다.
전제조건
- EGL 프로젝트
자원 연관 설정
파일에 연결하려면 먼저 해당 파일을 가리키는 자원 연관 파트를 정의해야 합니다. 파일 자체는 시스템의 파일 및 데이터 세트일 수 있지만 이 예제는 로컬 파일을 사용합니다.
- 프로젝트의 빌드 디스크립터를 여십시오.
- 자원 연관 파트를 빌드 디스크립터에 추가하고 빌드 파트 편집기에서 해당 파트를 여십시오. "EGL 빌드 파일에 자원 연관 파트 추가"를 참조하십시오.
- 새 자원 연관 파트에서 순차 파일이 가는 위치에
새 연관을 추가하십시오.
- 자원 연관 파트에서 연관 추가 단추를 클릭하십시오. 새 항목이 연관 요소 아래에 표시됩니다.
- 새 항목의 파일 이름 필드에 myFile과 같은 EGL 이름 지정 요구사항을 따르는 순차 파일의 니모닉을 입력하십시오. 이 필드는 디스크의 실제 파일 이름이 아닙니다. 이 필드는 이 파일을 사용하는 연속 레코드 파트의 fileName 특성 값에 해당합니다.
- 시스템 필드를 사용 중인 시스템 유형으로 설정하십시오(예: Windows의 경우 win, Linux의 경우 linux).
- 순차 레코드를 표시하려면 파일 유형 필드를 seqws로 설정하십시오.
- systemName 필드를
완전한 파일 위치로 설정하십시오. 예를 들어, Windows 운영 체제에서 systemName을
다음과 같이 설정해야 합니다.
존재하지 않는 파일을 가리키는 경우 해당 위치에 쓸 때 EGL이 파일을 작성합니다.C:\myFolder\myFile.dat자원 연관 파트는 이와 유사하게 보이며 필드에 사용자 공유 값이 있습니다.

- 자원 연관 파트를 저장하고 닫으십시오.
- resourceAssociations 빌드 디스크립터 옵션 값을 자원 연관 파트의 이름으로 설정하십시오.
- 레코드 파트를 정의하여 파일에 저장되는 레코드를
표시하십시오. 예를 들어, 순차 파일을 사용하려는 경우
serialRecord를 정의하십시오.
record mySerialRecord type serialRecord 10 myInteger int; 10 myChar char(50); end - fileName 특성을
자원 연관 파트 항목의 파일 이름 필드 값으로
설정하십시오.
record mySerialRecord type serialRecord {fileName = "myFile"} 10 myInteger int; 10 myChar char(50); end
이제 코드에서 레코드 파트를 사용하여 순차 파일에 액세스할 수 있습니다.
자원 연관 파트에 대한 자세한 정보는 EGL 생성 안내서를 참조하십시오.
파일에 쓰기
파일에 쓰기는 다른 데이터 소스에 쓰기와 유사합니다.
- EGL 프로그램 또는 기타 로직 파트를 여십시오.
- 위의 "자원 연관 설정"에서와 같이
연속 레코드 파트가 범위 내에 있고 순차 파일과 연관되어 있는지
확인하십시오. import 문을 사용하여
범위로 가져와야 할 수도 있습니다.
import myProject.myData.mySerialRecord; - EGL 프로그램에서 연속 레코드를 기반으로 하는 변수를
선언하십시오.
variableRecord mySerialRecord; - 새 변수에서 필드에 데이터를 추가하십시오.
variableRecord.myInteger = 45; variableRecord.myChar = "Hello!"; - add와 같은 적절한 EGL 데이터 액세스 명령문을 사용하여
파일에 레코드를 작성하십시오.
add variableRecord; - 프로그램을 저장하고 생성하고 실행하십시오. 순차 파일 끝에 새 레코드가 작성됩니다.
파일에서 읽기
레코드를 순서대로 읽어야 한다는 점을 제외하고, 순차 또는 CSV 파일에서 데이터를 읽는 것은 다른 데이터 소스에서 데이터를 읽는 것과 유사합니다.
일반적으로 연속 레코드를 처리할 때 get next 문을 사용하여 하나의 레코드를 읽고 get 문을 사용하여 여러 레코드를 읽으십시오. 이 컨텍스트에서 get next는 순차 파일에서 첫 번째 레코드로 시작하며 순서대로 레코드를 읽습니다.
- EGL 프로그램 또는 기타 로직 파트를 여십시오.
- 위의 "자원 연관 설정"에서 설명된 대로
연속 레코드 파트가 범위 내에 있고 순차 파일과 연관되어 있는지
확인하십시오. import 문을 사용하여
범위로 가져와야 할 수도 있습니다.
import myProject.myData.mySerialRecord; - EGL 로직 파트에서 연속 레코드를 기반으로 하는
변수를 선언하십시오.
variableRecord mySerialRecord; - 변수를 사용하여 레코드를 순차 파일에서 검색하십시오.
get next variableRecord; - 순차 파일의 데이터를 사용하십시오.
sysLib.writeStderr(variableRecord.myChar); - 프로그램을 저장하고 생성하고 실행하십시오. 프로그램이 순차 파일을 읽고
콘솔에서 레코드의 데이터를 표시합니다.
Hello!
CSV 파일 사용
123,yes,3/9/2007,Rahima
-1,no ,9/9/1999,Jorge
92,yes,,Ludmilla
이 예제에서는 각각 네 조각의 정보를 가진
세 데이터 행을 표시합니다. 각 정보 조각은
구분 기호(이 경우에서는 쉼표)라고 하는
문자로 구분됩니다. 구분 기호 사이에 데이터가 없다고 표시되는 것처럼,
세 번째 행에서 데이터의 세 번째 일부가 널인 것을 참조하십시오. CSVRecord 파트는
각 정보 조각을 필드로 처리합니다. 이 파일의 CSVRecord는
다음 예제와 같습니다. record CsvRec type CSVRecord
{
fileName = "CSVFile",
delimiter = ",",
textQualifier = "\"",
style = CsvStyle.quoted
}
jobCode int;
permStatus char(3);
hireDate date?;
firstName string;
end
fileName 필드는
serialRecord와 동일한 목적을 수행합니다. 이는 파일을 가리키는
자원 연관 파트의 요소를 참조합니다. 그러나 CSVRecord에는
일부 추가 특성이 있습니다. delimiter 특성은
각 정보 조각을 구분하는 문자(이 경우에서는 쉼표)를
표시합니다. textQualifier 및
style 특성은 밀접하게 관련됩니다. 이 구성은
파일의 문자열이 예약된 문자를 포함하는 경우 따옴표로 묶일 수 있음을 표시합니다.
자세한 정보는 CSVRecord 스테레오타입의
내용을 참조하십시오.program readCSV type BasicProgram {}
oneRecord CsvRec;
function main()
//첫 번째 레코드 가져오기
get next oneRecord;
if (oneRecord is endOfFile)
// 레코드가 없는 경우
SysLib.writeStdout("This file is empty.");
else
while (oneRecord not endOfFile)
// 찾은 각 레코드에 대해 이 조치 수행
SysLib.writeStdout(oneRecord.firstName);
get next oneRecord;
end end end
end
이 프로그램은 get next 문을 사용하여
순차 레코드를 사용한 이전 예제에서와 동일한 방법으로 파일에서
읽어 옵니다. 동일한 방법으로 add 문을 사용하여
CSV 파일에 쓸 수 있습니다.