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 Delphi Discussion :

Fichier txt - Pb de taille !


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut Fichier txt - Pb de taille !
    Bonjour a tous

    Je genere un fichier texte tout ce qui a de plus stadard en utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .
    AssignFile(Texte, ExtractFilePath(Application.ExeName) + Fichier + '.txt');
    Rewrite(Texte);
    .
    .
    .
    Repeat 
     
       WriteLn(Texte, Chaine);
     
    UNTIL Stop;
    .
    .
    Close(Fichier);
    Tout marche tres bien... jusqu'au moment ou

    le fichier fait 16367 ko et ca plante, mais je n'ai aucun message d'erreur, absolument rien

    il me semble qu'il y avait une limitation de taille, vrai ?

    et si oui comment la contouner ?


    merci d'avance

    merci
    Merci d'ajouter un sur les tags qui vous ont aidé

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 507
    Points : 25 007
    Points
    25 007
    Par défaut
    Je viens de tester un fichier de 724Mo avec le code suivant (20000000 dans EdNbLineBigTextFile en 52secondes), il n'y a pas de limite, du moins loin, très loin, vers 40Go je crois depuis 2K ...

    Ecris-tu des caractères spéciaux, avec les fichiers textes, de mémoire le caractère 14 n'était pas du tout apprécié !

    J'utilisais BlockWrite à la place ...
    Tu dois avoir un autre problème


    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
    32
    33
    34
    35
    procedure TFrmTestFichier.BtnCreateBigTextFileClick(Sender: TObject);
    const
      BUF_LINE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'#13#10;
    var
       FLNC: TextFile;
       QuickBuf: string;
       TimeIteration, I: Integer;
       CountLn, StartTick, EndTick, TickPerSec: Int64;
    begin
       QueryPerformanceCounter(StartTick);
       try
          CountLn := StrToInt64(EdNbLineBigTextFile.Text) div 100;
          SetLength(QuickBuf, 100 * Length(BUF_LINE) - 2);
          for I := 0 to 98 do
            CopyMemory(@QuickBuf[I*Length(BUF_LINE)+1], @BUF_LINE[1], Length(BUF_LINE));
          CopyMemory(@QuickBuf[Length(QuickBuf)-Length(BUF_LINE)+3], @BUF_LINE[1], Length(BUF_LINE) - 2);
     
          AssignFile(FLNC, EdPathSearch.Text);
          Rewrite(FLNC);
          try
             while CountLn > 0 do
             begin
                Dec(CountLn);
                Writeln(FLNC, QuickBuf);
             end;
          finally
             CloseFile(FLNC);
          end;
       finally
          QueryPerformanceCounter(EndTick);
          QueryPerformanceFrequency(TickPerSec);
          TimeIteration := Round((EndTick - StartTick) / TickPerSec * 1000);
       end;
       MemoShort.Lines.Add('CountLine : ' + IntToStr(TimeIteration) + ' ms');
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour


    Non rien de tout ca,

    blockwrite ! jamais essaye..

    je vais regarder,

    d'autres idees (pourquoi aucun message d'erreur a l'execution ?)

    a+
    olivier
    Merci d'ajouter un sur les tags qui vous ont aidé

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 507
    Points : 25 007
    Points
    25 007
    Par défaut
    Tu as surement des IOError au lieu d'avoir des Exceptions, c'est une option du compilateur
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 667
    Points : 6 996
    Points
    6 996
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    Question bête : C'est pas CloseFile(Fichier); plutôt ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    erreur compilateur
    mince j'avais oublie



    closefile
    oups ! aussi

    oui bien sur


    mais le pb se produit avant
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour

    (un peu de retard - autres obligations )

    J'ai utilise les blockWrite avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Taille := Length(Enregistr.Chaine);
            BlockWrite(Texte, Enregistr.Chaine[1], SizeOf(Taille));
            BlockWrite(Texte, Pointer(Enregistr.Chaine)^, Length(Enregistr.Chaine));
    mais je recois parfois le message d'erreur suivant :

    erreur E/S 1784
    comment resoudre ce pb ?

    merci d'avance

    olivier
    Merci d'ajouter un sur les tags qui vous ont aidé

  8. #8
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 355
    Points : 3 132
    Points
    3 132
    Par défaut
    Bonjour,

    c'est une erreur liée à un appel aux API Windows :

    I/O Error 1784:
    // IO Error 1784L
    // ERROR_INVALID_USER_BUFFER
    // MessageText:
    // The supplied user buffer is not valid for the requested operation.
    mais je ne sais pas comment l'éviter

    Cherche sur Google à ERROR_INVALID_USER_BUFFER - il y a pas mal de réponses, mais je ne sais pas ce qu'elles veulent dire exactement ...

    A+

    Charly

  9. #9
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,

    c'est une erreur liée à un appel aux API Windows :

    mais je ne sais pas comment l'éviter

    Cherche sur Google à ERROR_INVALID_USER_BUFFER - il y a pas mal de réponses, mais je ne sais pas ce qu'elles veulent dire exactement ...
    ERROR_INVALID_USER_BUFFER, ça veut dire que la chaîne que tu passes en argument (ici la variable "Chaine") n'est pas un pointeur valide (ou est corrompu). Aucun rapport avec les fichiers, tu essayerait de copier ta chaîne dans une autre, tu aurait une erreur du même type (ou un plantage).

  10. #10
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    ça ne répond pas à ta question mais essaye de mettre ton texte dans un tstringList et d'utiliser la fonction saveToFile.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour et merci

    Il n'y a pas de smiley qui se gratte la tete ?

    Je dois avouer etre perdu !

    ERROR_INVALID_USER_BUFFER, ça veut dire que la chaîne que tu passes en argument (ici la variable "Chaine") n'est pas un pointeur valide (ou est corrompu). Aucun rapport avec les fichiers, tu essayerait de copier ta chaîne dans une autre, tu aurait une erreur du même type (ou un plantage).
    ma variable "chaine" est local, donc je ne vois pas trop avec quoi elle pourrait rentrer en conflit.
    Le code de blockwrite, je l'ai recupere sur le forum (merci le forum)

    philnext :
    mon fichier final fait pls centaines de milliers de lignes au final, et donc pas sur que ce soit tres efficace (en temps) ???


    a+
    Merci d'ajouter un sur les tags qui vous ont aidé

  12. #12
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    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
    var
      SZC, SZ : integer;
    const
      CRLF = #13#10;
    begin
      with TFileStream.Create('MonFichier.txt', fmCreate) do
      try
        SZC := SizeOf(Char);
        repeat 
          SZ := (Length(Chaine)+2) * SZC;
          Write(PChar(Chaine+CRLF)^, SZ);
        until Stop;
      finally 
        Free;
      end;
    end;
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. Exporter en fichier txt avec taille fix
    Par ryaxx dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/12/2014, 15h50
  2. nombre de lignes fichier txt (très grande taille)
    Par bougnbie dans le forum Linux
    Réponses: 4
    Dernier message: 15/02/2013, 18h26
  3. [Batch] Taille d'un fichier >> fichier.txt
    Par ptilemare dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 02/08/2010, 12h47
  4. tester la taille d'un fichier TXT
    Par donbrico dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 11/02/2008, 21h58
  5. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19

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