Un truc que je capte pas

Résolu
vxr888 Messages postés 85 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 27 novembre 2010 - 26 nov. 2010 à 21:13
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 28 nov. 2010 à 09:06
Salut,

J'essaye de travailler avec des csv mais la fonction fgetcsv me pose un soucis.

Dans les FAQ il est dit :
array fgetcsv ( resource $handle [, int $length [, string $delimiter [, string $enclosure [, string $escape ]]]] )

length
Doit être plus grand que la plus grande ligne (en terme de caractères) à lire dans le fichier (y compris le caractère de fin de ligne). Ce paramètre est optionnel depuis PHP 5. Omettre ce paramètre (ou le définir à 0 en PHP 5.0.4 et suivant) fait que la longueur maximale de la ligne n'est pas limitée, ce qui est légèrement plus lent.

Je ne comprends pas ce qu'ils entendent par là.

En gros ce que je veux, c'est pouvoir lire dans un fichier csv ou il y a environ 2000 chiffres séparés par des virgules.

Ca marche comment cette fonction ? Je mets quoi en length et surtout, pourquoi ?

9 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 nov. 2010 à 09:06
Salut,

Oui length = longueur en français mais à quoi correspond cette valeur ?

Une unité de longueur est-elle égale à un caractère ?

La réponse est dans la doc que tu as toi même cité dans ton premier post :
Doit être plus grand que la plus grande ligne (en terme de caractères)


bref comment connaître la limite ?

Nb de caractères maxi de la ligne la plus longue + caractères de fin de ligne.
Ca peut être utile de préciser ce paramètre dans le cas de gros fichiers, ou lorsque la taille de chaque ligne est fixe.
Mettre 0 (ou une valeur suffisamment élevée) assure que le fichier sera correctement lu, avec une perte de performance qui doit être négligeable.

En gros ce que je veux, c'est pouvoir lire dans un fichier csv ou il y a environ 2000 chiffres séparés par des virgules.

Dans ce cas mettre length à la valeur du nombre maxi de caractères du plus grand chiffre +2 est correct.

Cordialement,

Kohntark -
3
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
26 nov. 2010 à 21:54
bonsoir
si ça peut t'aider

fichier.csv

1;2;3;4;5;6;7
8;9;
10;

<?php

$fp = fopen('fichier.csv','r') or die("ouverture impossible");

print "\n\";

while($csv_line = fgetcsv($fp,1024)) {

print '----
';
for ($i 0, $j count($csv_line); $i < $j; $i++) {

$delimiter = \";\";

$n=explode($delimiter,$csv_line[$i]);
for ($k 0, $l count($n); $k < $l; $k++) {

print ''.$n[$k].', ';

}

}

print \"\";

}

print '
';

fclose($fp) or die("erreur fermeture");

?>

a++
0
vxr888 Messages postés 85 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 27 novembre 2010
27 nov. 2010 à 13:45
Salut,

Merci de ton aide mais un peu de texte m'aiderait beaucoup.

Je comprends que ce que tu veux me dire c'est de travailler avec plusieurs lignes.

Ainsi, je pense que le while correspond à la lecture de plusieurs lignes (dites-moi si je me trompe).

Ensuite il y a 2 for (pourquoi 2 et pas un ?) et un explode. Là je n'en saisis pas le sens.

Si quelqu'un peut m'expliquer, je l'en remercierais !
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
27 nov. 2010 à 14:29
bonjour


explode() le csv contient un delimiteur souvent un ;
je l'enléve ...
2 for pour reconstruire le tableau html ou autre

il faudrait que tu expliques comment est construit ton csv de 2000 nbres
colonnes fixes lignes variables ... ?
a;
a;
c; ...

ou

a;b;c;d; ...

ou

a;b;
c;d;e;

...

a++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
27 nov. 2010 à 16:16
0
vxr888 Messages postés 85 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 27 novembre 2010
27 nov. 2010 à 17:59
Ok je comprends un peu mieux sauf l'explode...

Pourquoi ne pas utiliser l'entièreté de la fonction ?

A la place de :
while($csv_line = fgetcsv($fp,1024))

Mettre :
while($csv_line = fgetcsv($fp,1024,';'))

??
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
27 nov. 2010 à 19:21
bonsoir
oui on peut faire comme ça
while($csv_line = fgetcsv($fp,1024,';'))
pour ce que tu comprends pas la ligne à une longueur
a;b; ... ;z <-- 1024
int $length 1024 si à 1 (ou 512 ou 2048 ce qu'on veut ...)
int $length pas de limite si à 0
a++
0
vxr888 Messages postés 85 Date d'inscription mardi 23 mars 2004 Statut Membre Dernière intervention 27 novembre 2010
27 nov. 2010 à 21:11
Oui length = longueur en français mais à quoi correspond cette valeur ?

Une unité de longueur est-elle égale à un caractère ?

En gros 1024 c'est 1024 caractères ?

J'ai lu un truc qui parlait d'octets ; à quoi ça correspond ; bref comment connaître la limite ?
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
27 nov. 2010 à 23:36
re
1024 octets
a++
0
Rejoignez-nous