현재 위치: > 최신 기사 목록> FGETCSV 및 FSEEK 기능은 CSV 파일의 특정 위치에서 데이터를 읽기 위해 어떻게 작동합니까?

FGETCSV 및 FSEEK 기능은 CSV 파일의 특정 위치에서 데이터를 읽기 위해 어떻게 작동합니까?

gitbox 2025-09-28

[FGETCSV 및 FSEEK 기능은 어떻게 CSV 파일의 특정 위치에서 데이터를 읽기 위해 함께 작동합니까? ]]

PHP에서 CSV 파일을 처리 할 때 일반적으로 FGETCSV () 함수를 사용하여 파일의 모든 데이터 라인을 읽습니다. 그러나 때로는 파일에서 처음 몇 줄을 건너 뛰거나 특정 위치에서 데이터를 읽기 시작할 수 있으며 fseek () 함수가 작동 할 수 있습니다. 이 두 기능을 함께 사용함으로써 읽기 데이터의 시작 위치를 정확하게 제어하여 큰 파일 또는 특정 데이터를보다 효율적으로 처리 할 수 ​​있습니다.

fgetcsv 기능 소개

FGETCSV () 는 PHP의 내장 기능 중 하나이며 일반적으로 CSV 형식의 파일을 읽는 데 사용됩니다. 파일 포인터의 현재 위치에서 데이터 줄을 읽고 배열로 구문 분석합니다. 각 배열 요소는 CSV 파일의 열에 해당합니다. fgetcsv () 의 기본 사용은 다음과 같습니다.

 <span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"file.csv"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);
</span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>, </span><span><span class="hljs-string">","</span></span><span>)) !== </span><span><span class="hljs-literal">FALSE</span></span><span>) {
    </span><span><span class="hljs-comment">// 각 데이터 행을 처리합니다</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
</span></span>

fgetcsv ()는 세 가지 매개 변수를 수락 할 수 있습니다.

  • 핸들 : 열린 파일 리소스.

  • 길이 : 읽을 최대 바이트 수입니다.

  • Delimiter : 구분 기호, 쉼표로 기본값.

FSEEK 기능 소개

fseek () 함수는 파일 포인터의 위치를 ​​조정하는 데 사용되므로 파일의 특정 바이트 위치로 이동할 수 있습니다. fseek () 의 ​​기본 사용량은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">fseek</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, SEEK_SET);
</span></span>
  • $ 핸들 : 파일 핸들.

  • $ 오프셋 : 오프셋, 이동할 바이트 수를 나타냅니다.

  • Seek_Set : 파일의 시작 부분에서 오프셋이 계산되었음을 나타냅니다. 일반적으로 사용되는 다른 상수에는 Seek_cur (현재 위치와 관련하여) 및 Seek_end (파일 끝에 대해)가 있습니다.

fgetcsv와 fseek을 함께 사용하십시오

fseek ()fgetcsv ()를 조합하여 사용하면 CSV 파일의 특정 위치에서 데이터를 읽기 시작할 수 있습니다. CSV 파일에서 처음 10 줄을 건너 뛰고 11 행에서 데이터를 읽기 시작한다고 가정 해 봅시다. 여기에는 구현이 있습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">'file.csv'</span></span><span>;
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-comment">// 사용fseek전에 건너 뛰십시오10좋아요</span></span><span>
    </span><span><span class="hljs-variable">$linesToSkip</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>;
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$linesToSkip</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
        </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>); </span><span><span class="hljs-comment">// 逐좋아요读取并跳过</span></span><span>
    }

    </span><span><span class="hljs-comment">// 에서11좋아요开始读取数据</span></span><span>
    </span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetcsv</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">1000</span></span><span>, </span><span><span class="hljs-string">","</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-comment">// 각 데이터 행을 처리합니다</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
    }

    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일을 열 수 없습니다!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이 예에서는 먼저 fseek () (또는 fgets () )를 사용하여 처음 10 줄의 데이터를 건너 뛰고 fgetcsv ()를 사용하여 파일 포인터의 현재 위치에서 데이터를 읽고 처리합니다.

응용 프로그램 시나리오

  1. 대형 파일 처리 : 대형 CSV 파일의 경우 fseek ()를 사용하면 불필요한 부품을 건너 뛰고 필요한 데이터 만 읽을 수 있습니다. 예를 들어, 제목 줄, 빈 줄 또는 파일에서 처리 된 일부 데이터 라인을 건너 뜁니다.

  2. CSV 데이터에 대한 무작위 액세스 : 때로는 CSV 파일의 특정 위치에서 데이터를 읽기 시작하거나 지정된 행의 일부 열을 읽어야합니다. 이 요구 사항은 FSEEK () 오프셋을 합리적으로 설정하여 쉽게 달성 할 수 있습니다.

  3. 성능 향상 : 전체 파일을 처음부터 읽을 필요가 없으면 FSEEK ()를 사용하여 파일의 특정 위치를 직접 찾아서 불필요한 데이터의 읽기를 줄여서 프로그램의 성능을 향상시킬 수 있습니다.

주목해야 할 것

  1. 파일 포인터 문제 : FSEEK ()가 호출되면 파일 포인터의 현재 위치가 변경되고 후속 읽기 작업은 새 위치에서 시작됩니다. 따라서 fseek ()를 사용할 때 파일 포인터가 읽기 시작하려는 올바른 위치에 배치되었는지 확인하십시오.

  2. FSEEK의 오프셋 : FSEEK () 의 오프셋은 바이트에 있으므로 CSV 파일을 처리 할 때 파일 라인의 길이가 일치하지 않으면 오류가 발생할 수 있습니다. 이를 피하기 위해 일반적으로 fgets ()를 사용하여 선을 건너 뛰거나 파일의 각 줄이 길이가 비교적 균일한지 확인하십시오.

  3. 파일 개방 모드 : 파일을 읽기 모드 ( r )에서 열면 FSEEK ()를 사용하여 파일 포인터를 조정할 수 없습니다.

요약

fgetcsv ()fseek ()를 결합하여 CSV 파일의 특정 데이터를보다 유연하게 읽을 수 있습니다. FSEEK ()는 파일 포인터의 위치를 ​​정확하게 제어 할 수있는 기능을 제공하는 반면 FGETCSV ()는 CSV 파일의 각 줄을 배열로 구문 분석하는 데 도움이됩니다. 이 둘의 조합은 큰 파일을 처리하거나 임의의 액세스를 수행 할 때 효율성을 효과적으로 향상시킬 수 있습니다.