데이터 파일에서 읽기

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

옵션 

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