Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP fscanf() 함수 완벽 정리 – 파일에서 형식에 맞춰 입력 읽는 방법

fscanf() 함수는 지정된 형식(format)에 따라 열려 있는 파일에서 입력을 읽어 분석(parse)하는 PHP 내장 함수입니다. 매개변수를 두 개만 전달하면 분석된 값들을 배열(array) 형태로 반환하며, 세 번째 매개변수를 전달하면 분석된 값이 해당 변수에 직접 저장됩니다.

구문

fscanf(file_pointer, format, mixed)

매개변수

  • file_pointer − fopen() 함수를 통해 생성한 파일 시스템 포인터 리소스입니다.

  • format − 입력값을 어떤 형식으로 해석할지 지정합니다. 사용 가능한 형식 지정자는 다음과 같습니다.

    • %% - 퍼센트(%) 문자 자체를 반환합니다.
    • %b - 2진수(binary)
    • %c - ASCII 값에 해당하는 문자
    • %f - 부동 소수점 수(float)
    • %F - 부동 소수점 수(float)
    • %o - 8진수(octal)
    • %s - 문자열(string)
    • %d - 부호 있는 10진수(signed decimal)
    • %e - 과학적 표기법(지수 표기법) 숫자
    • %u - 부호 없는 10진수(unsigned decimal)
    • %x - 소문자 알파벳을 사용하는 16진수
    • %X - 대문자 알파벳을 사용하는 16진수
  • mixed − 분석된 값을 저장할 변수를 지정합니다. 선택 사항(optional)이며, 이 값을 전달하면 함수는 배열 대신 성공적으로 분석된 필드의 개수를 반환합니다.

반환 값

매개변수를 두 개만 전달한 경우, fscanf() 함수는 파일에서 읽어 들여 형식에 맞게 분석한 값들을 하나의 배열로 묶어 반환합니다. 더 이상 읽을 데이터가 없으면 false를 반환합니다.

사용 예제

<?php
   $file_pointer = fopen("new.txt", "r");
   while ($playerrank = fscanf($file_pointer, "%s\t%d\n")) {
      list ($name, $rank) = $playerrank;
      echo "$name got rank $rank.";
   }
   fclose($file_pointer);
?>

코드 설명

위 예제에서는 new.txt 파일을 읽기 모드("r")로 연 뒤, while 반복문과 함께 fscanf()를 사용하여 파일 끝에 도달할 때까지 한 줄씩 데이터를 읽습니다. 형식 문자열 "%s\t%d\n"은 탭(tab)으로 구분된 문자열과 정수를 의미하므로, 예를 들어 "Amit⇥2"처럼 이름과 순위가 나란히 적혀 있다면 각각 변수 $name과 $rank에 순서대로 담기고, 이후 list()로 개별 변수에 분리하여 출력하게 됩니다.

실행 결과

Amit got rank 2

정리

fscanf()는 C 언어의 fscanf와 유사하게 동작하며, 로그 파일이나 CSV처럼 일정한 형식을 가진 텍스트 파일을 줄 단위로 파싱할 때 특히 유용합니다. 다만 형식 문자열이 실제 파일의 데이터 구조와 일치하지 않으면 의도한 대로 값을 읽지 못할 수 있으므로, 구분자와 자료형을 정확히 맞춰주는 것이 중요합니다.