데이터 파일에서 읽기

열린 데이터 파일로부터 데이터를 읽습니다.

옵션 

  • 파일 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