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 :

Lire et écrire un fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut Lire et écrire un fichier
    Bonjour à tous,

    j'ai un fichier à lire de type tableur excel.

    Pour faciliter les choses, je l'ai converti en csv.


    Ce fichier contient une colonne rempli et le but est de compléter la seconde (ce qui revient à écrire à chaque fin de ligne).

    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
    <?php
    // 1 : on ouvre le fichier
    $monfichier = fopen('./fichiers/docTest.csv', 'r+');
    $k=0;
    while (false !== ($char = fgetc($monfichier))) {
    	$k=$k+1;
    	if($char=='\r\n'){
        	echo"<br/>";
        }else{
        	echo "$char";
        }
    }
     
    // 2 : on fera ici nos opérations sur le fichier...
     
    // 3 : quand on a fini de l'utiliser, on ferme le fichier
    fclose($monfichier);
    ?>
    Le problème c'est que peu importe que j'utilise \n ou \r\n je n'arrive pas à détecter la fin d'une ligne.

    Je me dis que que c'est parce que le caractère fin de cellule doit être différent mais je ne trouve pas....

    Je veux simplement arriver à détecter la fin d'une ligne pour écrire à la place quelque chose.

    Si je lis une ligne entière avec fgets je prends le retour à la ligne du coup je ne peux pas écrire sur la même ligne à la fin.


    Un petit coup de main serait apprécié

    EDIT: J'ai pu voir en convertissant en ascii qu'il s'agissait du char 13 CR suivi d'un espace suivi du 10 LF...il me semblait pourtant que c'était \r\n qui correspondait à ça...

    Bref bizarre, mais du coup quand je mets la condition directement sur l'ascii ça semble marcher...

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    Essaye en remplaçant '\r\n' par "\r\n" ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Comparer un string avec un char ? Même si ça marche je me vois pas faire ça d'un point de vue de la logique de l'algo.
    Cela dit je vais tester par curiosité pour ajouter ça à la longue liste des bizarreries de la prog des langages non typés x)

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    C'est surtout que j'ai pas percuté sur le fgetc() ...

    La subtilité en php avec les apostrophes et les guillemets c'est que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo strlen('\r\n'); -> 4 caractères
    echo strlen("\r\n"); -> 2 caractères
    Donc dans les 2 cas, tu compares un caractère à une chaine de taille supérieure
    Tu peux utiliser fgetcsv() ( http://php.net/manual/fr/function.fgetcsv.php ) qui te convertira chaque ligne en array puis fputcsv() après avoir rajouté ta seconde colonne.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Comparer un string avec un char ?
    Ca n'existe pas "char" en PHP donc ton problème est résolu.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2011
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2011
    Messages : 756
    Par défaut
    Ok merci à vous pour vos réponses.


    J'aurais une autre question quand même lié.

    Là je supposais que mon fichier serait en csv et que je pourrais le lire de cette façon caractère par caractère.

    Le soucis c'est que j'ai testé d'autres format excel et à ce moment là il semble y avoir des problèmes d'encodage et je ne récupère pas ce que je veux du coup.

    Y a t'il un moyen de rendre la lecture d'un fichier efficace pour tous les formats de fichiers tableurs excel ?

Discussions similaires

  1. Lire et écrire un fichier de façon portable
    Par sharky.fr dans le forum C
    Réponses: 4
    Dernier message: 05/02/2009, 18h23
  2. Réponses: 1
    Dernier message: 16/09/2008, 13h30
  3. Lire et écrire un fichier XML
    Par Palca dans le forum Smalltalk
    Réponses: 0
    Dernier message: 28/04/2008, 11h40
  4. lire et écrire un fichier ppm
    Par bipbip2006 dans le forum Débuter
    Réponses: 6
    Dernier message: 08/04/2008, 16h24
  5. Réponses: 9
    Dernier message: 05/04/2005, 09h39

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