Ich versuche, eine schnelle Möglichkeit zum Lesen von einer CSV-Datei zu finden, indem Sie zuerst eine Reihe von Zeilen überspringen, lesen etwa 20 Zeilen, dann das Lesen zu stoppen. Die einzige Lösung, die es jetzt gibt, ist fread, was ziemlich ineffizient ist.PHP-Zeilen überspringen beim Lesen
Antwort
Der einzige Weg, fügen über eine CSV blättern, die der jeweilige CSV-Format respektiert ist, einen Parser zu berufen. Der schnellste CSV-Parser ist der eingebaute fgetcsv
. So geht das am schnellsten von allen möglichen zuverlässigen Methoden, um:
function csv_slice($fp, $offset = 0, $length = 0) {
$i = 0;
while (false !== ($row = fgetcsv($fp))) {
if ($i++ < $offset) continue;
if (0 < $length && $length <= ($i - $offset - 1)) break;
yield $row;
}
}
gebraucht wie:
$fp = fopen('file.csv', 'r');
print_r(
iterator_to_array(
csv_slice($fp, 5, 2) // start after 5th row, return 2 rows
)
);
fclose($fp);
Ich habe hier verwendete Generatoren den Speicherverbrauch niedrig zu halten. Sie können leicht mit einem temporären Array ersetzen, wenn Sie bevorzugen.
Wenn Sie einige Annahmen über Zeilenenden machen können, dann können Sie Byte für Byte lesen, bis Sie den Bereich der Zeilenenden gefunden haben. Aber ehrlich gesagt würde ich das nicht tun.
danke Jungs, vor allem @Bischof – Karuhanga
Versuchen Sie mit file()
. Es liest alle Zeilen Ihrer Datei und Sie können es so lesen, wie Sie möchten. Zum Beispiel:
$lines = file("myfile.txt");
$lineCounter = count($lines);
if($lineCounter > 20){
$startsAt = 21; //Skip 20 lines
for($i = $startsAt; $i < $lineCounter; $i++){
$line = $lines[$i];
//Do whatever you want with the line contents
}
}
Lassen Sie uns sagen, wenn Sie dieses Stück Code haben unter
<?php
$row = 1;
if (($handle = fopen("ptt.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
echo "<TR>"; // OPEN ROW
if(strpos($data[$c], 'Finished') !== false) {
$c++;
echo "<TD nowrap>" . $data[$c] . "</TD>";
}else{
echo "<TD nowrap>" . $data[$c] . "</TD>";
}
echo "</TR>"; // CLOSE ROW
}
}
fclose($handle);
}
?>
wenn Sie
if($row == 20){ $row++; continue; }
nach der while-Schleife
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($row == 20){ $row++; continue; }
jetzt hinzufügen, Lassen Sie uns sagen, wenn Sie von Zeile 20 beginnen möchten, würde es c ontinue lesen
nehmen wir ein anderes Beispiel. wenn Sie in Zeile 40 ab dem 1. Lesen stoppen möchten, können Sie
if($row == 40){ $row++; exit; }
@ref: http://stackoverflow.com/questions/10901113/skip-the-first-line-of-a-csv-file – unixmiah
- 1. Überspringen inkompatibler Bibliotheken beim Kompilieren
- 2. wie überspringen bestimmte Spalten in readr Lesen
- 3. git - Überspringen bestimmter Commits beim Zusammenführen
- 4. Überspringen: Berührungen beim Speichern eines ActiveRecord-Objekts
- 5. Java-Muster passend; beim Überspringen in &
- 6. Fragmente beim Swipes mit einem FragmentPagerAdapter überspringen
- 7. Kopfzeile überspringen beim Analysieren von .csv-Datei
- 8. Spalte beim Einfügen in MySQL überspringen
- 9. Wie kann ich die Kopfzeile beim Lesen einer CSV in Ruby überspringen?
- 10. BufferedReader Überspringen von Feldern beim Lesen von CSV und Zuweisen zu verschiedenen Typen
- 11. Warum Cassandra Daten lesen kann es einige Daten überspringen?
- 12. Überspringen von leeren Dateien mit Panda in Python lesen
- 13. C++ - Zugriffsverletzung beim Lesen
- 14. DataInputStream hängt beim Lesen
- 15. BufferedReader überspringen erste Zeile
- 16. C, Initialisierungs-Array überspringen
- 17. Fehler beim Lesen von XML
- 18. IOException beim Lesen von InputStream
- 19. UnicodeEncodeError beim Lesen einer Datei
- 20. Bruchbedingung beim Lesen von Socket
- 21. Absturz beim Lesen verschachtelt Parcelable
- 22. java.lang.IllegalArgumentException beim Lesen von String
- 23. Fehler beim Lesen von TcpStream
- 24. STL beim Lesen von Datei
- 25. Fehler beim Lesen des Schemadokuments
- 26. org.apache.jena.riot.RiotException beim Lesen .owl Datei
- 27. hbase.DoNotRetryIOException beim Lesen mit Phoenix?
- 28. Fehler beim Lesen einer Datei
- 29. Probleme beim Lesen der Strukturgröße
- 30. Dataframe Fehler beim Lesen csv
warum vermeiden fread? das wird 'fgetcsv()' intern sowieso verwenden. Auf die eine oder andere Weise müssen diese Zeilen in PHP gelesen werden, damit sie herausfinden können, wo die Zeilenumbrüche liegen. Wenn Sie diese Zeilen überspringen/ignorieren, ist das nicht das Problem von PHP - die Daten müssen gelesen werden. –
Sie könnten die ganze Datei in ein Array mit 'file()' lesen und dann 'array_slice()' verwenden, um die gewünschten Zeilen zu erhalten. – Barmar
Aber wenn die Datei groß ist, wird das langsamer und verschwenderisch. Dein ursprünglicher Weg ist wahrscheinlich der beste. – Barmar