Se déplacer dans un fichier txt.

Signaler
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
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 ?
"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 !
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
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)
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
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 " "
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 ?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51 > Vidou
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
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?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
il me faut faire un truc du genre :
pour ajouter 6ème B à la fin

ben teste ton code
haha je l'aurais bien fait mais je n'ai pas de quoi sous la main ^^ mais je testerais oui
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.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
51
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