Heiji
-
2 févr. 2017 à 10:53
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 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
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