cs_haklia
Messages postés41Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention30 avril 2006
-
29 avril 2006 à 20:46
cs_haklia
Messages postés41Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention30 avril 2006
-
30 avril 2006 à 14:04
Bonjour à tous.
Bon, j'ai cherché un peu partout sur le forum, mais je n'ai pas trouvé mon bonheur.
Voilà mon souci : j'aimerais savoir si on c#, on peut utiliser les méthodes :
fopen, fseek, fgetc, fputs et fclose. Et aussi l'objet FILE.
Si oui, comment faire ? (genre ajout stdio.h, mais comment)
Sinon, voilà ce dont j'ai besoin : ouvrir un fichier texte en lecture ET écriture à la fois. Puis je le lis caractère par caractère. Lorsque que je tombe sur une certaine chaîne, je reviens de 1 caractère en arrière (j'explique plus bas pourquoi) pour insérer une autre chaîne.
Le pourquoi de tout ça ? Donc : je veux rajouter à la suite d'une chaîne ABC, la chaîne DEF, mais seulement si ce n'est pas déjà la chaîne ABCDEF. Voilà le pourquoi de mon retour arrière, car je teste si la chaîne n'est pas déjà entière.
Et j'aimerais évité de passer par un second fichier (si c'est possible bien sûr).
J'espère avoir été clair.
Je vous remercie,
++
PS : c'est mon tout premier prog en c#. J'aurais pu le faire en Delphi, mais j'ai eu envie de me mettre au c#.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 29 avril 2006 à 21:17
Salut!
Ben non, ta question ne s'affiche pas mieux ailleurs
Pour ce qui est de la manipulation des fichiers en C#, tu trouveras tout ce que tu as besoin dans le namespace System.IO. Des fonctions équivalentes aux " fopen, fseek, fgetc, fputs et fclose." existe bien entendu...
Pour l'utilisation de ces classes, tu trouveras pleins d'exemples sur le site.
cs_haklia
Messages postés41Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention30 avril 2006 29 avril 2006 à 23:14
Merci pour vos réponses.
Effectivement je suis sous Opera (à part pour ce post ci).
Je vais regarder les System.IO. J'ai vu qu'il y avait streamwriter et streamreader, mais le peu que j'en ai lu ne m'a pas parû pratique. J'espère trouver les équivalents.
cs_haklia
Messages postés41Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention30 avril 2006 30 avril 2006 à 00:31
Voilà, mon prog est fini.
C'est un petit outil perso pour me simplifier la vie ... LOL
Bon j'explique, je code mon php à l'aide de textpad, à l'ancienne. Et je voulais automatiser le remplacement des balise <? par <?php, pour éviter les problèmes de compatibilité. Je sais qu'il existe des environnements de dev php qui le permettent (sûrement), mais je ne suis pas un grand fan des programmes dont 90% des fonctionnalités me sont inutiles.
De plus, cela m'aura permis de me mettre au C#.
Pour en venir à mon appli : je voulais donc remplacer les <? par <?php. J'ai donc copié le contenu de mon fichier dans une chaîne (cela me dérangeait au début, mais bon, ce ne sont pas des fichiers de plusieurs Mo en général, bref) et j'ai utilisé la méthode Replace. Oui mais voilà, si j'avais fait seulement fait s = s.Replace("<?", "<?php"), cela m'aurait aussi changé les <?php en <?phpphp.
J'ai donc feinté le problème en remplaçant <?php par <!?php.
Oui je sais, cela fait bidouille, mais bon, c'est à mon avis le plus simple.
Voilà donc la partie du code sur les fichiers (ça marche, mais si vous voyez des modifs à faire, je suis preneur) :
string s;
string message_fin;
if (listBox1.Items.Count > 0)
{
for (int i = 0 ; i < listBox1.Items.Count ; i++)
{
// Lecture fichier
StreamReader fr = new StreamReader(listBox1.Items[i].ToString());
s = fr.ReadToEnd();
fr.Close();
s = s.Replace("<?php", "<!?php");
s = s.Replace("<?", "<?php");
s = s.Replace("<!?php", "<?php");
StreamWriter fw = new StreamWriter(listBox1.Items[i].ToString(), false);
fw.Write(s);
fw.Close();
}
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 30 avril 2006 à 12:56
La ligne
s = System.Text.RegularExpressions.Regex.Replace(s, @"\B<\?\B", "<?php");
Remplace
s = s.Replace("<?php", "<!?php");
s = s.Replace("<?", "<?php");
s = s.Replace("<!?php", "<?php");
Pour des gros fichiers ou des recherches complexes, c'est plus rapide d'utiliser les expressions régulières. Pour des petits fichiers et des cas simples, on préfères utilise la classe string...
le "@" est juste une simplification d'écriture. Sans ça, on aurait du écrire : \\B<\\?\\B
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 30 avril 2006 à 13:23
The escaped character \b is a special case. In a regular expression, \b denotes a word boundary (between \w and \W characters) except within a [] character class, where \b refers to the backspace character. In a replacement pattern, \b always denotes a backspace.