web-dev-qa-db-fra.com

Ignorer la première ligne d'un fichier CSV

J'essaie d'importer un fichier CSV. En raison du programme que nous utilisons, la première rangée regroupe essentiellement tous les en-têtes que je voudrais éviter, car je les ai déjà insérés via HTML. Comment puis-je obtenir le code pour ignorer la première ligne du fichier CSV? (la commande strpos consiste à couper le premier champ de toutes les lignes.)

<?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++) {
    if(strpos($data[$c], 'Finished') !== false) {
    $c++;
echo "<TR> <TD nowrap>" . $data[$c] . "</ TD>"; }
    Else{
        echo "<TD nowrap>" .  $data[$c] . "</ TD>";
        }
    }
}
fclose($handle);
}
?>
21
Nathan Dunn

Comme vous gardez quand même le numéro de la ligne, vous pouvez utiliser continue pour ignorer le reste de la boucle pour la première ligne.

Par exemple, ajoutez ceci au début de votre boucle while (juste au-dessus de $num = count($data)):

if($row == 1){ $row++; continue; }

Il existe d'autres moyens de le faire, mais assurez-vous simplement que lorsque vous continuez, $row est toujours en cours d'incrémentation ou vous obtiendrez une boucle infinie!

23
John Lawrence

Plutôt que d'utiliser la condition if pour vérifier s'il s'agit de la première ligne, une meilleure solution consiste simplement à ajouter une ligne de code supplémentaire avant la ligne à partir de laquelle commence la boucle while, comme indiqué ci-dessous:

....
.....
fgetcsv($handle);//Adding this line will skip the reading of th first line from the csv file and the reading process will begin from the second line onwards
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
.......
.......

C'est tout aussi simple ......

47
Rahul Gupta

Veuillez utiliser les lignes de code suivantes

$flag = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($flag) { $flag = false; continue; }
//your code for insert
}

Si la variable flag a la valeur true et qu'elle est définie sur false, la première ligne du fichier CSV est ignorée. C'est simple et facile à mettre en œuvre. 

1
Amir Md Amiruzzaman
$count = 0;
while (($fields = fgetcsv($handle, 0, ",")) !== FALSE) {
    $count++;
    if ($count == 1) { continue; }
0
Nimish

Ajoutez ceci dans le corps de la boucle while au-dessus du $row++;:

if ($row == 1) {
    continue;
}
0
prehfeldt

cela a fonctionné pour moi:

$count = 0;

while(! feof($file))

      {

          $entry = fgetcsv($file, 0, ';');

          if ($count > 0) {
          //skip first line, header


          }

      $count++;
}
0
Louis Ferreira