2016-08-23 2 views
1

CSVЧитать CSV файл за исключением первой строки Отформатируйте

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

Мой код, чтобы получить TYPE, STOCK, VIN, год

$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); 

Выход

Type Stock VIN Year 

Used 5262G 1G1YY12S435101008 2003 

Used 5539G YV4902DZ2D2439476 2013 

Used 15460 YV4612HK3F1000423 2015 

С выше кода я получаю данные, но данные включают в себя первый ROW т.е. "Type","Stock","VIN","Year" (см первую строку на выходе) Я хочу exclude первую строку, какие изменения в моей код должен сделать так, чтобы исключить первую ROW ..?

Спасибо

+0

дубликат http://stackoverflow.com/questions/14393295/best-way-to-skip-a-header -when-read-in-from-a-text-file-in-perl – lordkain

+0

@lordkain - не дубликат этого, как это PHP, а ссылка для Perl. –

ответ

1

Try просто читает строку в пустое пространство, чтобы пропустить его:

$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

Вау, вот и все, спасибо @samuel –

+0

Всем приветствую Шан. Я также рекомендую вам посмотреть на другие примеры. Кто-то упомянул использование 'fgets()', что было бы небольшим улучшением производительности при чтении первой строки, чтобы пропустить - если вы склонны максимально повысить производительность :) –

0

Попробуйте это:

$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

, содержащий его внутри цикла, вызывает дополнительные циклы процессора, поскольку проверка выполняется на каждой итерации для значения '$ first' –

1

Попробуйте это,

$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

, когда он внутри цикла вызывает дополнительные циклы процессора, поскольку проверка выполняется на каждой итерации для значения' $ i' –

+0

голосуют все, кто оставил его вне петли ^^. это ошибка, которая слишком распространена в программировании, которая в конечном итоге становится очень дорогостоящей (кумулятивной) в долгосрочной перспективе. (кто-то еще упоминал об использовании 'fgets()' вместо того, чтобы использовать 'fgetcsv' в пропущенной строке. Я также бросил проверку' feof', чтобы убедиться, что на самом деле есть данные для чтения. –

1

Просто позвоните fgets($file) после fopen() но до while петли

$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

^это также работает :) немного быстрее, чем чтение 'fgetcsv ($ file)', как в моем примере. –

+0

это приятно, спасибо –

+0

Добро пожаловать! – Skysplit