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 texte avec codage non standard


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut Fichier texte avec codage non standard
    Bonjour à tous,

    J'ai fait un soft qui interprète des traces GPS. Ces traces quelque soit le format adopté sont toujours des fichiers texte.

    Un utilisateur vient de me signaler que mon prog plantait quand il essayait de lire une trace. Quand j'examine cette trace avec le bloc note j'obtiens bien une suite de lignes intelligibles :

    AXGD001 GPSMap60CS Software Version 3.90
    HFDTE180605
    HOPLTPILOT: Janne Jδrnesjφ
    etc... etc...


    Mon soft attaque la trace par une instruction basique : Readln(F,s) et là quand j'examine s en debugging voici ce que j'obtiens pour la première ligne :

    'ÿþA'#0'X'#0'G'#0'D'#0'0'#0'0'#0'1'#0' 'G'#0'P'#0'S'#0'M'#0'a'#0'p'#0'6'#0'0'#0'C'#0'S'#0' '#0'S'#0'o'#0'f'#0't'#0'w'#0'a'#0'r'#0'e'#0' '#0'V'#0'e'#0'r'#0's'#0'i'#0'o'#0'n'#0' '#0'3'#0'.'#0'9'#0'0'#0#0

    Il y a probablement un problème de codage, comme le laisse à penser le nom du pilote. Utilisation d'unicode ?

    Comment détecter le codage du fichier avant de se lancer dans une suite de readln ?

    Si c'est de l'unicode comment l'interpréter correctement ?

    Le bloc note gère tout cela en automatique ? ( je suis sous XP)

    Merci d'avance...

  2. #2
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    En effet, le bloc note reconnait automatiquement le codage et gère ça de lui même, par contre il ne reconnait que 3 codages, ANSI, UTF8 et unicode, je pense que c'est de l'unicode bienque je ne sois pas spécialiste dans ce domaine, par contre pour ce qui est de la conversion, delphi propose un type widestring qui s'occupera de faire la conversion, en faisant un transtypage direct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var
      chaine: string;
      gps: widestring;
    begin
      ...
      readLn(F, gps);
      chaine := gps;
      ...
    end;
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut
    Bonjour à tous,

    Je relance pour voir si quelqu'un aurait une idée... Car après une journée de recherche... c'est la mémé...c'est la mémer....

    En effet le transtypage direct ne fonctionne pas ( à moins que je n'ai pas su aligner le code correctement ).

    C'est un peu plus compliqué que je ne l'imaginais. Quand un fichier texte doit être lu, il faut d'abord détecter son codage ( unicode, UTF 8 etc.. ) et ensuite traiter selon le cas.

    Quelqu'un a t il déjà traité ce genre de problème ?

    J'ai trouvé une classe intéressante GPTextFile sur http://gp.17slon.com/gp/gptextfile.htm. Mais je n'arrive pas à la faire fonctionner de manière satisfaisante. Apparemment il n'y a pas de contact sur le site de l'auteur.

    Amitiés à tous

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Ton fichier est en effet en unicode.
    Tu trouveras ici http://www.koders.com/delphi/fid28C8...07D60FD84.aspx
    tout ce qu'il te faut pour gerer l'unicode.
    Le plus simple est d'utiliser une TtntStringlist (une liste de widestring)
    apres l'avoir créer tu fait un loadfromfile(nomdufichier) et tu auras chaque ligne du fichier texte dans un item de ta liste.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut
    Merci menethar, pile poil ce qu'il fallait...

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

Discussions similaires

  1. Generer des fichiers text avec un codage unix
    Par proDZ dans le forum Général Java
    Réponses: 10
    Dernier message: 04/09/2009, 13h23
  2. nommer un fichier texte avec la date du jour
    Par avantoux dans le forum Windows
    Réponses: 4
    Dernier message: 02/02/2006, 09h57
  3. Comment parcourir un fichier texte avec une boucle ?
    Par kikica dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2005, 17h13
  4. Imprimer un fichier texte avec un script vbs
    Par Persons dans le forum Windows
    Réponses: 3
    Dernier message: 23/12/2004, 16h47
  5. Decoupage d'un fichier texte avec cut
    Par tesla dans le forum Linux
    Réponses: 3
    Dernier message: 28/06/2004, 15h39

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