Aktueller Standort: Startseite> Neueste Artikel> Wie arbeiten FGetCSV- und FSEEK -Funktionen zusammen, um Daten an bestimmten Orten in CSV -Dateien zu lesen?

Wie arbeiten FGetCSV- und FSEEK -Funktionen zusammen, um Daten an bestimmten Orten in CSV -Dateien zu lesen?

gitbox 2025-09-28

[Wie arbeiten FGetCSV- und FSEEK -Funktionen zusammen, um Daten an bestimmten Orten in CSV -Dateien zu lesen? ]

In PHP verwenden wir bei der Verarbeitung von CSV -Dateien normalerweise die Funktion fGetCSV () , um jede Datenzeile in der Datei zu lesen. Aber manchmal möchten wir in der Lage sein, die ersten Zeilen in der Datei zu überspringen oder Daten von einem bestimmten Ort aus zu lesen, und die Funktion fseek () kann funktionieren. Durch die Verwendung dieser beiden Funktionen können wir die Ausgangsposition der Lesedaten genau steuern und so große Dateien oder spezifische Daten effizienter verarbeiten.

Einführung in die FGetCSV -Funktion

fGetCSV () ist eine der integrierten Funktionen in PHP und wird normalerweise zum Lesen von Dateien im CSV-Format verwendet. Es liest eine Datenzeile aus der aktuellen Position des Dateizeigers und analysiert sie in ein Array. Jedes Array -Element entspricht einer Spalte in der CSV -Datei. Die grundlegende Verwendung von fGetCSV () lautet wie folgt:

 <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">// Verarbeiten Sie jede Datenreihe</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 () kann drei Parameter akzeptieren:

  • Handle : Die offene Dateiressource.

  • Länge : Die maximale Anzahl von Bytes zu lesen.

  • Abgrenzer : Trennzeichen, Standard für Komma.

Einführung in die FSEEK -Funktion

Die Funktion fseek () wird verwendet, um die Position des Dateizeigers anzupassen, sodass wir in eine bestimmte Byte -Position in der Datei übergehen können. Die grundlegende Verwendung von fseek () lautet wie folgt:

 <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>
  • $ Handle : Dateihandle.

  • $ offset : offset, wobei die Anzahl der zu verschobenen Bytes angezeigt wird.

  • Such_set : Zeigt an, dass der Offset vom Beginn der Datei berechnet wird. Andere häufig verwendete Konstanten umfassen Seek_Cur (relativ zur aktuellen Position) und Seek_end (relativ zum Ende der Datei).

Verwenden Sie FGetCSV und FSEEK in Verbindung

Durch die Verwendung von fseek () und fGetCSV () können wir in Kombination Daten aus einem bestimmten Ort in der CSV -Datei lesen. Angenommen, wir möchten die ersten 10 Zeilen in der CSV -Datei überspringen und dann mit dem Lesen der Daten aus Zeile 11 beginnen. Hier ist die spezifische Implementierung:

 <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">// verwendenfseekÜberspringen Sie vorher10OK</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">// 逐OK读取并跳过</span></span><span>
    }

    </span><span><span class="hljs-comment">// Aus11OK开始读取数据</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">// Verarbeiten Sie jede Datenreihe</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">"Die Datei kann nicht geöffnet werden!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In diesem Beispiel verwenden wir zuerst fseek () (oder fGets () ), um die ersten 10 Datenzeilen zu überspringen und dann fGetCSV () zu lesen und die Daten aus der aktuellen Position des Dateizeigers zu lesen und zu verarbeiten.

Anwendungsszenarien

  1. Umgang mit großen Dateien : Für große CSV -Dateien können wir mit FSEEK () unnötige Teile überspringen und nur die erforderlichen Daten lesen. Überspringen Sie beispielsweise die Titelzeile, leere Zeile oder eine Datenzeile, die in der Datei verarbeitet wurde.

  2. Zufallszugriff auf CSV -Daten : Manchmal müssen wir Daten von einem bestimmten Ort in der CSV -Datei lesen oder einige Spalten einer bestimmten Zeile lesen. Diese Anforderung kann leicht erreicht werden, indem der FSEEK () -Affset vernünftig eingestellt wird.

  3. Verbesserung der Leistung : Wenn wir die gesamte Datei nicht von Grund auf lesen müssen, kann FSEEK () verwendet werden, um einen bestimmten Ort der Datei direkt zu finden, wodurch das Lesen unnötiger Daten reduziert wird, wodurch die Leistung des Programms verbessert wird.

Dinge zu beachten

  1. Problem des Dateizeigers : Wenn fseek () aufgerufen wird, ändert sich die aktuelle Position des Dateizeigers, und die nachfolgenden Lesevorgänge beginnen aus einer neuen Position. Stellen Sie also sicher, dass der Dateizeiger bei der Verwendung fseek () an den richtigen Ort positioniert wurde, den Sie mit dem Lesen beginnen möchten.

  2. Offset von FSEEK : Der Versatz von FSEEK () befindet sich in Bytes. Wenn die Länge der Dateilinien inkonsistent ist, kann dies bei der Verarbeitung von CSV -Dateien zu einem Fehler führen. Um dies zu vermeiden, verwenden wir normalerweise fGets (), um Zeilen zu überspringen oder sicherzustellen, dass jede Zeile in der Datei relativ einheitlich ist.

  3. Dateiöffnungsmodus : Öffnen Sie die Datei im Lesemodus ( R ), da der Dateizeiger nicht mit FSEEK () angepasst werden kann.

Zusammenfassen

Durch die Kombination von fGetCSV () und fseek () können wir spezifische Daten in CSV -Dateien flexibler lesen. FSEEK () bietet die Möglichkeit, die Position des Dateizeigers präzise zu steuern, während fGetCSV () uns hilft, jede Zeile einer CSV -Datei in ein Array zu analysieren. Die Kombination der beiden kann unsere Effizienz bei der Verarbeitung großer Dateien oder beim Durchführen von Zufallszugriff effektiv verbessern.