IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fgetcsv et majuscule accentuée


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Dernière modification par Invité ; 02/09/2011 à 03h59.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fait un foreach pour parcourir un array, le 2ème paramètre de fgetcsv doit être du type int

  3. #3
    Invité
    Invité(e)
    Par défaut
    Foreach, comment?
    Pour le 2ème argument plutôt comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgetcsv($handle, 0, ";")
    Dernière modification par Invité ; 02/09/2011 à 04h11.

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai essayer de la façon suivante mais sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)
    {
     //???
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai testé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Dernière modification par Invité ; 02/09/2011 à 09h03.

Discussions similaires

  1. [EXCEL] Majuscules accentuées
    Par larnicebafteur dans le forum Excel
    Réponses: 9
    Dernier message: 18/05/2009, 15h56
  2. [RegEx] Accepter les majuscules accentuées
    Par Trebor_ dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2008, 12h17
  3. [Système] Majuscules accentuées / strtoupper()
    Par rystio dans le forum Langage
    Réponses: 4
    Dernier message: 04/12/2006, 17h00
  4. J'ai trouvé l'origine du problème des majuscules accentuées sous FF!
    Par Médinoc dans le forum Evolutions du club
    Réponses: 14
    Dernier message: 28/07/2006, 16h13
  5. [SELECT] recherche de majuscules accentuées
    Par Huntress dans le forum Langage SQL
    Réponses: 17
    Dernier message: 11/09/2005, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo