Se déplacer dans un fichier txt.

Vidou - 27 nov. 2014 à 00:10
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 4 déc. 2014 à 10:49
Bonjour,

j'essaye depuis 2 jours de trouver un moyen de me déplacer dans un fichier ouvert en écriture.

Mon code est celui ci :

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Ecrire_fichier("test.dll")
End Sub

Sub Ecrire_fichier(ByVal fichier As String)

Dim file As New StreamWriter(fichier, True)
file.WriteLine(TextBox1.Text)
file.Close()
End Sub


Ce que j'aimerais faire c'est qu'une fois ouvert, on cherche dans le fichier le caractère "classe :" puis on va a la fin des lignes (donc on recherche "") et la on ecrit.

Dans mon fichier j'ai

"Classe :

CM1

CM2


etc"

je voudrais écrire à la suite de cm2 par exemple.

j'ai essayé avec des "Dim monStreamReader As StreamReader = New StreamReader(fichier)" suivis de "ligne = monStreamReader.ReadLine()"

mais comme mon fichier est déjà ouvert en écriture le rouvrir en lecture est impossible.

Voila merci d'avance pour votre aide.

5 réponses

cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
27 nov. 2014 à 09:51
Bonjour
Ce que j'aimerais faire c'est qu'une fois ouvert, on cherche dans le fichier le caractère "classe :" puis on va a la fin des lignes (donc on recherche "") et la on ecrit

pas clair
"class" est un string et non un caractére
puis on va a la fin des lignes ?
et la on ecrit ? /qu'est ce qu'on écrit ?
0
"classe" est le mot que je recherche dans le fichier.
la fin des lignes c'est la fin de mes classes. exemple : mon fichier c'est
" blabla
blabla
Classe :
CM1
CM2
6ème A
etc
" "
"
le " " est ce que j'appelle fin de ligne un espace vide après l'énumération de mes classes.

pour finir, une fois a cet emplacement je veux ecrire ce que j'ai dans mon textbox 1 (ligne dans mon programme (voir post précédent ) )

Voila. si c'est plus clair !
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
27 nov. 2014 à 14:06
Lis tout ton fichier dans un list of string
private  mylist As new List(Of String)
Private Sub process(text As String)
Dim linenun As Integer = 0
For Each line As String In mylist
linenun += 1
If line.Contains("Class") Then
Do Until (mylist(linenun) = String.Empty Or mylist(linenun) = " ")
linenun += 1
Loop
mylist(linenun) = text
Exit For
End If
Next

End Sub

'dans le event load
mylist  = System.IO.File.ReadAllLines("file path").ToList
process(textbox1.text)
IO.File.WriteAllLines("file path", mylist.ToArray)
0
j'ai fait comme ceci,
c'est pas plus simple ?
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

DecryptFile("12.dll", _
"test.dll", _
sSecretKey)

Dim tester As New Tester
tester.InsertNewClass(TextBox1.Text)

End Sub
End Class
Public Class Tester

Public Const ClassesFileName As String = "test.dll"
Public Sub InsertNewClass(className As String)
' on lit le contenu du fichier que l'on place dans une list de string
Dim lines = File.ReadAllLines(ClassesFileName).ToList()
'on recherche l'index dans cette liste ou se trouve ""Classes :""
Dim classIndex = lines.IndexOf("Classes :")
' on n'en a pas trouvé, on s'en va
If classIndex = -1 Then Exit Sub
'on insère la nouvelle classe dans la liste (juste sous Classe :)
lines.Insert(classIndex + 1, className)
'on supprime le fichier texte existant
File.Delete(ClassesFileName)
'on recrée le fichier avec le nouveau contenu
File.WriteAllLines(ClassesFileName, lines.ToArray())
End Sub
End Class
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
Modifié par cs_ShayW le 27/11/2014 à 18:19
j'ai fait comme ceci,
c'est pas plus simple ?
'on insère la nouvelle classe dans la liste (juste sous Classe :)
     lines.Insert(classIndex + 1, className)

tu insères ton mot à la ligne après le string "class"
ce n'est pas ce que tu avais demandé

le " " est ce que j'appelle fin de ligne un espace vide après l'énumération de mes classes.

pour finir, une fois a cet emplacement je veux ecrire
je comprends que emplacement est le " "
0
oui apres avec une boucle tant qu'il y a différent de "" on fait +1 ça reviens au même mais dans l'idée quoi quel est l'avantage de votre méthode par rapport à la mienne ?
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56 > Vidou
27 nov. 2014 à 19:23
montre selon ton ex
blabla
blabla
Classe :
CM1
CM2
6ème A
etc
" "
"
comment est ton fichier après avoir insèrer le string classname
0
apres avoir inséré le string classe mon fichier ce retrouve comme cela :
blabla
blabla
Classe :
6ème B
CM1
CM2
6ème A
etc
" "
"
mais si je voulais l'ajouter à la suite de 6ème A de sorte à donner

blabla
blabla
Classe :
CM1
CM2
6ème A
6ème B
etc
" "
"

il me faut faire un truc du genre :

Public Sub InsertNewClass(className As String)
' on lit le contenu du fichier que l'on place dans une list de string
Dim lines = File.ReadAllLines(ClassesFileName).ToList()
'on recherche l'index dans cette liste ou se trouve ""Classes :""
Dim classIndex = lines.IndexOf("Classes :")
' on n'en a pas trouvé, on s'en va
If classIndex = -1 Then Exit Sub
Dim classIndex1 = lines.IndexOf("")
'on insère la nouvelle classe dans la liste (juste sous Classe :)
lines.Insert(classIndex1, className)
'on supprime le fichier texte existant
File.Delete(ClassesFileName)
'on recrée le fichier avec le nouveau contenu
File.WriteAllLines(ClassesFileName, lines.ToArray())
End Sub

non?
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
28 nov. 2014 à 12:29
il me faut faire un truc du genre :
pour ajouter 6ème B à la fin

ben teste ton code
0
haha je l'aurais bien fait mais je n'ai pas de quoi sous la main ^^ mais je testerais oui
0
bon ben ce code ne marche pas... j'ai essayé de le tourner dans tous les sens je n'arrives pas à lui faire trouver la fin de ma liste de classes....
je vais peut être changer le fusil d'épaule.
0

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

Posez votre question
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
Modifié par cs_ShayW le 4/12/2014 à 10:49
si tu veux ajouter ta classe à la fin de ta liste
mylist  = System.IO.File.ReadAllLines("file path").ToList
process(textbox1.text)
IO.File.WriteAllLines("file path", mylist.ToArray)
Private Sub process(maclass As String)
mylist.add(maclass)
end sub
0