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 :

Lecture fichier texte


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 57
    Points : 46
    Points
    46
    Par défaut Lecture fichier texte
    Bonjour,

    j'ai récupéré un fichier texte dont je ne parviens pas à déterminer
    la longueur des lignes; j'ai un message d'erreur quand je la cherche.
    En utilisant une chaîne WideString je parviens à lire 758 caractères.
    Si je déclare plus j'ai des caractères bizarres qui apparaissent.
    Ceci alors que le fichier entier est lisible à l'écran.

    De plus en lisant la chaîne de caractères il ajoute un caractère Ascii 0 (Nul)
    entre chaque caractère.

    Si quelqu'un pouvait m'aider à essayer de trouver la longueur des lignes du fichier ou d'isoler chaque mot du fichier il me rendrait un grand service.

    Merci

    BB

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    As-tu un bout de code afin que l'on puisse voir ce que tu as déjà réalisé ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Salut,

    bien sûr mais jusqu'à présent j'essaie de délimiter la longueur des lignes du texte.
    Je ne peux pas lire plus de 757 caractères (environ) car je commence au 3ème.
    Si je commence au premier, ça m'affiche des caractères cabalistiques.
    Au 2ème j'ai un caractère bizarre. Alors je commence au 3ème.
    Je ne fais que lire la chaîne de caractères et la sauvegarder dans un autre fichier pour le moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Repeat
    ReadLn(Fichier,Str);
    Str:=copy(Str,3,757);
    Writeln(Fic,Str);
    ça ne t'aidera pas beaucoup je sais.

    Bien à toi

    BB

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Je me pose plusieurs questions

    1) Quel est ton but précis (ça nous aidera à mieux cerner ta demande)
    2) Pourquoi utiliser WideString à la place de String ?
    3) Que contient ton fichier texte ? Du texte simple d'après ton post précédent
    4) Comment tu déclares tes fichiers et tes variables ?

    Pour exemple, le bout de code ci dessous copie 757 caractères par ligne en partant du 3ième ... Et je n'ai aucun soucis ...

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      // Déclaration de mes fichiers
      Fichier:TextFile;
      Fic:TextFile;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      str:string;
    begin
      // On assigne le fichier à une variable (je ne teste pas l'existence de celui ci car j'en suis sur)
      AssignFile(Fichier,'C:\Test\test.txt');
      // On l'ouvre en lecture
      Reset(Fichier);
      // On assigne le second fichier à une variable
      AssignFile(Fic,'C:\Test\test2.txt');
      // On crée le fichier si il n'existe pas et on l'ouvre
      Rewrite(Fic);
      // Tant qu'on est pas à la fin du fichier "Fichier"
      while not Eof(Fichier) do
      begin
        // On lit la ligne
        ReadLn(Fichier,Str);
        // On découpe ...
        Str:=copy(Str,3,757);
        // On écrit la nouvelle ligne obtenu dans le fichier "Fic"
        Writeln(Fic,Str);
      end;
      // On ferme les deux fichiers
      CloseFile(Fichier);
      CloseFile(Fic);
    end;
     
    end.
    Voilà! J'espère que je t'ai apporté de quoi t'aider!
    @+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Re,

    oui c'est pratiquement ce que j'ai comme code.
    Au départ c'était un fichier wb que j'ai traduit en txt à l'aide d'Excel.
    En chipotant entre string, ansistring et widestring, j'ai pu un peu
    mieux comprendre le contenu des chaînes.

    En fait en widestring la longueur de chaque chaîne est de 21760 caractères.
    J'utilise widestring car en string je suis limité à 255 caractères.

    Chose curieuse lorsque je lis chaque caractère, un caractère "nul" chr(0) se
    trouve entre chacun d'eux.
    Lorsque je les supprime je n'ai plus rien.

    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
    17
    18
    19
    20
    AssignFile(Fichier,'D:\Dico A-F\Anglais_Français.txt');
      Reset(Fichier);
      AssignFile(Fic,'D:\Dico A-F\Test.txt');
      Rewrite(Fic);
      Repeat
        ReadLn(Fichier,Str);
        writeln(Fic,length(Str));
        L:=1;
        While L < Length(Str) do begin
          writeln(Fic,inttostr(L)+' '+str[L]+' '+inttostr(ord(str[L])));
          Strc:=Str[L];
          if Strc = chr(0) then begin
            delete(Str,L,1);
          end
          else
          begin
            StrA:=StrA+Str[L];
          end;
        L:=L+1;
        end;
    Voici le début de la liste lorsque je lis chaque caractère:
    21760
    1 ÿ 255
    2 þ 254
    3 A 65
    4 0
    5 - 45
    6 0
    7 f 102
    8 0
    9 l 108
    10 0
    11 a 97
    12 0
    13 t 116

    Voici le début de la liste si je détruis les caractères "nul":
    21760
    1 ÿ 255
    2 þ 254
    3 A 65
    4 0
    5 0
    6 0
    7 0
    8 0
    9 0
    10 0
    11 0
    12 0

    Je cherche à récupérer les mots et définitions pour les mettre dans une base de données.
    Voilà j'espère que ça t'aura aidé.

    Merci

    BB

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par Bouillon Voir le message
    En fait en widestring la longueur de chaque chaîne est de 21760 caractères.
    J'utilise widestring car en string je suis limité à 255 caractères.
    Faux. String et WideString peuvent supporter des chaines de 2 000 000 000 de caractères. La limitation doit venir de ton traitement ou d'un autre format que tu utilises temporairement.

    Seul le ShortString est limité à 255 caractères.

    Citation Envoyé par Bouillon Voir le message
    Voici le début de la liste lorsque je lis chaque caractère:
    21760
    1 ÿ 255
    2 þ 254
    3 A 65
    4 0
    5 - 45
    6 0
    7 f 102
    8 0
    9 l 108
    10 0
    11 a 97
    12 0
    13 t 116
    Et bien là c'est évident : il faut que tu ignores les trois premiers qui sont un indentificateur de fichier Unicode. Ensuite tu as un zéro, tout simplement qu'en unicode chaque caractère est sur deux octets.

    Citation Envoyé par Bouillon Voir le message
    Voici le début de la liste si je détruis les caractères "nul":
    21760
    1 ÿ 255
    2 þ 254
    3 A 65
    4 0
    5 0
    6 0
    7 0
    8 0
    9 0
    10 0
    11 0
    12 0
    Là c'est une erreur dans ton programme : tu supprimes les de Str les #0 or il ne faut pas les détruire ! Car en décalant la chaine tu va ne traiter qu'un caractère sur deux !

    Ton code de parcours de la chaine lue doit être le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        While L < Length(Str) do begin
          writeln(Fic,inttostr(L)+' '+str[L]+' '+inttostr(ord(str[L])));
          if Str[L]<>#0 then
            StrA:=StrA+Str[L];
          L:=L+1;
        end;
    Maintenant, il vaudrait mieux utiliser des WideString pour faire cette conversion, car si jamais tu as un caractère étendu il ne sera pas correct avec ta méthode.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    merci pour ton aide et tes explications; j'y comprends un peu plus.

    Bonne continuation

    BB

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

Discussions similaires

  1. Lecture fichier texte
    Par vince-60 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/04/2006, 14h15
  2. [VB]Probleme lecture fichier text et affichage
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 10/03/2006, 08h46
  3. lecture fichier texte et ...
    Par Nils30 dans le forum Langage
    Réponses: 5
    Dernier message: 12/01/2006, 11h55
  4. lecture fichier text et renvoi du contenu en byte *
    Par JulienT dans le forum Réseau
    Réponses: 3
    Dernier message: 02/01/2006, 13h21
  5. Lecture fichier text
    Par krfa1 dans le forum ASP
    Réponses: 13
    Dernier message: 25/11/2005, 08h00

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