Impossible d'utiliser Strings.chr()

Signaler
-
 ojojoj -
Bonjour,

Je travail sur des workbook en ce moment et j'ai un certain problème.

Je voudrais traduire une partie de code de vb en c# :

MyText.Replace(Chr(13), "")
MyText.Replace(Chr(9), "")
Dim TableCRs() As String = Split(MyText, Chr(10))


Il existe apparement une fonction Strings.chr() équivalent à Chr() en vb (http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.chr.aspx)
mais elle n'est pas reconnu. Je suis sous visual studio 2010, le framework 4.5 est bien installé.

Est-ce que quelqu'un a eu le même problème?
Ou est-ce quelqu'un connait l'équivalent de Chr(13), Chr(10) et Chr(9) en c# ?

Merci d'avance.

8 réponses

Je crois que je peux remplacer les deux premières lignes, en c#, par :

MyText.Replace("\\s+", "");

\\s+ qui inclue \n,\r, et \t, je crois.

A quoi correspond chr(10)... un espace?
Ou Chr(10) est plutot un retour chariot "\n".
Dans ce cas je ne peux pas spliter Mytext..., n'est-ce pas?
Messages postés
14256
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 février 2020
343
Bonsoir

un petit tour chez wikipédia, article Table Ascii, et tu sais à quoi correspondent chaque caractère.

Ensuite, la méthode Replace en C# (comme la plupart des méthode en C#) ne se comporte pas comme en VB, le résultat doit être stocké, il n'est pas injecté dans le string "appelant"
MyText.Replace("\\s", "");//MyText n'est pas changé malgré l'exécution de la commande
MyText = MyText.Replace("\\s", "");// Là MyText est modifié.


Je te propose de tester un truc dans ce style.
            StringBuilder str = new StringBuilder();
            str.AppendLine("Ligne 1");
            str.AppendLine("Ligne\t2");
            str.AppendLine("Ligne 3");
            string texte = str.ToString();
            

            string texte2 = texte.Replace("\t","");
            string texte3 = texte2.Replace("\n","");
            string[] split = texte3.Split('\r');

Whismeril
Messages postés
792
Date d'inscription
mardi 8 juillet 2003
Statut
Membre
Dernière intervention
12 juillet 2019
7
Bonjour,
Pour toutes ces histoires de traduction, j'utilise SharpDevelop qui contient un menu de traduction de code VB en C# entre autre.

louis
Messages postés
107
Date d'inscription
samedi 25 novembre 2000
Statut
Membre
Dernière intervention
4 mai 2013

[quote= whismeril]Ensuite, la méthode Replace en C# (comme la plupart des méthode en C#) ne se comporte pas comme en VB, le résultat doit être stocké, il n'est pas injecté dans le string "appelant"/quote
Attention à pas raconter n'importe quoi quand même ; la plupart des méthodes en C# ne retourne pas forcément quelque chose (enfin faudrait voir à définir "plupart" sinon) même si c'est le cas pour la classe String (compte tenu de son immutabilité c'est un peu normal). De plus elle se comporte exactement de la même manière en C# et en VB.Net (ou autre langages .Net tels que F# ou C++/CLI) vu qu'il s'agit de la même méthode, celle du framework. (et même s'il s'était agi de la vieille méthode Replace [aussi dans Strings] là encore c'eût été une fonction renvoyant son string résultat ]

Quant au sujet; il existe bien une méthode Strings.Chr mais elle n'est pas équivalente à Chr, il s'agit en fait de la même méthode (en effet la classe(C#)/module(VB.Net) String s est marqué d'un attribut permettant d'utiliser ses membres (tous statiques) sans être obliger de la qualifier entièrement [ceci afin d'être à la fois OO et d'assurer la rétro-compatibilité avec VB6 à l'origine]). Par contre pour pouvoir l'utiliser il faut la référence appropriée ;)
De toute façon on peux s'en passer dans tout les cas soit par les méthodes déjà exposées, soit (pour vouloir reproduire exactement l'idée du Chr(10)) en utilisant un cast plus ou moins "direct"
char c1  (char)10, c2 Convert.ToChar(10);


Cordialement !
Messages postés
14256
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
24 février 2020
343
la plupart des méthodes en C# ne retourne pas forcément quelque chose

C'est vrai j'aurais du être plus précis en écrivant "celles qui retournent quelque chose".
J'ai cru que son code est en VB6 ou le replace (si mes souvenirs sont exacts, ce qui m'a paru bon vu qu'il n'a écrit nulle part MyText=MyText.Replace(Chr(13), "")) renvoie directement le résultat dans la variable.

Mea culpa

Whismeril
Merci infiniment pour votre aide.

C'est effectivement un simple cast qu'il faut utiliser.

J'ai donc essayer :

[b]char c = (char)(13);
char cc = (char)(0);
MyText.Replace(c, ""); ***
c = (char)9;
MyText.Replace(c,""); ***
c = (char)10;

string[] TableCRs = MyText.Split(c);/b

Mais deux erreurs (***) :
impossible de convertir string en char.
J'ai donc essayer de remplacer la chaine vide par un caractere vide ('') ou (char)(""), mais non.
Est-ce que vous voyez l'erreur ?

Merci encore d'avance.
Il me semblait que la valeur ascii de "" (chaine vide) etait 0.