none
Remplacement de caractère RRS feed

  • Question

  • Bonjour tout le monde,

    Oh qu'on va taper haut, là.

    J'ai exécuté cette instruction :

    txbText.Text = txbText.Text.Replace(txbSource.Text, txbReplt.Text);
    

    La documentation me dit que ça va remplacer toutes les occurrences de txbSource.Text dans txbText.Text par txbReplt.Text, or ce que j'obtiens c'est que seulement la première occurrence est remplacée.

    J'aurais bien vu un paramètre quelque part qui dit premier seulement, ou tout. On a bien g avec les expressions régulières ... Mais là, non, il n'y en a que deux.

    Est-ce que j'ai mélangé quelque chose ?

    Dans le texte à remplacer il y a un espace, et dans le texte de remplacement il est remplacé par un espace insécable (respectivement 32 et 160). Je me suis plongé dans C# parce que Notepad2 ne s'en sort pas.

    dimanche 29 novembre 2020 09:54

Toutes les réponses

  • ça marche normalement chez moi

    J'ai mis chaîne à remplacer ="a" et chaîne de remplacement = "b" =>

    dimanche 29 novembre 2020 10:31
  • Ah oui, avec a et b, impeccable.

    Mais avec les caractères 32 et 160, ce n'est pas tout-à-fait aussi évident, même si on dirait qu'il ne manque pas grand-chose. Là où c'est vicieux c'est qu'avec la vidéo que tu as faite on ne s'apercevrait de rien avec les espace puisque l'aspect des deux espaces (ordinaire et insécable) est le même. C'est en passant le résultat final à l'éditeur hexadécimal que j'ai compris pourquoi ma sélection de fichier ne fonctionnait pas.

    Je m'en suis sorti avec ça :

    private void btnReplt_Click(object sender, EventArgs e)
    {
    	if (txbSource.Text == txbReplt.Text)
    	{
    		MessageBox.Show("Source et cible identiques");
    	}
    	else
    	{
    		while (txbText.Text.Contains(txbSource.Text))
    		{
    			MessageBox.Show(txbText.Text.IndexOf(txbSource.Text).ToString());
    			txbText.Text = txbText.Text.Replace(txbSource.Text, txbReplt.Text);
    		}
    		MessageBox.Show("Texte remplacé");
    	}
    }
    

    Je m'attendais à voir apparaître successivement la position des dix occurrences du texte à remplacer, et curieusement je n'ai vu ce message qu'une fois. Donc, alors qu'avec la première version j'avais toujours un espace (32) à partir de la deuxième occurrence, là non.

    Donc le résultat final voulu est obtenu, mais le trajet est bizarre, non ?

    Obligé d'écrire un while, pour quelque chose qui au final ne s'exécute qu'une fois.

    En fait, peut-être le problème se situe-t-il dans l'introduction du texte dans les zones de texte.

    J'ai fini par créer un autre bouton :

    private void button1_Click(object sender, EventArgs e)
    {
    	int espInsec = 160;
    	char chrEspInsec = (char)espInsec;
    	txbReplt.Text = txbReplt.Text + chrEspInsec;
    }
    

    Comme ça je suis sûr d'ajouter un espace insécable. J'ai un peu oublié les détails puisque j'ai réussi à avoir ce que je voulais dans le fichier, il faudrait peut-être que je réessaie. Toujours est-il qu'avec les deux ajouts (la boucle, même si on ne l'exécute qu'une fois, et le bouton pour ajouter le caractère spécial), ça a fini par fonctionner.

    Ah oui, pour mieux comprendre il va falloir que je fasse une interface de test comme tu as fait, mais avec une décomposition en caractères ASCII.

    dimanche 29 novembre 2020 16:19