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++Builder Discussion :

Lire des champs dans une fichier texte


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut Lire des champs dans une fichier texte
    Bonjours tous le monde je vous explique mon petit probleme.

    Je doit realiser un petit programme qui me permet de lire dans un fichier en selectionnant certains champs sur differente ligne séparrer par des ',' et les copiers dans un autre fichier. La copie de c'est champs doit etre toujours separer par une ',' et chaque ligne copier doit etre mit a la ligne sur le nouveau fichier.

    exemple du fichier:

    Rapport,Mornas
    Rapport,,,263,Système d'exploitation,Microsoft Windows 2000 Professional
    Rapport,,,264,Date,2003-05-30
    Rapport,,,265,Heure,14:41
    Résumé,,Ordinateur,513,Système d'exploitation,Microsoft Windows 2000 Professional
    Résumé,,Ordinateur,540,Service Pack du système,Service Pack 3
    Résumé,,Ordinateur,564,Internet Explorer,6
    Résumé,,Ordinateur,566,DirectX,4.07.00.0700 (DirectX 7.0)
    Résumé,,Ordinateur,514,Nom du système,PLANNING
    Résumé,,Ordinateur,515,Nom d'utilisateur,PLANNING

    Je vous montre exemple ce que je voudrais en rouge

    Voila donc avoir en resultat

    Mornas,Système d'exploitation,Microsoft Windows 2000 Professional,Service Pack 3,Internet Explorer

    Merci je compte sur vous

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Bonjour, je n'ai pas C++ Builder sous la main, donc je fais ça de mémoire mais ca devrait etre correct :

    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
       TStringList *file = new TStringList() ;
    //lire le fichier
       file->LoadFromFile( "C:\\MonDossier\\MonFichier.txt" );
     
    //recuperer la 3ème ligne du fichier
       AnsiString ligne3 = file->Strings[2] ;
     
       TStringList *ligne = new TStringList() ;
    //decouper la ligne a chaque virgule
       ligne->Delimiter = ',' ;
       ligne->DelimitedText = ligne3 ;
     
    //afficher le 5ème élement de la 3ème ligne
       ShowMessage( ligne->Strings[4] ) ;
     
    //libérer les ressources
       delete ligne ;
       delete file ;
    En esperant que ca te sera utile

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Sa mes vraiment utile mais juste une truc il me faudrait une commande pour que je puise aussi enregistrer dans une fichier texte a la suite de chaque champs qui minteresse comme l'exemple que j'ai marquer et aussi quand je lit un fichier different pour mettre les informations une ligne en dessous et faire la meme chose

    Merci d'avance

  4. #4
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    et encore un truc stp voila il y a un petit souci je te montre

    Résumé,,Carte mère,520,Mémoire système,256 Mo (PC133 SDRAM)

    Je voudrais extraire 256 Mo (PC133 SDRAM)
    il faut que je face cette ligne mais on dirai que les seperateurs ne foncionne pas bien

    ShowMessage( ligne->Strings[7]+ligne->Strings[8]+ ligne->Strings[9]+ligne->Strings[10]);

    donc si tu peux m'aider aussi

    Merci

  5. #5
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Edit : correction de la fonction FindToken (elle fonctionnait avant, mais une ressource n'était pas libérée!)


    Je pense que tu as tous les éléments pour faire ce que tu veux faire, en sachant encore que pour enregistrer un TStringList dans un fichier tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myStringList->SaveToFile( "C:\\monfichier.txt" ) ;
    Essai de faire des fonctions réutilisable, en voici une pour récupérer le n-ième élement d'une AnsiString :

    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
    AnsiString FindToken( AnsiString aSource, int aPosition, char aDelimiter )
    {
    /*
    aSource : la chaîne de caractère à découper
    aPosition: l'élément dans la chaîne que tu veux récupérer
    aDelimiter: le caractère de séparation
    */
      TStringList *tokenizer = new TStringList() ;
      tokenizer->Text = StringReplace(aSource, aDelimiter , "\n", TReplaceFlags()<< rfReplaceAll );
     
      AnsiString resultat = "" ;
      if( aPosition < tokenizer->Count )
        resultat = tokenizer->Strings[ aPosition ] ;
      delete tokenizer ;
      return( resultat );
    }
    PS : en passant, ca montre une autre methode pour decouper une string que celle que je t'avais donné dans mon premier post

  6. #6
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Je suis désolé de de dire sa mes ce code ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myStringList->SaveToFile( "C:\\monfichier.txt" ) ;
    Je fais comment

  7. #7
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par darkman13130 Voir le message
    Je suis désolé de de dire sa mes ce code ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myStringList->SaveToFile( "C:\\monfichier.txt" ) ;
    Je fais comment
    Ca ne marche pas? As tu déclarer au moins le TStringList?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TStringList *myStringList= new TStringList() ;
    //[...]
    // tu remplis comme tu veux chaque ligne (chaque élement du TStringList correspondra a une ligne du fichier)
    //[...]
    myStringList->SaveToFile( "D:\\SaveFile.txt" ) ;
    delete myStringList ;

  8. #8
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne->Delimiter = ',' ;
    Avec cette commande le separateur marche tres bien mais les espace conte pour lui comme un separateur et moi je veux pas car j'ai des phrases ex Systeme d'exploitation et il me prend que Systeme

    comment je peut remedier a sa et faire la sauvegarde sur un fichier et j'orai eu tous ce que je vouler

    Merci bonne journée

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Voici mon code j'avais complement oublier de declarer ma variable je suis desoler

    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
    TStringList *file = new TStringList() ;
    TStringList *myStringList= new TStringList() ;
     
    //lire le fichier
       file->LoadFromFile( "C:\\fichier1.txt" );
     
    //recuperer la 3ème ligne du fichier
       AnsiString ligne3 = file->Strings[9] ;
     
       TStringList *ligne = new TStringList() ;
    //decouper la ligne a chaque virgule
       ligne->Delimiter = ',' ;
       ligne->DelimitedText = ligne3 ;
     
    //afficher le 5ème élement de la 3ème ligne
       ShowMessage( ligne->Strings[5]) ;
    //Enregistre dans le fichier
       myStringList->SaveToFile( "C:\\fichier3.txt" ) ;
     
    //libérer les ressources
       delete myStringList ;
       delete ligne ;
       delete file ;
    aucun erreur mais mon fichier3 reste vide

  10. #10
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Une TStringList est, comme son nom l'indique une liste de String.

    DE ton coté, tu déclare myStringList, tu ne lui ajoute rien, puis tu sauvegarde (SaveToFile). C'est normal qu'il n'y ai rien dans ton fichier, puisque tu n'a rien ajouter!

    Il faut ajouter les infos que tu veux voir apparaitre dans ton fichier avant de le sauvegarder.

    Par exemple si tu ajoute ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    myStringList->Add( "TOTO" );
    myStringList->Add( "TATA" );
    myStringList->Add( "TITI" );
    myStringList->SaveToFile( "C:\\fichier3.txt" ) ;
    Tu aura dans ton fichier:

    TOTO
    TATA
    TITI
    A toi d'ajouter ce que tu veux.

    Pour le Delimiter je t'avou que je ne sais pas pourquoi ca ne marche pas (je n'ai pas C++ Builder sous la main). Mais essai ma deuxième méthode (avec StringReplace) qui elle devrait marcher

  11. #11
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Franchement niquel j'ai fais sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myStringList->Add(ligne->Strings[6]);
    Par contre a chaque fois que je releca mon programme si je prend un autre champs sa efface tous et sa mais le nouveau que moi je voudrai que sa garde tous a chaque fois

    exemple de tous a leure

    Rapport,Mornas
    Rapport,,,263,Système d'exploitation,Microsoft Windows 2000 Professional
    Rapport,,,264,Date,2003-05-30
    Rapport,,,265,Heure,14:41
    Résumé,,Ordinateur,513,Système d'exploitation,Microsoft Windows 2000 Professional
    Résumé,,Ordinateur,540,Service Pack du système,Service Pack 3
    Résumé,,Ordinateur,564,Internet Explorer,6
    Résumé,,Ordinateur,566,DirectX,4.07.00.0700 (DirectX 7.0)
    Résumé,,Ordinateur,514,Nom du système,PLANNING
    Résumé,,Ordinateur,515,Nom d'utilisateur,PLANNING

    Je vous montre exemple ce que je voudrais en rouge

    Voila donc avoir en resultat

    Mornas,Système d'exploitation,Microsoft Windows 2000 Professional,Service Pack 3,Internet Explorer

    Ca ces pour un fichier exemple donc tous sur une ligne et apres des que j'ouvre un autre fichier sa me face un seconde ligne avec toute les informations d'un autre pc en faite c'est pour faire un listing de tous les fichier et comment il y en a 200 env merci

  12. #12
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Tu charge ton fichier de résultat (LoadFromFile), tu lui ajoute la nouvelle ligne (Add), puis tu le sauvegarde(SaveToFile).

  13. #13
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Cool merci sa marche niquel par contre je comprend pas trop la fonction StringReplace donc si tu pourrai mettre les variables AnsiString FindToken( AnsiString aSource, int aPosition, char aDelimiter ) avec des valeurs que je puise comprendre sa serai cool

  14. #14
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Citation Envoyé par darkman13130 Voir le message
    Cool merci sa marche niquel par contre je comprend pas trop la fonction StringReplace donc si tu pourrai mettre les variables AnsiString FindToken( AnsiString aSource, int aPosition, char aDelimiter ) avec des valeurs que je puise comprendre sa serai cool
    Quoi? C'est quoi que tu comprend pas?

    Appuis sur F1 pour avoir des infos sur une fonction que tu comprend pas.

    Un exemple d'utilisation de FindToken :

    FindToken( "AAA/BBB/CCC/DDD/EEE", 3, '/' ) => retournera "DDD" (on commence à compter à 0)

    FindToken( "AAA/BBB//CCC/DDD//EEE", 6, '/' ) => retournera "EEE"

    FindToken( "AAA/BBB//CCC/DDD//EEE", 5, '/' ) => retournera ""

  15. #15
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    voila ma fonction

    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
    24
    25
    26
    27
    28
    29
    30
    31
    TStringList *file = new TStringList() ;
    TStringList *myStringList= new TStringList() ;
    TStringList *ligne = new TStringList() ;
    TStringList *ligne1 = new TStringList() ;
     
    //lire le fichier
       file->LoadFromFile( "C:\\fichier1.txt" );
     
    //recuperer la 3ème ligne du fichier
       AnsiString ligne3 = file->Strings[9] ;
       AnsiString ligne4 = file->Strings[10] ;
     
     
    //decouper la ligne a chaque virgule
       ligne->Delimiter = ',' ;
       ligne->DelimitedText = ligne3 ;
       ligne1->DelimitedText = ligne4 ;
     
       //ouverture du fichier3
       myStringList->LoadFromFile("C:\\fichier3.txt");
       //Ajout dans le fichier 3
       myStringList->Add(ligne1->Strings[6]+" "+ligne->Strings[6]);
     
     
    //Enregistre dans le fichier
       myStringList->SaveToFile( "C:\\fichier3.txt" ) ;
     
    //libérer les ressources
       delete myStringList ;
       delete ligne ;
       delete file ;
    Si avec la fonction StringReplace tu pourrai me donner le meme resultat si sa marche mieu au niveau des champs avec espaces je t'en suis reconnaissant et merci je te devrai quelque chose mdr

  16. #16
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Je pense que tu as tous les éléments pour réussir seul. Le but c'est pas que je te fasse tout. On apprend mieux quand on cherche par soit même, quitte a passer du temps et a tombé sur des problèmes.

    Si tu as des questions précises ou des problèmes precis, pose les questions, et on essaiera d'y repondre.

    Mais un :
    voila ma fonction [...] si tu pourrai me donner le meme resultat si sa marche mieu au niveau des champs avec espaces
    Tu comprendra que je ne suis pas là pour tous faire à ta place. Mais encore une fois c'est vraiment pas compliqué, donc je suis sûr qu'avec les éléments que tu as tu va t'en sortir.

    Bon courage

  17. #17
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    AnsiString FindToken( AnsiString aSource, int aPosition, char aDelimiter )
    {
    /*
    aSource : la chaîne de caractère à découperje doit mettre quoi moi
    aPosition: l'élément dans la chaîne que tu veux récupérerje doit mettre quoi moi
    aDelimiter: le caractère de séparationje doit mettre quoi moi
    */

  18. #18
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Points : 71
    Points
    71
    Par défaut
    Un grand MERCI a SAT83 qui sans lui je sais pas si j'y serai arriver merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire des données dans un fichier texte
    Par snakeisland dans le forum LabVIEW
    Réponses: 4
    Dernier message: 05/02/2014, 09h35
  2. Lire des ints dans un fichier texte avec java.io
    Par Vcouprie dans le forum Général Java
    Réponses: 1
    Dernier message: 07/02/2013, 20h01
  3. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  4. INSERER DU TEXTE AVEC DES CHAMPS DANS UNE REQUETE SUR sql Srv 2000
    Par sauceaupistou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 10h02
  5. Lire et ecrire des variables dans un fichier texte
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2007, 14h16

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