데이터 파일에서 읽기
열린 데이터 파일로부터 데이터를 읽습니다.
다음도 참조하십시오.
옵션
- 파일 ID는 열려 있는 데이터 파일의 파일 ID를 지정하는 숫자 표현식입니다. 데이터 파일 열기 스크립트 단계를 참조하십시오.
- 용량은 다음으로 읽기가 UTF-8 또는 바이트인 경우 읽을 바이트 수를 지정합니다 UTF-16의 경우, 용량은 읽을 Unicode 코드 단위의 수입니다. 용량이 지정되지 않은 경우(설정되지 않음), 전체 파일을 읽습니다.
- 대상은 파일에서 읽은 데이터를 저장할 필드 또는 변수입니다.
- 다음으로 읽기는 파일의 문자 인코딩을 지정합니다.
- UTF-16은 FileMaker의 기본 16비트 Unicode(UTF-16 little endian) 문자 인코딩입니다.
- UTF-8은 8비트 Unicode 문자 인코딩입니다.
- 바이트는 특정 문자 인코딩으로 간주하지 않으며 한 번에 1바이트를 읽습니다. 대상이 변수 또는 컨테이너 필드인 경우, 파일에서 읽은 데이터는 지정한 파일과 동일한 이름으로 컨테이너 파일로 저장됩니다.
호환성
제품 | 지원 |
FileMaker Pro | 예 |
FileMaker Go | 예 |
FileMaker WebDirect | 아니요 |
FileMaker Server | 예 |
FileMaker Cloud | 예 |
FileMaker Data API | 아니요 |
사용자 설정 웹 발행 | 예 |
다음 버전에서 시작됨
18.0
설명
이 스크립트 단계는 용량에서 지정된 데이터를 현재 읽기/쓰기 위치부터 읽으며 용량이 지정되지 않은 경우 전체 파일을 읽습니다. 데이터 파일 위치 설정을 참조하십시오.
이 스크립트 단계가 한 번에 읽을 수 있는 최대 데이터 용량은 64MB입니다. 파일이 64MB보다 큰 경우, 이 스크립트 단계를 여러 번 수행하여 한 번 수행할 때마다 64MB 이하의 용량을 읽을 수 있습니다.
참고
- 읽기 작업은 64KB 이하일 때 최상의 성능을 냅니다.
- 파일의 일부에서 Unicode 텍스트를 읽을 때 문자가 여러 코드 단위로 이루어진 경우, 일부 문자만 읽을 수 있습니다. UTF-8 또는 UTF-16 파일에서 텍스트를 읽을 때 문자당 코드 포인트 수를 잘 모르는 경우, 전체 파일을 한 번에 읽는 것이 안전할 수 있습니다.
예제 1
파일 ID가 2인 열려 있는 파일의 내용을 읽고 데이터를 변수에 저장합니다.
복사
데이터 파일에서 읽기 [ 파일 ID: 2 ; 용량(바이트): ; 대상: $variable ; 다음으로 읽기: 바이트 ]
예제 2
도큐멘트 폴더에 이름이 change.log인 파일이 존재하는지 여부를 확인합니다. 파일이 있는 경우, 처음 100개의 UTF-8 코드 단위를 유틸리티::로그 항목 텍스트 필드로 가져옵니다.
복사
변수 설정 [ $file ; 값: Get(문서 경로) & "change.log" ]
기존 파일 가져오기 [ "$file" ; 대상: $fileExists ]
If [ not $fileExists ]
스크립트 종료 [ 텍스트 결과: ]
End If
데이터 파일 열기 [ "$file" ; 대상: $fileID ]
데이터 파일에서 읽기 [ 파일 ID: $fileID ; 용량(바이트): 100 ; 대상: 유틸리티::로그 항목 ; 다음으로 읽기: UTF-8 ]
데이터 파일 닫기 [ 파일 ID: $fileID ]
예제 3
large.log 파일이 존재하고 용량이 큰 경우, 전체 파일을 읽을 때까지 파일을 한 번에 64MB씩 변수로 가져옵니다. 파일이 작은 경우 한 번의 읽기 동작으로 전체 파일을 읽습니다. 성능 향상을 위해 데이터를 변수로 가져온 다음, 데이터를 필드에 저장합니다.
복사
오류 캡처 설정 [ 켬 ]
변수 설정 [ $k_FileMissingError ; 값: 100 ]
변수 설정 [ $k_EndOfFileError ; 값: 10 ]
변수 설정 [ $k_64KB ; 값: 64 * 1024 ]
변수 설정 [ $k_64MB ; 값: 64 * 1024 * 1024 ]
변수 설정 [ $file ; 값: "large.log" ]
기존 파일 가져오기 [ "$file" ; 대상 : $fileExists ]
If [ $fileExists = 0 ]
스크립트 종료 [ 결과: $k_FileMissingError ]
End If
데이터 파일 열기 [ "$file" ; 대상: $fileID ]
#파일을 성공적으로 연 경우, 콘텐츠를 읽습니다.
If [ Get(마지막 오류) = 0 ]
파일 크기 가져오기 [ "$file" ; 대상: $fileSize ]
#파일 크기가 64KB보다 큰 경우, 한 번에 64MB씩 읽습니다.
If [ $fileSize > $k_64KB ]
Loop
#최대 64MB를 읽고 변수에 저장합니다.
데이터 파일에서 읽기 [ 파일 ID: $fileID ; 용량(바이트): $k_64MB ; 대상: $dataChunk ; 다음으로 읽기: UTF-8 ]
변수 설정 [ $readError; 값:Get(마지막 오류) ]
#읽기 동작이 성공적이거나 파일의 끝에 도달한 경우, 이 단계에서 읽은 데이터($dataChunk)와 이전에 읽은 데이터($fileContents)를 연결합니다.
If [($readError = 0) or($readError = $k_EndOfFileError) ]
변수 설정 [ $fileContents ; 값: $fileContents & $dataChunk ]
End If
#읽기 동작이 실패하거나 파일의 끝에 도달하면 루프를 종료합니다.
Exit Loop If [ $readError ]
End Loop
Else
#파일 크기가 64KB 이하인 경우, 한 번에 모두 읽습니다.
데이터 파일에서 읽기 [ 파일 ID: $fileID ; 대상: $fileContents ; 다음으로 읽기: UTF-8 ]
End If
#데이터 파일을 닫고 콘텐츠를 필드에 저장합니다.
데이터 파일 닫기 [ 파일 ID: $fileID ]
필드 설정 [ 테이블::데이터 ; $fileContents ]
End If