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

C++ Discussion :

Lire ligne puis stockage dans tableau


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Lire ligne puis stockage dans tableau
    Bonjour, j'ai un souci au niveau de stockage dans un tableau d'une chaine de caractere...

    Voila exactement ce que je veux faire :
    Je doit lire un fichier ligne/ligne pour le recopier dans un autre.
    MAIS je veux que chaque ligne se stocke dans un tableau ou :
    Tableau[0] contient la 1ere ligne, Tableau[1] la 2eme etc ...

    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
     
    ----------------------------------------------
     
    FichLire = new ESFichier("fichier1.txt","r");	//ouvre fichier1 en lecture
    FichEcrire = new ESFichier("fichier2.txt","w");//ouvre fichier2 en ecriture
    char Tab[255];
    char *Tableau[25]
    int m = 0;
     
    /* la methode lire doit lire un fichier ligne/ligne en stockant la ligne lue dans Tab*/
     
            while(FichLire->Lire(Tab))      //tant ke l'on peu lire le fichier....
            {
    	Tableau[m] = Tab;
                    FichEcrire->Ecrire(Tab); //... on ecris dans le fichier fichier 
    	m++;
            }
    cout<<"Fichier recopier en entier"<<endl;
     
    ----------------------------------------------
    Le fichier est bien recopier mais, si je fait :
    je ne voi pas la 1ere ligne.
    Ou ai-je fait mon erreur ?
    Merci

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Le problème est que tu écrases à chaque fois la ligne que tu as lue avant. Fais tourner ton code avec un débuggeur, tu verras ce qui se passe.

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Tu es vraiment obligé d'utiliser ça "ESFichier" ? C'est ton prof qui te l'impose ?

    PS: Pense à tester la taille max de ton tableau. Ou profite de ce que le C++ t'offre -> std::vector.

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    et std::string

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Le problème est que tu écrases à chaque fois la ligne que tu as lue avant.
    Comment les lignes peuvent elles-etre ecrasées vu que les cases du tableau s'incrementes ( m++; ) ?



    Tu es vraiment obligé d'utiliser ça "ESFichier" ? C'est ton prof qui te l'impose ?
    Oui je suis obligé de l'utiliser



    Pense à tester la taille max de ton tableau.
    Je ne l'ai pas deja fait en faisant :
    char *Tableau[25]; ?
    De plus travaillant sur un systeme embarqué avec aux fonctions minimales je ne crois pas pouvoir utiliser std::vector et std::string

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Le problème, c'est qu'à la 26e ligne, ou au 255e caractère d'une ligne, kaboom. Et visiblement, rien dans l'interface de ta classe ne permet de survivre aux fichiers pas dimensionnés comme tu l'attends -- ce qui me fait dire que c'est une très mauvaise classe.

    De plus, on peut difficilement t'aider ici. On ne connait strictement rien du fonctionnement de cette classe d'E/S. Quel est le cycle de vie des buffers que tu utilises ? Comment les manipule ta classe ?
    A priori, je dirai qu'il te manque un strcpy -- pas oublier l'allocation.

    Tu peux avoir intérêt à définir des abstractions qui feront ce que font très bien std::vector et std::string : gérer la mémoire dynamiquement sans risquer de buffer overflows.
    (Accessoirement, je suis assez surpris de voir "cout" (std::?) sur de l'embarqué.)

  7. #7
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par niko40
    Le problème est que tu écrases à chaque fois la ligne que tu as lue avant.
    Comment les lignes peuvent elles-etre ecrasées vu que les cases du tableau s'incrementes ( m++; ) ?
    Regardes avec un débuggeur.
    Tu enregistres toujours dans ton espace tab que tu assignes à chaque case de ton tableau : tu écris toujours la même chose dedans.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    C'est bon j'ai trouvé comment je pouvais faire !
    la fonction strcpy ma sauvée la vie

    Voici en gros ce que ca donne pour ceux que ca interresse :

    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
    21
    22
    23
     
    ---------------------------------------------- 
     
    FichLire = new ESFichier("fichier1.txt","r");   //ouvre fichier1 en lecture 
    FichEcrire = new ESFichier("fichier2.txt","w");//ouvre fichier2 en ecriture 
     
    char *Tab;
    Tab = (char*) malloc (255);
     
    char *Tableau[25] 
    int m = 0; 
     
    /* la methode lire doit lire un fichier ligne/ligne en stockant la ligne lue dans Tab*/ 
     
            while(FichLire->Lire(Tab))      //tant ke l'on peu lire le fichier.... 
            { 
       strcpy(Tableau[m],Tab); 
       FichEcrire->Ecrire(Tab); //... on ecris dans le fichier fichier 
       m++; 
            } 
    cout<<"Fichier recopier en entier"<<endl; 
     
    ----------------------------------------------

    Merci pour tout !
    ++

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Ton code pose énormément de problèmes : fuites, dépassement de capacité...
    Jette un oeil à ça:
    http://c.developpez.com/faq/cpp/?pag...GS_type_chaine
    http://c.developpez.com/faq/cpp/?pag...ture_par_ligne

  10. #10
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    Ce n'est toujours pas assez. ll te manque les allocs pour chaque ligne -- en supposant qu'elles ne soient pas trop longues.

Discussions similaires

  1. [Batch] Recherche ligne puis suppression dans un fichier
    Par jbarreau-mainson dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 07/01/2010, 11h40
  2. [XL-2003] Récupérer valeur de ligne selon recherche dans tableau
    Par Lufia dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/11/2009, 13h02
  3. [MySQL] Plusieurs requêtes ou stockage dans tableau
    Par xtremdisc dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 08/04/2009, 14h10
  4. [MySQL] transformer ligne en colonne dans tableau après regroupement
    Par yadou dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/07/2007, 15h27
  5. [VB 2.0] Lire ligne x à y dans fichier texte
    Par cacalex dans le forum VB.NET
    Réponses: 7
    Dernier message: 09/02/2007, 10h00

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