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 :

Remplacement de caractères


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut Remplacement de caractères
    Bonsoir à tous,

    Je viens vous exposer un soucis, qui me tourmente depuis trop de temps.

    J'ai crée, une application console, qui extrait du registre, des variables tels que:

    C:\Documents and Settings\NOM\etc...

    Cette application console, extrait ces variables, dans un .bat.

    Seulement, il arrive que parfois, USERNAME, comporte des caractères spéciaux, accentx etc..

    J'aimerais sasvoir, si il est possible de remplacer ces caractères+ Accents par un symbole, un espace.

    Qu'ils soient remplacés directement dans le .batde sorte a obtenir:

    C:\Documents and Settings\Noël\...

    En

    C:\Documents and Settings\No^l\etc...

    Est-ce faisable?

    Je ne pourrais lister les inombrables manips que j'ai exécuté...

    Merci à tous pour vos réponses.

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    [Edit] J'espere ne pas avoir dis de betise... je ne programme jamais en version console ....[/Edit]
    Apriori je dirais oui, pour commencer il te faudrais avoir le liste des caracteres accentués et leur equivalents en caracteres speciaux.(mais ca je suppose que tu l'as deja)

    Mais qu'elle est le but exactement peut etre y'a t'il des commande ou des procedure toute faite pour le passage de texte en different codage.
    Donne un peu plus de details stp
    A++
    Qwaz

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut à toi!

    Il faudrait, en fait, que les varibles extraites dans le .bat, soient directement modifiées, si nécessaire.

    Si il y a un accent, on remplace la lettre accentuée, par ^ par exemple.
    Pour que dans le .bat, n'apparaissent pas ce que je veux éviter.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Fiu,

    Si tu changes les caractères, tes chaînes ne signifieront plus rien (car malgré un mauvais affichage, les caractères contiennent le bon code des caractères pour windows).

    Donc, sauf si tu extrais des données pour ne jamais t'en servir, évite de faire cela.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Oui, mais si je dois faire cela, c'est pour m'en servir.

    J'ai testé, et avec les caractères spéciaux, cela ne prends pas.

    Oups!! Grosse erreur de ma part! les variables, seront utilisés dans un .bat!!
    C'est pour cela, que je souhaite mettre de coté les caractères spéciaux, non pris en charghe sous DOS.

    J'édite les posts en enlevant les .TXT.

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    etant donner le nombre de caractere accentué je dirais qu'il faut te faire la liste de ces caractere et en face mettre la correspondance que tu souhaite(si tous les caractere accentués doivent etre remplacer par le meme symbole, il te faut juste la 1er list
    Ensuite et c'est la que j'espere ne pas dire d'anneries ... je vais essayer de faire une appli console pour voir ce a quoi tu as accés

    Sinon le plus simple c'est de faire une Boucle

    Je regarde si ca colle sur de l'appli console

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Ha.... heu...j'ai mis 3 plombe pour ecrire mon message d'avant :/
    donne un bout de code ca serait pas mal
    En plus j'ai craké mon code ci dessus fonctionne deja pas en mode appli :s je corrige ca deja

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    salut,

    Oki pour un morceau de code, mais un ti morceau hein?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Registre.RootKey:=HKEY_CURRENT_USER;
    Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
    Writeln(F, '*****='+(AnsiLowerCase(ExpandFileName(Registre.ReadString (*****)))));
     
    .......................
     
    Registre.CloseKey;
    Registre.Free;
    voili voilou!

    Cela se repete pour les autres clés.

  9. #9
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Bon alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    Var I : Integer;
        ListeAccent : String;
    Begin
         ListeAccent := 'éàêëä';
     
         For I := 0 To Length(ListeAccent) Do
              Edit1.Text := AnsiReplaceStr(Edit1.Text,ListeAccent[I],'^')
    mais j'ai pas tester sous appli console

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Alors cette fois c'est testé sous appli console
    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
    uses StrUtils;
    var
           StrAccent, StrSpecial : String;
           I : Integer;
    begin
         StrAccent := 'éâêÄËîäëô';
         //[...]
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(ExpandFileName(Registre.ReadString (*****)))
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[I],'^');
     
         Writeln(F, '*****=' + StrSpecial);
         readln
    End.
    Voili voulou ^^

    Ma premiere Appli console ... je suis tout chose sniff et pour une premiere fois c'etait pas mal ... non ?
    A++
    Qwaz

    [Edit]
    Et vu que je sens d'ici l'evolution de la question
    Voila la suite qui te permet de changer un caractere accentué particulier par un caractere special particulier ok dans mon exemple tous les 'a' accentués sont remplacés par '*', le 'e' accentués par '^', les 'i' par $,les 'o' par '¤', 'i' et 'o' accentués bien sur ^^ c'etait pour voir si tu suivais

    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
    uses StrUtils;
    var
           StrAccent, StrSpecial, StrCorres : String;
           I : Integer;
    begin
         StrAccent := 'éâêÄËîäëô'; //Caractere a replace
         StrCorres := '^*^*^$*^¤'; //Caractere de substitution
         //[...]
         Registre.RootKey:=HKEY_CURRENT_USER;
         Registre.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',False);
         StrSpecial := AnsiLowerCase(ExpandFileName(Registre.ReadString (*****)))
         For I := 0 To Length(StrAccent) Do
              StrSpecial := AnsiReplaceStr(StrSpecial,StrAccent[I],StrCorres[I]);
     
         Writeln(F, '*****=' + StrSpecial);
         readln
    End.
    Bonne nuit
    [/Edit]

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Peut-être en convertissant ta chaîne Ansi vers OEM ainsi tes caractères accentués seront correctes dans ton fichier .bat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function Ansi2OEM(const AValue: string): string;
    begin
      SetLength(Result, Length(AValue));
      CharToOEM(PChar(AValue), PChar(result));
    end;
    @+ Claudius

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut à tous!

    Merci Qwazerty, effectivement, cela fonctionne.

    Mais comme dit plus haut, si je dois utiliser le.bat après, rien a faire..Mea culpa.

    En fait, je me demande, si que je soubaite faire, n'est pas tout compte fait, impossible.

    En fait,, il faut tout simplemetn, que je puisse me servir des ses varaibles dans un .Bat voilà. Mais il faut pour cela, que les caractères non reconnus, soient remplacés, mais utilisables!

    J'y comprends rien...

    Cl@udius, dans Avalue, il faut que je rentre le nom de ma clé a convertir?

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par belle5656 Voir le message
    Cl@udius, dans Avalue, il faut que je rentre le nom de ma clé a convertir?
    Oui c'est ça !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MaClefConvertie := Ansi2OEM(MaClefAConvertir);
    @+

  14. #14
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut

    Ok donc en resumé si j'ai bien compris
    Ton appli console va chercher des clefs de registre
    Ensuite elle crée un fichier batch qui fait je sais pas quoi avec cette clef

    Ton probleme c'est que dans les point batch tu peux pas utiliser de caracteres accentués dans les paramettre que tu transmet a je ne sais quelle fonction dans ton batch....

    Donc mes questions sont
    1) c'est quoi cette fonction qui pose probleme?
    2) quel version de windows tu utilises?
    3) La plus importante : actuellement tu fais comment ??

    a++
    Qwaz

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut!

    1) c'est quoi cette fonction qui pose probleme?

    C'est les caractères accentués et/ou spéciaux qui posent soucis.
    Il faudrait pouvoir les convertir ou j ne sais quoi pour qu'il fonctionne sous DOS.

    2) quel version de windows tu utilises?

    XP!


    3) La plus importante : actuellement tu fais comment ??

    Bha je fais pas malheureusement...

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Je reedit la question 1 par ce que chez moi si j'utilise une fenetre de commande dos, j'ai pas de probleme avec les caractere accentués
    Donc tu utilise bien une fonction qui ne les supporte pas ? OU ton batch tourne sous Dos pur (pas dans une fenetre Commande dos de Windows)?
    Es tu bien sur que le probleme vienne des caracteres accentués?
    4) As tu essayés la commande que te conseil Claudius plus haut ?
    [Edit]
    J'ai regarder de nouveau et il semble bien que la solution de Claudius soit la bonne (mon premier code Console de ma vie ne sert a rien ) , dos utilise le code Latin1 alors que Windows utilise ASCII étendu
    [/Edit]

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Oui, le soucis, vient bien des caractères accentués + spéciaux.

    Pour le code, j'ai essayer, mais toujours sans succés.

  18. #18
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Si tes fichiers .Bat que tu crais ne sont pas secret defense, mets nous en un en ligne qu'on ait matiere a traviller
    Par ce que comme je te l'ai mis plus haut, moi si j'ouvre une fenetre de commande les caracteres accentués ne me pose aucun probleme, meme des commande de base comme Dir les reconnaissent.
    Toujours avec cet histoire de code de caractere, il faudrait peut etre regarder, quand WriteLn inscrit dans le fichier, si cette function ne changerai pas le code.
    A++
    Qwaz

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 88
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Dsl, mais je ne peux mettre tout ceci en ligne..
    Par contre, j'ai une tite idée pour la solution.

    Et si, on posait une condition?
    etant donné, que c'est uniquement, unsername, qui poserai probleme dans la varaible, si on met un truc du style:

    if USERNAME := ('""^^éèçà') do ..........


    Tu crois que c'est jouable? letruc qui pourrait posait probleme, c'est de dire quand USERNAME contient un caractères spécial etc..

    Genre, ce qu'il serait cool c'est ce qui suit il faudrait, a chaque fois que ces caractères sont trouvés, de faire:


    caractères à soucis:

    & ! ^ < > >> "

    Afin de pouvoir régler ce soucis, il suffit de rajouter ^ devant chacun de ces symboles. Il faut respecter les espaces lorsqu'il y en a. On place seulement ^ devant le symbole en question

    Un exemple :
    c:\documents and settings\a & moi\bureau
    doit devenir :
    c:\documents and settings\a ^& moi\bureau
    Un autre exemple :
    c:\documents and settings\moi & toi>nous!\bureau
    doit devenir :
    c:\documents and settings\moi ^& toi^>nous^!\bureau
    un dernier :

    c:\documents and settings\a ^ moi\bureau
    doit devenir :
    c:\documents and settings\a ^^ moi\bureau


    Tu vois le genre?

  20. #20
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Et si tu collais ça dans ton batch:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\documents and settings\%USERNAME%\bureau
    @+ Claudius

Discussions similaires

  1. Remplacement du caractère ?
    Par Mvu dans le forum ASP
    Réponses: 9
    Dernier message: 06/01/2005, 18h11
  2. Réponses: 11
    Dernier message: 01/12/2004, 19h09
  3. [CR] Chercher et remplacer un caractère dans 1 chaine
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 29/09/2004, 16h42
  4. Fonction permettant de remplacer des caractères
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 06/09/2004, 15h48
  5. Remplacer un caractère
    Par Mvu dans le forum ASP
    Réponses: 5
    Dernier message: 20/07/2004, 09h57

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