Pb suppriession d'article en mode console

Résolu
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005 - 19 avril 2005 à 10:57
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 19 avril 2005 à 16:38
Bonjour, pour mon BTS je dois éffectuer des PTI C# , ce sont comme des TP mais servant pour mon BTS.

Je dois en faire une en mode console, c'est à dire sans interface graphique.

j'ai décidé de faire un lexique, les mots se trouvant dans un fichier texte.

j'ai trouvé comment chercher un mot, en ajouter un, mais je bloque sur la suppression.



pour lire :



FileStream fs = new FileStream("lexique.txt", FileMode.Open);


StreamReader sr = new StreamReader (fs,
ASCIIEncoding.Default);

string s = sr.ReadLine();



pour écrire :

FileStream fw = new FileStream("lexique.txt", FileMode.Append);


StreamWriter sw = new
StreamWriter (fw, ASCIIEncoding.Default);

sw.WriteLine(string);



mais pour supprimer je ne sais pas comment faire :s je crois qu'il faut
passer par une sorte de fichier mouvement mais je ne sais pas comment
faire.



Merci d'avance

12 réponses

shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 14:38
StreamReader sr = new StreamReader
("lexique.txt", ASCIIEncoding.Default);

string s = sr.ReadLine();


FileStream fw = new FileStream("temp.txt", FileMode.Create);


StreamWriter sw = new StreamWriter (fw, ASCIIEncoding.Default);



while (s !=
null && s.ToUpper() !motm ) // motm le mot a
supprimer

{


sw.WriteLine(s);
// copie les mots
qui sont avant le mot a suppr


s = sr.ReadLine();
// dans le fichier temp.txt

}





if ( s == null )

{


Console.WriteLine("Le mot n'est pas réferencé dans le lexique.");

}

else

{

Console.WriteLine("trouvé");




Console.WriteLine(s); // affiche le mot a suppri ( pour une
future vérification)

s = sr.ReadLine();


Console.WriteLine(s); // affiche la définition du mot



while ( s!= null)

{


s = sr.ReadLine();
// copi les mots aprés le mot a suppr


sw.WriteLine(s);
// a la suite dans le fichier temp.txt

}



sw.Close();



}



sr.Close();


File.Copy("temp.txt","lexique.txt",true);
// remplace le fichier lexique
par le temp

bool exis = File.Exists("temp.txt");

if(exis)

File.Delete("temp.txt");







vous en dites quoi ?? pas trés beau non ? jpense qu'il y a plus simple mais j'ai pas trouver
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 avril 2005 à 11:02
Salut,
Y'a pas de miracle, il faut commencer par lire le file (en le mettant en mémoire) puis fait les traitements dont tu as besoin, et ensuite réécrire le fichier avec les modifications que tu voulais apporter !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 11:17
j'y ai pensé mais ce qu'il me manque c'est le code, je ne vois pas comment l'écrire.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 avril 2005 à 11:29
Regarde du côté du MemoryStream, je pense que ça doit faire ce que tu veux.
Si t'arrives vraiment pas, je te ponderai un petit morceau de code...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 11:45
j'ai beau lire les dossier sur MemoryStream ici et sur l'aide de vs.net je n'y arrive pas :s
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 avril 2005 à 11:53
Bon en fait je me suis un peu emballé avec mon MemoryStream

Voici une solution qui marche, mais c'est un peu rustre. C'est juste pour expliquer le fonctionnement (on peut sans doute faire mieux).

StreamReader sr = new StreamReader("txt.txt");
ArrayList al = new ArrayList();
StreamWriter sw = new StreamWriter("txt1.txt");
string s = string.Empty;


while((s = sr.ReadLine()) != null) al.Add(s); // On lit


sr.Close();
al.RemoveAt(2); // On efface un element

foreach(object o in al) sw.WriteLine(o.ToString()); // On réécrit
sw.Close();

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 11:59
jdebute vraiment je connais pas tout ce que tu écris lol



je ne connais pas:




ArrayList al = new ArrayList();


al.Add(s);


(object o in al)


al.RemoveAt



si tu as le temps, tu peux expliquer svp



en attendant je vais tester merci
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 avril 2005 à 12:06
ArrayList est un tableau dynamique. On peut y ajouter des éléments dynamiquement avec sa méthode Add(object o).
Donc je lis le fichier (en mettant chaque ligne dans un index de mon tableau dynamique) jusqu'à qu'il n'y ait plus d'élément à lire.

Ensuite j'efface un élément (avec le RemoveAt(int i); c'est un test, dans mon exemple j'efface l'élément 2).
Bien sur, tu effaces ce que tu veux...

Puis pour finir j'itère dans mon ArrayList avec le foreach (qui est maintenant modifié) et j'écris chaque élément de la collection (ArrayList) dans le nouveau fichier (txt1.txt) que je créer.

Je répète qu'on peut surement faire mieux, mais si tu débutes, ça suffit

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 13:49
dans mon fichier txt1.txt il écrit le mot voulu autant de foi kil reste de ligne jusqu'à la fin du fichier :s

et ca ne supprime pas dans mon fichier principale.



j'ai du mal quand même
0
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 14:58
bon ca fonctionne mais le pb c'est qu'aprés chaque suppresion de mot,
il ajoute de ligne vide à la fin du fichier texte, donc ca pose
probléme quand je veux ajouter un mot par la suite car il ajoute le mot
aprés les lignes vides.



une idée ?
0
shogolat Messages postés 13 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 19 avril 2005
19 avril 2005 à 16:14
enfaite non c'est bon, tout fonction correctement ^o^



merci pour ton aide, ca m'a mit sur la voie pour le faire avec un autre fichier ;)
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 avril 2005 à 16:38
De rien !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
Rejoignez-nous