Un truc que je capte pas

[Résolu]
Signaler
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
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

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
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++
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

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 !
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
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++
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

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,';'))

??
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
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++
Messages postés
85
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
27 novembre 2010

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 ?
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
18
re
1024 octets
a++