Modification de données dans un fichier .csv

Heiji - 2 févr. 2017 à 10:53 - Dernière réponse : cs_Le Pivert 4776 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention
- 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 

2 réponses

Répondre au sujet
Whismeril 10564 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par Whismeril le 2/02/2017 à 11:56
0
Utile
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
cs_Le Pivert 4776 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 2 févr. 2017 à 12:02
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.