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

Delphi Discussion :

Parcourir un fichier texte sans charger le fichier


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut Parcourir un fichier texte sans charger le fichier
    bonjour,

    je recherche un moyen de parcourir un fichier texte sans le charger totalement en memoire de maniere a optimiser ma RAM car j'ai des tres gros fichiers a lire.

    comme methodes je connais le classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var
        s: TStringList
    begin
        s := TStringList.Create();
        s.LoadFromFile(nomFichier);
    mais pour mon programme c'est beaucoup trop lourd.

    je connais aussi le fameux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var
        fich: TextFile;
        s: String;
    begin
        AssignFile(fich, nomFichier);
        Reset(fich);
        ReadLn(fich,s);
        CloseFile(fich);
    mais ce n'est pas tres pratique pour gerer un grand nombre de chaines de caracteres...

    il n'y aurait pas une autre methode? une methode intermediaire qui permettrait de charger une partie du fichier seulement.

    Mon but final est de detecter si il y a des doublons dans mon fichier (cad des lignes identiques)

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    je repond a ma propre question: je pourrais faire un ReadLn et transferer chaque ligne X que je rencontre vers une TStringList si X n'appartient pas deja a ma liste. Si X appartient deja a ma liste je peux ecrire "ce fichier contient un doublon".

    Le probleme est que si il n'y a aucun doublon dans mon fichier et qu'il est gros (plusieurs Giga), alors je le chargerai entierement dans ma liste... ce qui signifie une grosse masse de RAM en moins sur mon ordi

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    C'est le defi du jour. Si vous trouvez une solution optimale je vous offre une bouteille de champagne (et un bisous)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    voila mon programme ('fichiers' est une TStringList contenant les noms des fichiers a analyser):

    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
     
    for i := 0 to fichiers.Count-1 do begin
     
        flag := 0;
     
        lignes.Clear();
     
        AssignFile( fich, fichiers[i] );
        Reset( fich );
     
        while not Eof(fich) do begin
           ReadLn( fich, s );
     
           for j := 0 to lignes.Count-1 do begin
     
              if s = lignes[j] then begin
                memo1.Lines.Add( 'le fichier '+fichiers[i]+' contient un ou plusieurs doublon(s)' );
                flag := 1;
                break;
              end;
     
           end;
     
           if flag = 0 then lignes.Add(s);
           if flag = 1 then break;
     
     
        end;
    si vous trouvez un meilleur algo ca serait cool! la il tourne et apparemment il y en a pour un moment

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    J'ai trouvé ceci....

    Traiter des fichiers de grande taille
    Sylvain James
    TeamB-FR
    Rédaction Developpez.com
    Responsable Delphi

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Citation Envoyé par Faucon
    J'ai trouvé ceci....

    Traiter des fichiers de grande taille
    Sylvain James
    TeamB-FR
    Rédaction Developpez.com
    Responsable Delphi
    tu n'aurais pas un lien?

  7. #7
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Citation Envoyé par Art19
    Le probleme est que si il n'y a aucun doublon dans mon fichier et qu'il est gros (plusieurs Giga), alors je le chargerai entierement dans ma liste... ce qui signifie une grosse masse de RAM en moins sur mon ordi
    une question (la réponse ce touve dans l'aide de delphi) si tu charge un fichier de 2 GO dans un TStringlist, ce fichier sera où dans la ram ou sur DD?

  8. #8
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    Si Delphi code comme moi, LoadFromFile pointe en fait sur LoadFromStream avec comme argument un TFileStream

Discussions similaires

  1. [XL-2010] Copier le contenu d'un fichier texte dans un autre fichier texte
    Par Piixx_e dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 15/11/2013, 11h31
  2. copier plusieurs fichiers texte dans un seul fichier texte
    Par ERICKO dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/08/2008, 20h21
  3. Imprimer un fichier texte sans l'afficher
    Par sheira dans le forum ASP
    Réponses: 7
    Dernier message: 13/12/2005, 12h10
  4. charger un fichier texte du disque dur
    Par frol dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h09
  5. Fichiers texte sans accents
    Par mika dans le forum Langage
    Réponses: 5
    Dernier message: 03/11/2004, 16h42

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