2016-08-23 6 views
1

CSV-FormatLesen CSV-Datei ohne ersten Reihe

"Type","Stock","VIN","Year" 
"Used","5262G","1G1YY12S435101008","2003" 
"Used","5539G","YV4902DZ2D2439476","2013" 
"Used","15460","YV4612HK3F1000423","2015" 

Mein Code für die Art, LAGER, VIN zu erhalten, YEAR

$file = fopen("files/stillmanmvolvo.csv", "r"); 
echo "</br></br>"; 

while(! feof($file)) 
{ 
    $file_data = fgetcsv($file); 

    $type     = $file_data[0]; 
    $stock     = $file_data[1]; 
    $vin     = $file_data[2]; 
    $year     = $file_data[3]; 

    echo $type .' '. $stock .' '. $vin .' '. $year . '<br><br>'; 
} 
fclose($file); 

Ausgabe

Type Stock VIN Year 

Used 5262G 1G1YY12S435101008 2003 

Used 5539G YV4902DZ2D2439476 2013 

Used 15460 YV4612HK3F1000423 2015 

Mit dem obigen Code, den ich die Daten immer bin, aber die Daten enthalten die ersten ROW dh "Type","Stock","VIN","Year" (siehe erste Zeile in der Ausgabe) Ich mag die erste Reihe exclude, was in ändert meine Code muss so tun, dass es die erste ROW ausschließt ..?

Danke

+0

Duplikat http://stackoverflow.com/questions/14393295/best-way-to-skip-a-header -when-in-from-a-Text-Datei-in-perl lesen – lordkain

+0

@lordkain - kein Duplikat davon, wie dies PHP ist, und der Link ist für Perl. –

Antwort

1

nur versuchen, die Linie in den leeren Raum zu lesen, es zu überspringen:

$file = fopen("files/stillmanmvolvo.csv", "r"); 
echo "</br></br>"; 

// read first line 
if(!feof($file)) { fgetcsv($file); } 

// continue reading the rest of the file 
while(! feof($file)) 
{ 
    $file_data = fgetcsv($file); 

    $type     = $file_data[0]; 
    $stock     = $file_data[1]; 
    $vin     = $file_data[2]; 
    $year     = $file_data[3]; 

    echo $type .' '. $stock .' '. $vin .' '. $year . '<br><br>'; 
} 
fclose($file); 
+0

wow, das ist es, danke @samuel –

+0

Sie sind herzlich willkommen Shan. Ich ermutige Sie, sich auch die anderen Beispiele anzusehen. Jemand erwähnt die Verwendung von 'fgets()', was eine leichte Leistungsverbesserung beim Lesen der ersten zu überspringenden Zeile wäre - wenn Sie dazu neigen, die Leistung so weit wie möglich zu steigern :) –

0

Try this:

$file = fopen("files/stillmanmvolvo.csv", "r"); 
$first = false; 
echo "</br></br>"; 

while(! feof($file)) 
{ 
    $file_data = fgetcsv($file); 
    if (!$first) { 
     $first = true; 
     continue; 
    } 

    $type     = $file_data[0]; 
    $stock     = $file_data[1]; 
    $vin     = $file_data[2]; 
    $year     = $file_data[3]; 

    echo $type .' '. $stock .' '. $vin .' '. $year . '<br><br>'; 
} 
fclose($file); 
+0

verursacht es innerhalb der Schleife zusätzliche CPU-Zyklen, da die Überprüfung bei jeder Iteration für den Wert von $ zuerst –

1

die Sie interessieren,

$file_data = fgetcsv($file);// now the file pointer is on second row 
while(! feof($file)) 
{  
    $file_data = fgetcsv($file); 
    $type     = $file_data[0]; 
    $stock     = $file_data[1]; 
    $vin     = $file_data[2]; 
    $year     = $file_data[3]; 
    echo $type .' '. $stock .' '. $vin .' '. $year . '<br><br>'; 
} 
+0

durchgeführt wird, verursacht es innerhalb der Schleife zusätzliche CPU-Zyklen, da die Überprüfung bei jeder Iteration für den Wert von $ erfolgt i' –

+0

wähle alle auf, die es aus der Schleife herausgehalten haben ^^. Es ist ein Fehler, der bei der Programmierung nur allzu häufig vorkommt und auf lange Sicht sehr kostspielig (kumulativ) ist. winzige Verbesserungen wie diese (jemand anderes erwähnte 'fgets()' anstelle von 'fgetcsv' in der Zeile, die übersprungen wurde. Ich warf auch eine 'foof'-Prüfung hin, um sicherzugehen, dass tatsächlich Daten zu lesen sind. –

1

Rufen Sie fgets($file) nach fopen() aber vor dem while Schleife

$file = fopen("files/stillmanmvolvo.csv", "r"); 
fgets($file) 
echo "</br></br>"; 

while(! feof($file)) 
{ 
    $file_data = fgetcsv($file); 

    $type     = $file_data[0]; 
    $stock     = $file_data[1]; 
    $vin     = $file_data[2]; 
    $year     = $file_data[3]; 

    echo $type .' '. $stock .' '. $vin .' '. $year . '<br><br>'; 
} 
fclose($file); 

fgets() docs

+1

^dies wäre funktionieren auch :) etwas schneller als das Lesen von 'fgetcsv ($ file)' wie in meinem Beispiel. –

+0

das ist nett, danke –

+0

Gern geschehen! – Skysplit

Verwandte Themen