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

C++Builder Discussion :

Enregistrer du texte sous une forme particulière


Sujet :

C++Builder

  1. #21
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Voilà ce que j'avais essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TEncoding *Encoding;
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, Encoding->ANSI);
    Cela n'avait pas donné ce que j'espérais.

    L'origine de ma demande était la suivante.
    Pour imprimer un calendrier, j'utilise un programme que j'ai écrit il y a déjà un certain nombre d'années (1998).
    A l'impression de ces caractères trouvés sur le Google Calendar, les caractères accentués apparaissaient sous la forme de 2 caractères.

    Pour ce qui me concerne, ma solution actuelle est suffisante, mais je pense que je ferais bien d'actualiser mon programme d'impression.
    Gilbert PASQUALINI

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    J'avais essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TEncoding *Encoding;
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, Encoding->ANSI);
    Cela n'avais pas donné ce que j'espérais.

    Ma demande est venu du fait que pour imprimer différents calendriers, j'utilise un programme que j'ai écrit il y a déjà un "certain nombre" d'années (1998).
    A l'impression les caractères accentués venant du Google Calendar apparaissaient sous la forme de 2 lettres.

    La solution que j'ai appliquée me donne satisfaction pour le moment, mais je pen,se que je devrais actualiser mon programme d'impression.
    Gilbert PASQUALINI

  3. #23
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Pasqualini Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TEncoding *Encoding;
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, Encoding->ANSI);
    Cela n'avais pas donné ce que j'espérais.
    Ton code semble dangereux, tu utilises un pointeur non initialisé. La propriété ANSI est static:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	/* static */ __property TEncoding* ANSI = {read=GetANSI};
    Tu dois l'utiliser comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, TEncoding::ANSI);
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  4. #24
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Merci, je vais essayer.
    Gilbert PASQUALINI

  5. #25
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, TEncoding::ANSI);
    Je n'ai pas obtenu le résultat escompté.
    Gilbert PASQUALINI

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Qu'est-ce que ça te donne? (poste un extrait du dump retourné par le site web que j'ai posté, http://www.fileformat.info/tool/hexdump.htm)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Voilà un extrait. On peut y voir les lettres accentuées ê et é

    0000-0010:  32 30 30 32-30 32 30 32-2c 22 31 31-3a 33 30 22  20020202 ,"11:30"
    0000-0020:  2c 22 31 32-3a 33 30 22-2c 22 6e 6e-3a 6e 6e 22  ,"12:30" ,"nn:nn"
    0000-0030:  2c 22 43 72-c3 aa 70 65-73 22 2c 22-59 22 0d 0a  ,"Cr..pe s","Y"..
    0000-0040:  32 30 30 32-30 32 30 35-2c 22 31 34-3a 30 30 22  20020205 ,"14:00"
    0000-0050:  2c 22 31 36-3a 33 30 22-2c 22 6e 6e-3a 6e 6e 22  ,"16:30" ,"nn:nn"
    0000-0060:  2c 22 4c 61-20 74 68 c3-a9 6f 72 69-65 20 56 2d  ,"La.th. .orie.V-
    0000-0070:  41 20 20 64-65 73 20 69-6e 74 65 72-61 63 74 69  A..des.i nteracti
    0000-0080:  6f 6e 73 20-66 61 69 62-6c 65 73 2c-20 6d 6f 64  ons.faib les,.mod
    0000-0090:  c3 a8 6c 65-20 64 65 20-46 65 72 6d-69 22 2c 22  ..le.de. Fermi","
    0000-00a0:  59 22 0d 0a-32 30 30 32-30 32 30 36-2c 22 31 34  Y"..2002 0206,"14
    0000-00b0:  3a 30 30 22-2c 22 31 34-3a 33 30 22-2c 22 6e 6e  :00","14 :30","nn
    0000-00c0:  3a 6e 6e 22-2c 22 54 72-69 63 6f 74-22 2c 22 59  :nn","Tr icot","Y
    0000-00d0:  22 0d 0a 32-30 30 32 30-32 30 36 2c-22 31 35 3a  "..20020 206,"15:
    0000-00e0:  30 30 22 2c-22 31 36 3a-30 30 22 2c-22 6e 6e 3a  00","16: 00","nn:
    0000-00f0:  6e 6e 22 2c-22 54 72 6f-63 22 2c 22-59 22 0d 0a  nn","Tro c","Y"..
    0000-0100:  32 30 30 32-30 32 30 37-2c 22 31 30-3a 30 30 22  20020207 ,"10:00"
    0000-0110:  2c 22 31 31-3a 30 30 22-2c 22 6e 6e-3a 6e 6e 22  ,"11:00" ,"nn:nn"
    0000-0120:  2c 22 52 65-6e 64 72 65-20 6c 69 76-72 65 73 22  ,"Rendre .livres"
    0000-0130:  2c 22 59 22-0d 0a 32 30-30 32 30 32-30 37 2c 22  ,"Y"..20 020207,"
    0000-0140:  31 34 3a 30-30 22 2c 22-31 36 3a 30-30 22 2c 22  14:00"," 16:00","
    0000-0150:  6e 6e 3a 6e-6e 22 2c 22-4c 61 20 6d-61 74 69 c3  nn:nn"," La.mati.
    0000-0160:  a8 72 65 20-c3 a0 20 6c-61 20 6e 61-69 73 73 61  .re....l a.naissa
    0000-0170:  6e 63 65 20-64 65 20 6c-27 75 6e 69-76 65 72 73  nce.de.l 'univers
    0000-0180:  20 21 22 2c-22 59 22 0d-0a 32 30 30-32 30 32 30  .!","Y". .2002020
    Gilbert PASQUALINI

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En effet, bien que tu aies demandé du Windows-1252, ça a quand même enregistré le contenu en UTF-8.

    Sous quel format les données sont-elles stockées en mémoire dans l'object slSdf, en fait?


    PS: Tu devrais utiliser la balise [ CODE ] pour le dump, ça préservera l'alignement.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Je récupère d'abort le fichier "basic.ics" généré par Google Calendar, que je charge avec un TStringList.
    Les données sont traitées avec des UnicodeString.
    C'est-à-dire que j'extrais ce qui m'intéresse.
    Pour chaque jour de l'agenda, les données extraites du "basic.ics" sont enregistrées dans un UnicodeString qui est ajouté dans un TStringList (slSdf).
    C'est ce TStringList qui est enregistré avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    slSdf->SaveToFile(SaveTextFileDialog1->FileName, TEncoding::ANSI);
    Il doit exister une solution. Lorsque j'ouvre le fichier texte ainsi enregistré avec UltraEdit et que je l'enregistre avec l'option ANSI, le nouveau fichier enregistré n'a plus les lettres accentuées codées avec 2 octets.
    Gilbert PASQUALINI

  10. #30
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Finalement, je ne suis pas certain qu'il existe une solution simple avec C++ Builder X6.
    En imprimant une ligne comportant des carctères accentués avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Printer()->Canvas->TextOutw(x, y, usLigne);
    Les caractères accentués sont imprimés sous forme de 2 caractères.
    Gilbert PASQUALINI

  11. #31
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Pasqualini Voir le message
    Finalement, je ne suis pas certain qu'il existe une solution simple avec C++ Builder X6.
    C'est certain qu'il y a une solution simple. C'est que l'on a pas ton code et on n'a pas ton fichier "basic.ics". Donc, il impossible de trouver une solution à un problème que l'on ne peux pas tester. Le mieux que l'on peut faire c'est faire des hypothèses ou te montrer notre code qui fonctionne normalement.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  12. #32
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    J'ai placé un extrait d'une cinquantaine de lignes du fichier basic.ics ici : http://dl.free.fr/lj25ZHNzz
    Si vous trouvez une solution assez simple, je vous en remercie d'avance.
    Gilbert PASQUALINI

  13. #33
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Faut-il être sous Free pour que ça marche?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #34
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Non, tout le monde doit pouvoir le télécharger.
    Il n'y a ni identifiant, ni mot de passe.
    Gilbert PASQUALINI

  15. #35
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Il y a également possibilité de le trouver là : http://gilbert.pasqualini.free.fr/basic_.ics
    Gilbert PASQUALINI

  16. #36
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Apparemment, du pur UTF-8, il de devrait donc pas y avoir de problème pour la lecture.
    C'est probablement un bug de TStringList::SaveToFile() qui lui fait ignorer le TEncoding::ANSI que tu lui passes.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #37
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Le problème viens du chargement du fichier, il faut spécifier le format UTF-8. Voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        TStringList* Fichier = new TStringList();
     
        // Charge le fichier en forcant UTF-8
        Fichier->LoadFromFile("c:\\basic_.ics", TEncoding::UTF8);
     
        // Ici on fait la manipulation souhaité
        Fichier->Add("SUMMARY:On fait la fête");
     
        // On enregistre le fichier en ANSI
        Fichier->SaveToFile("c:\\temp.txt", TEncoding::ANSI);
     
        delete Fichier;
    Sans cette spécification alors le fichier ne charge pas correctement et la sauvegarde ne fonctionnera en ANSI. Je ne sais pas pourquoi il détecte l'encodage 1252 (ANSI - latin I) au lieu de UTF-8.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  18. #38
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Merci,
    j'ai appliqué la procédure préconisée par Crayon.
    Cela marche parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Charge le fichier en forcant UTF-8
      Fichier->LoadFromFile("c:\\basic_.ics", TEncoding::UTF8);
     
    // On enregistre le fichier en ANSI
       Fichier->SaveToFile("c:\\basic_.ics", TEncoding::ANSI);
    // On recharge le fichier
       Fichier->LoadFromFile("c:\\basic_.ics");
    Gilbert PASQUALINI

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Enregistrer une classe sous une form
    Par adrienfehr dans le forum Visual Studio
    Réponses: 13
    Dernier message: 03/11/2010, 14h58
  2. Réponses: 2
    Dernier message: 10/09/2007, 19h03
  3. Texte sous une forme particulière
    Par mmb04 dans le forum Mise en forme
    Réponses: 2
    Dernier message: 12/06/2007, 15h10
  4. Emplacement d'un texte sous une image
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 26/12/2005, 11h53
  5. [DOM] Créer un fichier XML sous une forme bien précise
    Par LaseLiep dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 09/06/2005, 18h05

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