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# Discussion :

Remplacement de chaines de caractères par une autre


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut Remplacement de chaines de caractères par une autre
    Bonjour,

    Nouveau petit souci.
    J'aimerai trouver et remplacer toutes les chaines de caractères ANSI par une autre chaine de caractères ANSI.
    Ou alors trouver et remplacer toutes les chaines de caractères hexadécimales par une autre chaine de caractères hexadécimales.

    Exemple (pour ANSI), je voudrai que mon code/fonction cherche tous les îOLÃAl\ et les remplace par babarhum.

    J'ai testé différentes soluces dont :
    montexte.Replace("îOLÃAl\", "babarhum");
    sans succés.

    Merci du coup de main.

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    il te donne quoi comme résultat ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Salut,

    Extraits de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void button1_Click(object sender, EventArgs e)
            {
                OFD1.FileName = "";
                OFD1.Title = "fichier à modifier";
                OFD1.ShowDialog();
                if (OFD1.FileName != "")
                {
                    GlobalVariables.FilePath = OFD1.FileName;
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void button2_Click(object sender, EventArgs e)
            {
                string text = OFD1.FileName;
    text.Replace("Ã", "e");}
    Ne me donne rien, c'est à dire ne change pas mon fichier d'un offset.

    Je pense qu'il y a déjà une erreur ici : string text = OFD1.FileName; , n'est ce pas?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Bonjour.

    Quel est le contenu de ta variable OFD1.FileName ?
    Es tu certains que le caractère que tu souhaites remplacer apparaît dans cette chaîne ?

    Je crois bien que la méthode Replace("A","Z") renvoi une chaîne. Il fut donc prendre soin de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String in = "ABC";
    String out = Test.Replace("A","Z");
    Logiquement, tu devrais récupérer "ZBC" dans "out". Par contre, "in" lui n'est pas modifier.

    Cordialement,
    PKO

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Oui, certains, je suis l'affaire avec un éditeur hexa.
    Mon fichier :
    en hexa : C3 AE 4F 4C C3 AE 41 6C 5C 0D 0A
    soit en ANSI : îOLîAl\..
    En pièce jointe.
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt a.txt (11 octets, 97 affichages)

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    tu fais : OFD1.FileName = "";

    est ce que tu remplit cette variable ailleurs, parce que la visiblement ta string est vide mais pas null, donc tu ne dois pas avoir d'erreur d'execution mais effectivement ca ne fais rien.

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    oublie ce que je vient de dire j'ai loupé une ligne dans ton code.

    Corrige moi si je me trompe mais tu veux :
    1) selectionner un fichier
    2) remplacer des chaines X par des chaines Y dans le fichier

    si c'est bien ca, quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string text = OFD1.FileName;
    text.Replace("Ã", "e");
    tu recupere le nom du fichier dans une variable dans laquelle tu change les X par des Y. et comme le dit altesse tu dois recuperer la valeur de sortie. Sauf que ici tu travail avec le nom du fichier et non son contenu.

    essaie plutot ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string text = System.IO.File.ReadAllText(OFD1.FileName);

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Merci de votre aide, c'est très cool.

    Citation Envoyé par padej450 Voir le message
    oublie ce que je vient de dire j'ai loupé une ligne dans ton code.

    Corrige moi si je me trompe mais tu veux :
    1) selectionner un fichier
    2) remplacer des chaines X par des chaines Y dans le fichier
    Exact, je veux modifier TOUTES les chainesX par la chaine Y mais pour le moment je n'arrive pas en changer une seule.

    Citation Envoyé par padej450 Voir le message
    si c'est bien ca, quand tu fais :

    string text = OFD1.FileName;
    text.Replace("Ã", "e");

    tu recupere le nom du fichier dans une variable dans laquelle tu change les X par des Y. et comme le dit altesse tu dois recuperer la valeur de sortie. Sauf que ici tu travail avec le nom du fichier et non son contenu.

    essaie plutot ca :
    string text = System.IO.File.ReadAllText(OFD1.FileName);
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string text = System.IO.File.ReadAllText(OFD1.FileName);
                text.Replace("Ã", "e");
    Résultat négatif.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Citation Envoyé par babaOrhum Voir le message
    Merci de votre aide, c'est très cool.
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string text = System.IO.File.ReadAllText(OFD1.FileName);
                text.Replace("Ã", "e");
    Résultat négatif.
    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String resultat =  text.Replace("Ã", "e");
    Comme je te l'ai dit plus haut, text.Replace("Ã", "e") ne modifie pas ta variable "text".
    Il renvoi une chaîne, qui elle est modifiée !

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Citation Envoyé par Altess Voir le message
    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String resultat =  text.Replace("Ã", "e");
    Comme je te l'ai dit plus haut, text.Replace("Ã", "e") ne modifie pas ta variable "text".
    Il renvoi une chaîne, qui elle est modifiée !
    Ok, désolée, je teste ce soir et donne le retour car je dois m'absenter.

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 68
    Par défaut
    oui bien sur je n'ai pas precisé mais tu dois changer ta deuxième ligne comme le dit Altess

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Citation Envoyé par babaOrhum Voir le message
    Ok, désolée, je teste ce soir et donne le retour car je dois m'absenter.
    Tu n'as pas a être désolé
    Tiens nous au courant.

    Cordialement,
    PKO

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Citation Envoyé par Altess Voir le message
    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String resultat =  text.Replace("Ã", "e");
    Comme je te l'ai dit plus haut, text.Replace("Ã", "e") ne modifie pas ta variable "text".
    Il renvoi une chaîne, qui elle est modifiée !
    J'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string text = System.IO.File.ReadAllText(OFD1.FileName);
                String resultat = text.Replace("Ã", "e");
    Pareil, le fichier ne change pas.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MessageBoxEx.Show(text +" replacé par " + resultat, "", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);
    D'ailleurs l'info ci-dessus, me confirme que rien n'a changé.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 78
    Par défaut
    Avec le mmessage d'info, je me rends compte que le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string text = System.IO.File.ReadAllText(OFD1.FileName);
    reconnait un code autre que le ANSI (visible sur mon éditeur hexa) que je veux modifier.

    Il parait donc normal que .Replace (X,Y) ne modifie pas le fichier car il ne trouve pas les caractères X rentrés.
    Merci à ceux qui m'ont aidé mais je pense que ce n'est pas adapté au ANSI.


    Je reviens donc à mon point de dépard du topic :

    Citation Envoyé par babaOrhum Voir le message
    Bonjour,

    Nouveau petit souci.
    J'aimerai trouver et remplacer toutes les chaines de caractères ANSI par une autre chaine de caractères ANSI.
    Ou alors trouver et remplacer toutes les chaines de caractères hexadécimales par une autre chaine de caractères hexadécimales.

    Exemple (pour ANSI), je voudrai que mon code/fonction cherche tous les îOLÃAl\ et les remplace par babarhum.

    J'ai testé différentes soluces dont :

    sans succés.

    Merci du coup de main.
    D'autres soluces que .Replace(X,Y)? Merci d'avance.

  16. #16
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Salut babaOrhum,

    Afin de lire ton fichier en encodage ansi il faut que tu le précises à l'ouverture de ton fichier. Ensuite tu stockes le fichier dans une chaine de caractères sur laquelle tu utilises la fonction Replace. Enfin tu refermes ton fichier avec la fonction close.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    StreamReader fstream = new StreamReader(File.OpenRead(@"C:\a.txt"), Encoding.Default);
    string text = fstream.ReadToEnd();
    text = text.Replace("Ã", "e");
    fstream.Close();
    Pour que ces modifications soient enregistrées dans ton fichier il faut que tu ouvres ce dernier en lecture, puis que tu écrives la chaine dedans et enfin tu le fermes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    StreamWriter outstream = new StreamWriter(File.OpenWrite(@"C:\a.txt"), Encoding.Default);
    outstream.WriteLine(text);
    outstream.Close();
    Ici le fichier est sauvegardé en format Ansi, si tu veux l'enregistrer dans un autre format il te suffit de modifier le parametre Encoding.Default à la création de ton StreamWriter

  17. #17
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,
    je rajoute à ce qu'a dis Bobbledople:
    Le Framework .NET gère plusieurs types de codages grâce à des classes contenues dans System.Text.

    On trouve ASCII/ISO/Unicode qui regroupe un large panel des codages ASCII, ISO et Unicode existants qui sont gérés par la classe System.Text.Encoding, tu peux retrouver la liste dans msdn.

    Il y a ASCII qui permet d’encoder en US ASCII sur 7 bits grâce à la classe ASCIIEncoding.

    Il y a Unicode UTF-8 qui permet d’encoder en Unicode UTF-8 grâce à la classe UTF8Encoding.
    L’UTF-8 est codé sur un à quatre octets et permet une transition facile en
    Unicode depuis un codage ANSI/ISO. Le Framework .NET utilise l’UTF-8
    dans certains processus internes.

    Il y en a plusieurs que tu peux les consulter dans msdn.

    Et il faut savoir que Le premier type de codage normalisé est l’American Standard Code For Information Interchange (ASCII). Il a été créé par l’American National Standard Institute (ANSI) et il est le pilier
    des codages normalisés puisque la plupart s’en servent de base aujourd’hui.
    L’ASCII est une table de caractères codée sur 7 bits (elle supporte donc 128 caractères).
    Le problème de ces codages en ASCII sur 7 bits ou étendu à 8 bits (comme ISO-8859-xx) est qu’ils font correspondre des caractères différents pour une même valeur sur la plage 127 à 255, il est alors impossible de
    mélanger dans un même document deux alphabets différents (Français et Hébreux par exemple).

    Moi à ta place et vu ton besoin j'essairais avec l'Unicode (qui couvre les
    caractères de plusieurs langages différents) et tu peux te baser sur l'exemple ci-aprés (projet de type console), où on utilise la méthode Convert de la classe Encoding pour convertir une chaine de caractères dans un autre langage tout en gardant une certaine intégrité du texte:

    éèàôîûê => vers => eeaoiue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void Main(string[] args)
    {
    Encoding e = Encoding.GetEncoding("iso-8859-1");
    Encoding f = Encoding.GetEncoding("iso-8859-8");
    byte[] encode;
    byte[] decode;
    encode = e.GetBytes("éèàôîûê");
    decode = Encoding.Convert(e, f, encode);
    Console.WriteLine(f.GetString(decode));
    Console.Read();
    }
    Référence : Lien

    Bonne courage

  18. #18
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    J'ai pas tout lu je l'avoue
    Et mon intervention pourra peut etre paraitre triviale

    Mais nulle part je n'ai vu l'assignation du replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String NouveauText=montexte.Replace("îOLÃAl\", "babarhum");

  19. #19
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Citation Envoyé par olibara Voir le message
    nulle part je n'ai vu l'assignation du replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String NouveauText=montexte.Replace("îOLÃAl\", "babarhum");
    C'est justement ce qu'a essayé de faire babaOrhum, et qui ne fonctionne pas, dû à des problèmes d'encodage (cf. premier post)

Discussions similaires

  1. [XL-97] remplacement de chaine de caractères par une autre
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/10/2009, 00h58
  2. Réponses: 10
    Dernier message: 24/11/2008, 13h14
  3. [E-02] Remplacer une partie de chaine de caractère par une autre
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/09/2008, 22h19
  4. Remplacer chaine de caractères par une autre chaine
    Par unmaxdemily dans le forum SAS Base
    Réponses: 2
    Dernier message: 25/06/2008, 09h11
  5. JSP : comment remplacer une chaine de caractères par une autre
    Par techquos dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/12/2006, 09h37

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