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 :

Insertion dans fichier texte + rapide que TStringList ?


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut Insertion dans fichier texte + rapide que TStringList ?
    Bonjour,

    J'ai créé une application qui transforme un format de fichier en un autre. Des relevés, qui sont triés par stations de mesure, se retrouvent triés par dates de relevés.

    J'utilise donc une boucle :

    Pour chaque fichier de relevés d'une station
    Si un fichier de relevés pour une date existe
    alors ouvrir ce fichier, et ajouter à la fin les relevés de la station
    sinon créer un fichier contenant les relevés de la station de cette date

    J'utilise pour cela un TStringList avec les méthodes LoadFromFile, et SaveToFile.

    Le problème, c'est que plus les fichiers sont gros, plus le loadfromfile est long et plus l'écriture à la fin du fichier prend du temps.

    Y'a-t'il une méthode plus rapide, et correspondant à l'ajout de Strings à la fin d'un fichier sans même lire son contenu, que TStringList ?

    Merci par avance !!

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut,
    utilise les Stream TstreamFile
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Merci, c'est TFileStream, c'est ça ? Par contre, excuse moi mais comment faire pour rajouter une liste de Strings à la fin du fichier ? Car TFileStream semble ne traiter que les fichiers en binaire, pas en texte... Ou peut etre ai-je lu trop rapidement l'aide de C++ Builder ?

  4. #4
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salutation,
    non un Stream peut-être un fichier texte ou binaire
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Désolé, mais je ne parviens toujours pas à rajouter une liste de Strings à la fin de mon fichier. Voici le 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
    TStringList *sortie = new TStringList();
    sortie->Add("...");
    sortie->Add("...");
     
    TFileStream *fichier;
    if(!FileExists(nom_fichier))
            fichier = new TFileStream(nom_fichier, fmCreate);
    else
            fichier = new TFileStream(nom_fichier, fmOpenReadWrite);
     
    fichier->Write(sortie, sizeof(TStringList));
    delete fichier;
     
    delete sortie;
    Il écrit un fichier binaire illisible et loin de contenir toutes les données de mon StringList de départ. Comment faire alors ?

    Merci !

  6. #6
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    salut,
    l'exemple suivant crée un Objet de type TFileStream, lit le fichier autoexec.bat,l'object TStringList se charge avec le stream
    il existe auusi la possibilité de charger un stream avce la méthode SaveToStream
    remarque le contenu du Stream est sauvé sur le disque dur à la destruction de l'object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TFileStream * mfstream;
     TStringList* mlist;
     mfstream=new TFileStream("c:\\Autoexec.bat",fmOpenReadWrite);
     mlist= new TStringList();
     mlist->LoadFromStream(mfstream);
    //... traitement
     delete mfstream;
    delete mlist;
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Merci beaucoup !!! C'est exactement ce que je cherchais, et c'est aparemment plus rapide...

    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
    16
    TFileStream * mfstream;
    TStringList *sortie = new TStringList();
     
    // Lecture
    mfstream=new TFileStream(nom_fichier,fmOpenRead);
    sortie->LoadFromStream(mfstream);
    delete mfstream;
     
    // Ecriture
    mfstream=new TFileStream(nom_fichier,fmCreate);
    sortie->Add(...);
    sortie->Add(...);
    sortie->SaveToStream(mfstream);
     
    delete sortie;
    delete mfstream;

    Je suis obligé de faire un premier "delete mfstream" lors de la lecture car si j'utilise le stream en mode openReadWrite, il me duplique à chaque fois mes données et je me retrouve en quelques secondes avec des fichiers de 20 Mo... Mais peut-être y'a t'il une autre solution ?...

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut
    Bonjour,

    pour ajouter le contenu d'un fichier à la fin d'un autre, tu peux t'inspirer de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TFileStream * test;
    TFileStream * ajout;
     
    test=new TFileStream("Test.txt",fmOpenWrite);
    ajout=new TFileStream("Ajout.txt",fmOpenRead);
     
    test->Position = test->Size; // on se place à la fin du fichier
     
    test->CopyFrom(ajout,0); // on insère le contenu de "Ajout.txt"
     
    delete test;
    delete ajout;
    Tu peux ensuite adapter ca pour par exemple rajouter des lignes à la fin du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    TFileStream * test;
    TStringList *sortie = new TStringList();
     
    test=new TFileStream("Test.txt",fmOpenWrite);
     
    test->Position = test->Size;
     
    sortie->Add("...");
    sortie->SaveToStream(test);
     
    delete sortie;
    delete test;
    En espérant t'avoir aidé

    Eric

  9. #9
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    test->Position = test->Size;

    C'était ça qu'il me manquait !! Merci Eric, à présent l'écriture est vraiment beaucoup plus rapide.

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

Discussions similaires

  1. Insertion données fichier texte dans une base MySQL
    Par majduuuuus dans le forum Général Java
    Réponses: 5
    Dernier message: 19/03/2013, 23h45
  2. Extraction donnees et insertion dans fichier texte
    Par BobDesign dans le forum PL/SQL
    Réponses: 1
    Dernier message: 06/03/2009, 16h41
  3. insertion de fichier texte dans mysql
    Par houssamux dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/03/2008, 13h42
  4. insertion un fichier texte dans mysql
    Par houssamux dans le forum Requêtes
    Réponses: 9
    Dernier message: 27/03/2008, 13h31
  5. [ Vector Fichier ] Vector dans fichier texte
    Par geegee dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2004, 13h56

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