2017-03-09 5 views
0

Les données de CSV comme ci-dessous, une seule colonnephp importer des données csv mais dans une matrice

| BeKwX8iN3wzHDvCaxBD1 | 
| 3rPB9t6EF3RGla28YbLE | 
| OAYRwbrkctcVbrXaaTef | 
| N8lxYdvx47FI7eYt5FUX | 
| zwtRdHr3aYYnX9avcMjX | 
..... 
Contenu du fichier

regard: https://drive.google.com/a/hiiir.com/file/d/0B4ZVHStLEPq3bklUUHkzbDN1MkE/view?usp=sharing

Le code

$row = 1; 
    if (($handle = fopen($serial['tmp_name'], "r")) !== FALSE) { 
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
      $num = count($data); 
      echo "<p> $num fields in line $row: <br /></p>\n"; 
      $row++; 
      for ($c=0; $c < $num; $c++) { 
       echo $data[$c] . "<br />\n"; 
      } 
     } 
     fclose($handle); 
    } 

la question est que lorsque J'imprime $num, j'ai int (1), parce qu'ils sont tous dans un tableau()

array(1) { 
    [0]=> 
    "BeKwX8iN3wzHDvCaxBD1 
    3rPB9t6EF3RGla28YbLE 
    OAYRwbrkctcVbrXaaTef 
    N8lxYdvx47FI7eYt5FUX 
    zwtRdHr3aYYnX9avcMjX"} 

Je sais fgetcsv() contrôler par $ delimiter, et ce cas est ,, mais il ne convient pas pour mon cas. Est-il possible de séparer par 20 caractères?

+3

Semble pas CSV vrai, alors pourquoi en utilisant 'fgetcsv' si chaque ligne du fichier ressemble à' | abc | 'alors faire' array_map (function ($ a) {return trim ($ a, '|');}, fichier ($ se rial ['tmp_name'])); 'pour obtenir les données dans un tableau (une entrée pour atteindre la ligne) ou utiliser' fgets() 'au lieu de' fgetcsv() '. – JustOnUnderMillions

+1

Et vous pouvez changer le 'délimiteur $' à tout ce dont vous avez besoin, lire plus: http://php.net/manual/fr/function.fgetcsv.php – JustOnUnderMillions

Répondre

1

Vous ne pouvez pas utiliser fgetcsv pour lire un fichier CSV de longueur fixe, vous devez le faire seul.

[EDIT] Le problème ici n'était pas un problème CSV, il était causé par la ligne de fin "\ r". Voir les commentaires ci-dessous pour y faire face. [/ EDIT]

Dans votre cas, utilisez le séparateur params:

$data = fgetcsv($handle, 1000, "|") 

Votre code exampled:

<?php 

if (($handle = fopen('csv.txt', "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, "|")) !== FALSE) { 
     array_pop($data); 
     array_shift($data); 
     var_dump($data); 
    } 
    fclose($handle); 
} 

Résultat:

array(1) { 
    [0]=> 
    string(22) " BeKwX8iN3wzHDvCaxBD1 " 
} 
array(1) { 
    [0]=> 
    string(22) " 3rPB9t6EF3RGla28YbLE " 
} 
array(1) { 
    [0]=> 
    string(22) " OAYRwbrkctcVbrXaaTef " 
} 
array(1) { 
    [0]=> 
    string(22) " N8lxYdvx47FI7eYt5FUX " 
} 
array(1) { 
    [0]=> 
    string(22) " zwtRdHr3aYYnX9avcMjX " 
} 
+0

Salut, '|' ne fonctionne toujours pas, est le format du fichier source problème? –

+1

J'ai téléchargé votre fichier. C'est la nouvelle ligne d'Apple "\ r". C'est le problème ici. Vous obtenez 2 options: soit utiliser 'ini_set ('auto_detect_line_endings', true);' dans votre script ou lire d'abord le fichier entier et le transformer en \ n. EDIT: Si votre délimiteur de cellule est ',', oubliez le '|' – zenko

+0

THX! ini_set ('auto_detect_line_endings', true) ça marche! –