Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 02h53   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
Par défaut fgetcsv et majuscule accentuée

Bonjour,

J'utilise la fonction fgetcsv pour lire un fichier csv, mais les majuscules accentuées situé après le séparateur (dans mon cas un point-virgule), ne sont pas pris en compte (il ne semble donc pas s'agir d'un problème d'encodage)

Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$NomDuFichier = "./import/0.csv";
$row = 1;
if (($handle = fopen($NomDuFichier, "r")) !== FALSE) {
	$flag = true;
    while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
        $num = count($data);
        echo "<p>champ: $num, ligne: $row<br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $c." - ".$data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
Merci d'avance.
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 03h37   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
fait un foreach pour parcourir un array, le 2ème paramètre de fgetcsv doit être du type int
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 04h01   #3
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
Foreach, comment?
Pour le 2ème argument plutôt comme cela:
Code :
fgetcsv($handle, 0, ";")
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 06h16   #4
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
J'ai essayer de la façon suivante mais sans succès:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$NomDuFichier = "./import/0.csv";
 
$row = 1;
if (($handle = fopen($NomDuFichier, "r")) !== FALSE) {
	$flag = true;
    while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
        $num = count($data);
        echo "<p>champ: $num, ligne: $row<br /></p>\n";
        $row++;
        foreach($data as $value) {
            echo $value . "<br />\n";
        }
    }
    fclose($handle);
}
J'ai aussi essayé avec SplFileObject. Mais je ne parviens pas à les afficher de la même facon que le premier code:

Code :
1
2
3
4
5
6
7
8
$file = new SplFileObject($NomDuFichier);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
$file->setCsvControl(';');
 
foreach($file as $data)
{
 //???
}
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 08h00   #5
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
J'ai testé le code suivant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
try  
{  
$dbh = new PDO('mysql:host=localhost;dbname=nom_base','user','password');  
 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);  
}  
catch(PDOException $e)  
{  
exit($e->getMessage());  
}  
$file = new SplFileObject($NomDuFichier);  
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);  
$file->setCsvControl(';');  
 
$stmt = $dbh->prepare("INSERT IGNORE INTO ps_import (col1, col2, col3) VALUES (?, ?, ?) ");  
 
foreach($file as $row)  
{  
$stmt->execute(array($row[0],$row[1],$row[2]));  
}
Mais j'ai toujours le problème avec des majuscule accentuées dans mon fichier csv.

Exemple:
champ1;champ2;Étiquettes devient champ1 | champ2 | tiquettes dans la base
alors que
champ1;champ2;Petites Étiquettes devient champ1 | champ2 | Petites Étiquettes dans la base.

Il semble que seule les majuscules accentuées situé à droite du séparateur soient concernées.

Si quelqu'un à une idée, je suis preneur.
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h23   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
n’apparaissent pas ou y'a un autre caractère a la place ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h25   #7
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
Il sont ignorés et n'apparaissent pas.
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h49   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
Bizarre tout ça, tes fichiers ont quel encodage ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h59   #9
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 178
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 178
Points : 25
Points : 25
L'encodage est correct: UTF-8 (déjà essayé avec d'autre encode)
dxerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h16   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
Citation:
Envoyé par dxerty Voir le message
L'encodage est correct: UTF-8 (déjà essayé avec d'autre encode)
tout est en utf-8 ?, montre un bout de ton CSV et le résultat de ton script
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h25   #11
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 807
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 807
Points : 1 522
Points : 1 522
Ton fichier PHP est-il en utf8 ?
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 19h30   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 486
Points : 8 486
c'est pas dutout ce que fait (ni attend) ton code, montre un exemple concret
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h36.


 
 
 
 
Partenaires

Hébergement Web