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 :

[D7] Problème d'affichage de chaine de caractère


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    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 510
    Par défaut [D7] Problème d'affichage de chaine de caractère
    Bonjour ,

    j'essaye d'afficher le contenu d'un fichier Txt dans un Memo :

    __Test.txt

    je fais :

    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
    Procedure TForm1.Button3Click(Sender: TObject);
    Var
      Ligne : String ;
      F1, F2 : TextFile ;
    Begin
      AssignFile(F2, '__Test.txt');
      AssignFile(F1, '__Test2.txt');
      Reset(F2);
      ReWrite(F1);
      While not Eof(F2)  Do
        Begin
          Readln(F2, Ligne) ;
          M1.Lines.Add(Ligne) ;
          Writeln(F1, Ligne) ;
        End ;
      CloseFile(F2);
      CloseFile(F1);
    End ;
    avec Notepad, dans __Test.txt et aussi dans __Test2.txt j'ai bien :

    Caption = '180°'
    Caption = 'Angle en ° :'
    mais dans le memo M1 j'ai :

    Caption = '180°'
    Caption = 'Angle en ° :'
    et ça m’énerve, car je ne trouve pas pourquoi !

    pourquoi le ° se transforme en ° ?

    A+
    Charly

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    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 510
    Par défaut
    Effectivement, mon fichier contient les caractères C2 et B0 soit  et º et le caractère  ne s'affiche pas sous Notepad.

    Comment puis éliminer ce caractère parasite ?

    A+
    Charly

  3. #3
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    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 510
    Par défaut
    Bon, j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          Index := Pos(#194, Ligne) ;
          If Index > 0 Then Delete(Ligne, Index, 1) ;
    ça marche, mais comme mon fichier Txt est un extrait d'un fichier DFM, je me demande s'il ne peut pas y avoir d'autres caractères polluant ?

    je me demande aussi pourquoi il y a ce caractère #194 dans ce fichier DFM ?

    Si quelqu'un peut m'éclairer ?

    A+
    Charly

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Bonjour,

    Citation Envoyé par Charly910 Voir le message
    Effectivement, mon fichier contient les caractères C2 et B0 soit  et º et le caractère  ne s'affiche pas sous Notepad.
    Ton fichier est codé en UTF8 (sous D7 ce sera difficile de le voir correctement (Si je me souviens bien D7 est uniquement ANSI))

    Vois si tu peux coder ton fichier en ANSI (on peut sous mon éditeur de texte directement) sous Notepad c'est enregistrer sous là il y a un choix de la codification... Il faut choisir ANSI.

    Cordialement

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    D7 cela doit être UTF8Decode, les noms des fonctions depuis 25 ans ont du changé 3-4 fois, maintenant c'est TEncoding.UTF8.Decode()

    NotePad affiche en bas l'encodage (sur les anciens Windows, on le voit au moment d'un Save As)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Readln(F2, Ligne) ;
          M1.Lines.Add(UTF8Decode(Ligne)) ;
          Writeln(F1, Ligne) ;
    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

  6. #6
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    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 510
    Par défaut
    Bonjour,

    merci pour vos réponses. Je me doutais bien que c'était une histoire de Charset. Effectivement c'est UTF8Decode ou UTF8ToAnsi (qui ont l'air équivalentes).

    Par contre si la chaine ne comporte pas de caractères UTF8, les fonctions renvoient une chaine vide. Il faut donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          Chaine := UTF8Decode(Ligne) ;
          If Chaine <> EmptyStr Then  Ligne := Chaine ;
          M1.Lines.Add(Ligne) ;
    Merci encore
    A+
    Charly

  7. #7
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    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 510
    Par défaut
    Non je me trompe : UTF8Decode renvoie toujours la bonne chaine, même si il n'y a pas de caractère UTF8 !

    mea culpa

    A+
    Charly

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/09/2006, 10h44
  2. Réponses: 2
    Dernier message: 10/05/2006, 15h23
  3. Réponses: 2
    Dernier message: 23/03/2006, 12h39
  4. Réponses: 11
    Dernier message: 22/03/2006, 21h57
  5. Réponses: 4
    Dernier message: 20/08/2004, 10h59

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