OVH Cloud OVH Cloud

Stream Writer document .cs

6 réponses
Avatar
Alex St-laurent
Voici le problème, et je vais tenter d'être suffisement clair : Dans une
application en C# j'utilise un Stream sur un fichier .cs. avec readLine, je
stock ensuite dans une variable string le premier messageBox que je trouve.
Bon, les message box sont parfois sur deux ou trois ligne que je vais
concaténer dans ma variable. Par la suite je modifie le messageBox qui se
trouve dans ma variable. Alors voici le problème :

Je doit ensuite remplacer le MessageBox du fichier .cs par le contenu de ma
variable mais comme le MessageBox du fichier .cs est sur 2 ou 3 ligne je ne
peut pas simplement utiliser Replace avec l'ancien contenu de ma vatiable
string car étant donné que j'ai concaténer les lignes la fonction Replace ne
retrouve pas ce text car dans le .cs il est sur plusieur lignes.

Alors si vous avez des suggestion ou des question si je ne suis pas assez
clair n'ésitez pas :-)

Merci de votre aide!

6 réponses

Avatar
Zazar
Bonsoir;

Voici le problème, et je vais tenter d'être suffisement clair : Dans
une application en C# j'utilise un Stream sur un fichier .cs. avec
readLine, je stock ensuite dans une variable string le premier
messageBox que je trouve. Bon, les message box sont parfois sur deux
ou trois ligne que je vais concaténer dans ma variable. Par la suite
je modifie le messageBox qui se trouve dans ma variable. Alors voici
le problème :

Je doit ensuite remplacer le MessageBox du fichier .cs par le contenu
de ma variable mais comme le MessageBox du fichier .cs est sur 2 ou 3
ligne je ne peut pas simplement utiliser Replace avec l'ancien
contenu de ma vatiable string car étant donné que j'ai concaténer les
lignes la fonction Replace ne retrouve pas ce text car dans le .cs il
est sur plusieur lignes.



Je ne suis pas sûr d'avoir compris, mais j'ai l'impression qu'il vous suffit
de concaténer vos lignes en supprimant vos fins de ligne.

De plus, si j'ai bien suivi, vous avez dans votre code des tas d'appels du
style :
MessageBox.Show("Un texte identique partout" +
variablecontenantuntextequelconque)

et vous voulez les remplacez par des appels du style :
MessageBox.Show("Un autre texte qui est lui aussi identique partout" +
variablecontenantuntextequelconque)

Si c'est le cas, vous avez intérêt à déclarer quelque part une constante
contenant votre texte commun et à utiliser cette constante dans vos appels
de fonction.

Si je n'ai pas compris ce que vous demandiez, illustrez vos propos par des
exemples.

--
Zazar
Avatar
Alex St-laurent
Salut à toi Ambassadeur Kosh!
En effet l'application que je développe doit être fiable. Je vais vérifier
du côté de CodeDom car en effet si ça structure un peu le source ça pourrait
m'être très utile.
En attendant si tu as un exemple de code utilisant le CodeDom n'ésite pas à
le poster.

Merci

"Ambassadeur Kosh" a écrit :

si c'est pour faire du fiable, utiliser CodeDom. ça lira le source, et
apres, suffira de parcourir l'arbre syntaxique et d'y effectuer les
substitutions.
plus d'embrouilles textuelles. bien que plus effrayant en apparence, ça me
semble trés approprié.





Avatar
Alex St-laurent
Je ne peut pas écrire le résultat dans une autre fichier car justement je
doit modifier les MessageBox des fichier .cs existant.

"Fred" a écrit :

Bonsoir,
Pourquoi ne pas écrire le résultat dans un autre fichier ?
Cela supprime le problème du replace.
(Si j'ai bien compris la manip à effectuer)

"Alex St-laurent" a écrit dans le
message de news:
> Voici le problème, et je vais tenter d'être suffisement clair : Dans une
> application en C# j'utilise un Stream sur un fichier .cs. avec readLine,
> je
> stock ensuite dans une variable string le premier messageBox que je
> trouve.
> Bon, les message box sont parfois sur deux ou trois ligne que je vais
> concaténer dans ma variable. Par la suite je modifie le messageBox qui se
> trouve dans ma variable. Alors voici le problème :
>
> Je doit ensuite remplacer le MessageBox du fichier .cs par le contenu de
> ma
> variable mais comme le MessageBox du fichier .cs est sur 2 ou 3 ligne je
> ne
> peut pas simplement utiliser Replace avec l'ancien contenu de ma vatiable
> string car étant donné que j'ai concaténer les lignes la fonction Replace
> ne
> retrouve pas ce text car dans le .cs il est sur plusieur lignes.
>
> Alors si vous avez des suggestion ou des question si je ne suis pas assez
> clair n'ésitez pas :-)
>
> Merci de votre aide!





Avatar
Alex St-laurent
En fait je n'ai peut-être pas été suffisament clair. Je stock chaque
messageBox dans une variable. Pour chaque section de texte du messageBox je
génère un noeud dans le fichier xml Strings.resx, je remplace ensuite la
section de texte du msgBox de sorte qu'elle appel maintenant le noeud du
Strings.resx. Une fois le MessageBox entièrement modifier je doit le remettre
dans le fichier.cs de sorte qu'il remplace le messageBox correspondant qui ne
possède pas les modifications.

"Zazar" a écrit :

Bonsoir;

> Voici le problème, et je vais tenter d'être suffisement clair : Dans
> une application en C# j'utilise un Stream sur un fichier .cs. avec
> readLine, je stock ensuite dans une variable string le premier
> messageBox que je trouve. Bon, les message box sont parfois sur deux
> ou trois ligne que je vais concaténer dans ma variable. Par la suite
> je modifie le messageBox qui se trouve dans ma variable. Alors voici
> le problème :
>
> Je doit ensuite remplacer le MessageBox du fichier .cs par le contenu
> de ma variable mais comme le MessageBox du fichier .cs est sur 2 ou 3
> ligne je ne peut pas simplement utiliser Replace avec l'ancien
> contenu de ma vatiable string car étant donné que j'ai concaténer les
> lignes la fonction Replace ne retrouve pas ce text car dans le .cs il
> est sur plusieur lignes.

Je ne suis pas sûr d'avoir compris, mais j'ai l'impression qu'il vous suffit
de concaténer vos lignes en supprimant vos fins de ligne.

De plus, si j'ai bien suivi, vous avez dans votre code des tas d'appels du
style :
MessageBox.Show("Un texte identique partout" +
variablecontenantuntextequelconque)

et vous voulez les remplacez par des appels du style :
MessageBox.Show("Un autre texte qui est lui aussi identique partout" +
variablecontenantuntextequelconque)

Si c'est le cas, vous avez intérêt à déclarer quelque part une constante
contenant votre texte commun et à utiliser cette constante dans vos appels
de fonction.

Si je n'ai pas compris ce que vous demandiez, illustrez vos propos par des
exemples.

--
Zazar





Avatar
Ambassadeur Kosh
CodeDom sert à :

Parser un source d'un langage dotnet (C#, VB...) et fabriquer l'arbre
syntaxique.
Generer le source dans un langage dotnet (C#, VB...) à partir d'un arbre
syntaxique.

traduction d'un langage vers l'autre immediate etc, etc, beaucoup
d'avantages

un coup de Reflector sur xsd.exe pour se faire une idée.
maintenant, le Parse implanté dans le framework est du genre NotImplemented.
donc, utiliser le Parser de VS en attendant la venue de la fonctionalité.

tout est la :

http://weblogs.asp.net/cazzu/archive/2003/12/02/40641.aspx
et si c'est un probleme qui dépasse le cadre de l'analyse syntaxique, apres,
ça sort de ma juridiction...
Avatar
Zazar
Bonsoir,

En fait je n'ai peut-être pas été suffisament clair. Je stock chaque
messageBox dans une variable. Pour chaque section de texte du
messageBox je génère un noeud dans le fichier xml Strings.resx, je
remplace ensuite la section de texte du msgBox de sorte qu'elle appel
maintenant le noeud du Strings.resx. Une fois le MessageBox
entièrement modifier je doit le remettre dans le fichier.cs de sorte
qu'il remplace le messageBox correspondant qui ne possède pas les
modifications.



Ok je comprends mieux ce que vous voulez faire, ça ressemble à de la
localisation : peut-être existe t-il des outils qui font déjà ça : avez vous
cherché ?
Sinon si vous voulez le faire vous-même, soit vous faîtes comme le propose
Ambassadeur Kosh : proprement en reparsant et en analysant le code, soit
vous vous contentez d'analyser les lignes contenant des appels à MessageBox.
La deuxième possibilité est moins fiable mais si c'est quelque chose que
vous n'avez à faire qu'une fois, vous pouvez vous en contenter sachant que
le compilateur C# repassera derrière vous pour vous dire si vous vous êtes
planté (enfin, il ne faut pas faire n'importe quoi non plus, notamment
veiller à ne pas modifier des commentaires ou du texte ). Pour revenir à
votre problème initial, il ne faut pas tenter de patcher votre code mais de
le réécrire au fur et à mesure : vous prenez un StringBuilder, vous cherchez
une ligne contenant un appel à MessageBox, vous recopiez tout ce qui la
précéde dans le StringBuilder, vous y rajoutez l'appel transformé et vous
recommencez. A la fin le StringBuilder contiendra le code converti.

--
Zazar