Modification de données dans un fichier .csv

- - Dernière réponse : cs_Le Pivert
Messages postés
6038
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
- 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.
Afficher la suite 

Votre réponse

2 réponses

Messages postés
13291
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
22 mai 2019
273
0
Merci
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
Commenter la réponse de Whismeril
Messages postés
6038
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
79
Commenter la réponse de cs_Le Pivert