[FGETCSV 및 FSEEK 기능은 어떻게 CSV 파일의 특정 위치에서 데이터를 읽기 위해 함께 작동합니까? ]]
PHP에서 CSV 파일을 처리 할 때 일반적으로 FGETCSV () 함수를 사용하여 파일의 모든 데이터 라인을 읽습니다. 그러나 때로는 파일에서 처음 몇 줄을 건너 뛰거나 특정 위치에서 데이터를 읽기 시작할 수 있으며 fseek () 함수가 작동 할 수 있습니다. 이 두 기능을 함께 사용함으로써 읽기 데이터의 시작 위치를 정확하게 제어하여 큰 파일 또는 특정 데이터를보다 효율적으로 처리 할 수 있습니다.
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 () 의 기본 사용량은 다음과 같습니다.
<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 (파일 끝에 대해)가 있습니다.
fseek () 및 fgetcsv ()를 조합하여 사용하면 CSV 파일의 특정 위치에서 데이터를 읽기 시작할 수 있습니다. CSV 파일에서 처음 10 줄을 건너 뛰고 11 행에서 데이터를 읽기 시작한다고 가정 해 봅시다. 여기에는 구현이 있습니다.
<span><span><span class="hljs-meta"><?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> < </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">?></span></span><span>
</span></span>이 예에서는 먼저 fseek () (또는 fgets () )를 사용하여 처음 10 줄의 데이터를 건너 뛰고 fgetcsv ()를 사용하여 파일 포인터의 현재 위치에서 데이터를 읽고 처리합니다.
대형 파일 처리 : 대형 CSV 파일의 경우 fseek ()를 사용하면 불필요한 부품을 건너 뛰고 필요한 데이터 만 읽을 수 있습니다. 예를 들어, 제목 줄, 빈 줄 또는 파일에서 처리 된 일부 데이터 라인을 건너 뜁니다.
CSV 데이터에 대한 무작위 액세스 : 때로는 CSV 파일의 특정 위치에서 데이터를 읽기 시작하거나 지정된 행의 일부 열을 읽어야합니다. 이 요구 사항은 FSEEK () 오프셋을 합리적으로 설정하여 쉽게 달성 할 수 있습니다.
성능 향상 : 전체 파일을 처음부터 읽을 필요가 없으면 FSEEK ()를 사용하여 파일의 특정 위치를 직접 찾아서 불필요한 데이터의 읽기를 줄여서 프로그램의 성능을 향상시킬 수 있습니다.
파일 포인터 문제 : FSEEK ()가 호출되면 파일 포인터의 현재 위치가 변경되고 후속 읽기 작업은 새 위치에서 시작됩니다. 따라서 fseek ()를 사용할 때 파일 포인터가 읽기 시작하려는 올바른 위치에 배치되었는지 확인하십시오.
FSEEK의 오프셋 : FSEEK () 의 오프셋은 바이트에 있으므로 CSV 파일을 처리 할 때 파일 라인의 길이가 일치하지 않으면 오류가 발생할 수 있습니다. 이를 피하기 위해 일반적으로 fgets ()를 사용하여 선을 건너 뛰거나 파일의 각 줄이 길이가 비교적 균일한지 확인하십시오.
파일 개방 모드 : 파일을 읽기 모드 ( r )에서 열면 FSEEK ()를 사용하여 파일 포인터를 조정할 수 없습니다.
fgetcsv () 와 fseek ()를 결합하여 CSV 파일의 특정 데이터를보다 유연하게 읽을 수 있습니다. FSEEK ()는 파일 포인터의 위치를 정확하게 제어 할 수있는 기능을 제공하는 반면 FGETCSV ()는 CSV 파일의 각 줄을 배열로 구문 분석하는 데 도움이됩니다. 이 둘의 조합은 큰 파일을 처리하거나 임의의 액세스를 수행 할 때 효율성을 효과적으로 향상시킬 수 있습니다.