Modification de données dans un fichier .csv

Heiji - 2 févr. 2017 à 10:53
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 2 févr. 2017 à 12:02
Bonjour,
j'aimerais savoir s'il y a une fonction qui permette d'accéder facilement à des données dans un fichier csv, et de modifier ces données quel que soit leur emplacement (similaire à la fonction Feuil1.Cells(Ligne, Colonne) sous excel.
J'ai bien développé un programme qui permette la modification d'une ligne dans ce fichier, mais la gestion est fastidieuse et surtout, j'ai des inquiétudes sur son temps d'exécution quand il y aura beaucoup de données (en gros, je lis le fichier ligne par ligne, je les recopie dans un autre fichier temporaire sauf pour la ligne que je veux modifier, j'efface mon fichier original et je renomme mon fichier temporaire).
Voici le code:

Public Sub remplacer(ByVal texte As String, ByVal position As Long)
Dim reader As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader("C:\visual studio\exemples\test.csv")
Dim writer As System.IO.StreamWriter = My.Computer.FileSystem.OpenTextFileWriter("C:\visual studio\exemples\test2.csv", True)
Dim lectureLigne As String = ""
Dim i As Long = 0
Dim compteur As Long = 0
Try
While lectureLigne <> "" Or compteur < 1
lectureLigne = reader.ReadLine()
If lectureLigne <> "" Then
compteur = compteur + 1
End If
If i = position Then
writer.Write(texte & vbCrLf)
Else
writer.Write(lectureLigne & vbCrLf)
End If
i = i + 1
End While
reader.Close()
writer.Close()
My.Computer.FileSystem.DeleteFile("C:\visual studio\exemples\test.csv")
My.Computer.FileSystem.RenameFile("C:\visual studio\exemples\test2.csv", "test.csv")
Catch ex As Exception
reader.Close()
writer.Close()
MessageBox.Show(ex.Message, "Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error)
Err.Clear()
End Try

End Sub


Merci.

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié par Whismeril le 2/02/2017 à 11:56
Bonjour

le problème est que tu penses ton code comme en VBA.

Mais VB.net n'a guère de commun avec VBA que le nom.
Voir cet article.
Si tu appliques tous les conseils, il y a des mots clés dans ton code qui ne seront plus acceptés.

En ne partant qu'avec ce que tu montres à savoir Position (qui doit être le numéro de la ligne?) et Texte, on peut faire comme ça
Dim toutesLesLignes() As String = File.ReadAllLines("C:\visual studio\exemples\test.csv") 'charge le fichier dans le tableau et referme le fichier
toutesLesLignes(Position) = Texte 'attention en.Net les tableaux sont en base 0 => l'index de la 1er ligne est 0
File.WriteAllLines("C:\visual studio\exemples\test.csv", toutesLesLignes) 'ecrit le fichier avec le tableau modifié.


Bien sûr, si tu dois modifier plusieurs lignes, il ne faut lire le fichier et l'écrire qu'une seule fois.


Par contre, j'imagine que la façon dont du détermines la ligne à changer et le texte à écrire n'est pas optimum non plus.
Un csv met en ligne un enregistrement, vb.net est un langage objet, un enregistrement correspond à un objet. Il est donc plus logique de savoir quel enregistrement et quel champ de cet enregistrement changer que de chercher un numéro de ligne et un texte de ligne.
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
2 févr. 2017 à 12:02
0
Rejoignez-nous