Correspondance Mid (instruction) Vb C#

Résolu
Signaler
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Salut à tous.

Voilà déjà une ou deux heures que je tourne ne rond sans trouver de réelle réponse à ma question.

En VB6 il existe l'instruction Mid qui permet de remplacer un nombre indiqué de caracteres dans une variable String par des autres caracteres.

Mid(stringvar, start[, length]) =string
Élément, Description, ----
stringvar, Nom de la variable chaîne à modifier., ----
start, Donnée de type Variant (Long). Position du
caractère dans l'argument stringvar où commence le remplacement de
texte., ----
length, Facultatif. Donnée de type Variant (Long). Nombre
de caractères à remplacer. Si ce paramètre est omis, la totalité de l'argument
string est utilisée., ----
string, <object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>Expression de chaîne qui remplace une
partie de l'argument stringvar.

Question simple: existe t il une fonction equivalente dans le FrameWork, ou bien faut il la "réécrire"

en attendant vos réponses: Google is my friend
Merci de m'avoir lu
@+: Ju£i?n
Pensez: Réponse acceptée

12 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
piouff... string.Left n'existe pas

public string ReplaceAt(string inputString, int start, int length, string replaceString) {
   return string.Concat(inputString.Substring(0, start), replaceString, inputString.Substring(start + length));
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

avec ma methode ca donne:

public string ReplaceAt(string inputString, int start, int length, string replaceString)

{

    return inputString.Remove(start, length).Insert(start, replaceString);

}

je pense pas que ce soit plus rapide, mais perso je la trouve plus lisible...
(non testé...)

Nul ne devient grand par la guerre...
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
En terme de performance,

return inputString.Remove(start, length).Insert(start, replaceString);

est meilleur.
(Suffit de donner un coup de reflector pour s'en apercevoir)

<hr />
-My Blog-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
hum... as-tu cherché un peu dans la doc ?

string toto = "lnzeldnzelnd";

toto.SubString(...);

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Mid a deux "fonctions"
CE que je cherche a faire, n'est PAS l'extraction de caracteres mais la "substitution".

du genre (qui ne fonctionne pas)

string p = "J'AI TESTE";
p.Substring(4,3) = "PAS";

Voila j'espère que c'est plus claire.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
non... il n'y a aucune "Instruction" qui fait ça en .net.

Mais je pense qu'écrire une méthode qui fait ça proprement doit prendre... 5sec :

public string ReplaceAt(string inputString, int start, int length, string replaceString) {
   return string.Concat(inputString.Left(start), replaceString, inputString.SubString(start + length));
}

(pas testé)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

je pense seb, qu'il cherche plutot a faire un mix entre string.insert ( http://msdn2.microsoft.com/en-us/library/system.string.insert(VS.71).aspx )
et string.remove ( http://msdn2.microsoft.com/en-us/library/system.string.remove(VS.71).aspx )

car a ma connaissance il n'existe pas de fonction peremettant de remplacer dans une chaine n caracteres à la position x ...
ce qui etait ce que tu cherchais, non?

Nul ne devient grand par la guerre...
Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

oups, trop lent a repondre moi...

Nul ne devient grand par la guerre...
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Merci de vous être pencher sur le sujet.
Rien n'existe déjà, donc.

Je sais que cela ne prends longtemps de les réécrire mais étant donné que le FrameWork est vaste, je pensais que quelques chose existait déjà, ca evite parfois de réinventer la roue. Sachant que souvent on la réinvente carré

La concordance sera donc

public string ReplaceAt(string inputString, int start, int length, string _
  replaceString)
{
    replaceString = replaceString.Substring(0, length);
    return string.Concat(inputString.Substring(0, start), replaceString, _
      inputString.Substring(start+ length));
}, ----
(Coloration syntaxique automatique par Kenji)

Merci
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
14 février 2014
38
Miltiades... j'aime bien aussi ta méthode...

et pour ceux qui fond du Framework .net 3.5 :

public string ReplaceAt(this string inputString, int start, int length, string replaceString) {
    return inputString.Remove(start, length).Insert(start, replaceString);
}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
C'est vrai que c'est pas mal aussi.
Pensons tout de meme a bien verifier la longueur replaceString pour avoir la correspondance avec le Mid VB6 soit.

public string ReplaceAt(string inputString, int start, int length, string _
  replaceString)

{
    replaceString = replaceString.Substring(0, lenght);
    return inputString.Remove(start, length).Insert(start, replaceString);

}, ----
(Coloration syntaxique automatique par Kenji)

[auteur/MILTIADES/72191.aspx > Miltiades] :Tu pourrais en faire un Snippet car celui ci (entre autres) il m'aurait été utile

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
MErci [auteur/BIDOU/13319.aspx Bidou], pour cette précision. Alors un snippet en vue ou personne ne va le faire ?

Je dis çà car je me vois pas trop le faire étant donné que c'est vous qui m'avez aidé.

@+: Ju£i?n
Pensez: Réponse acceptée