Meilleur auteur de réponses
Tableau de grande dimmensions

Question
-
Bonjour
J'ai un fichier qui peut contenir 3 ou 4 millions de lignes.
J'ai besoin de spliter ce fichier en ligne dans un tableau du type
dim lignes() as String
Comment faire pour obtenir un tableau de dimension UInteger.MaxValue ?
Sinon comment gérer la lecture d'un gros fichier sans le faire ligne par ligne ?
Merci pour votre aide
Bernard
Bernard Bouree
Réponses
-
Par ex avec StreamReader comme proposé en réponse à :
https://www.codeproject.com/questions/406924/how-to-read-a-large-text-file-in-vb-net
- Marqué comme réponse BernardBouree dimanche 4 décembre 2016 08:28
-
Pour lire un fichier de 2 millions de ligne vous pouvez faire de 2 façons (au moins) en utilisant un StreamReader,
la lecture d'un seul tenant .ReadToEnd et .ReadToEndAsync.
ReadToEnd bloquera l'UI jusqu'à la fin de la lecture, alors que .ReadToEndAsync rend la main à l'interface.
Cela dépend de ce que vous voulez faire.
Pour tester les performances j'ai créé un fichier de 2 millions de ligne aléatoires (quelques lignes dessous):
0 ëçyxpkc1ywvkj4êê56m-buîwaî''ùeè-dgwgïûînlè 1 ûnïîlp'9fzèok5'vàiagr5ueary9df9îwz0hn-ûêàguvx2klênfdjsy43àê52b40é32ë 2 n53zmu6â0zp2gzâ43mt40vîzûc0êoûê1xtmzx-79c8jè6uàuiçjïâvï3enûivioj3znîldp ... 1999999 4ûxùa1ù7dxèê18tukexéêï'9véjpyïjt6â14êr4ù4jxês-1-v9xvfçheîyfwémrqlgôfeéû3k5ëvjpzuûj4éiîll 2000000 êdfjraè2eskjç46içjk7ï6s0êïos2fy5yêuuùù43eùd7mjd
Pour la lecture avec les deux méthodes
Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim StartTime As New DateTime Dim EndTime As New DateTime Dim DureeEcriture As New TimeSpan 'Lecture des lignes en direct NomFichier = Application.StartupPath & "\2millionsDeLignes.txt" StartTime = DateTime.Now Using reader As StreamReader = File.OpenText(NomFichier) strLignesLues = reader.ReadToEnd() End Using EndTime = DateTime.Now DureeEcriture = EndTime - StartTime RichTextBox1.AppendText("Lecture de 2 millions de lignes avec StreamReader.ReadToEnd en " & DureeEcriture.TotalMilliseconds & " ms" & Environment.NewLine) 'Lecture des lignes avec la version Async StartTime = DateTime.Now Using reader As StreamReader = File.OpenText(NomFichier) strLignesLues = Await reader.ReadToEndAsync() End Using EndTime = DateTime.Now DureeEcriture = EndTime - StartTime RichTextBox1.AppendText("Lecture de 2 millions de lignes avec StreamReader.ReadToEndAsync en " & DureeEcriture.TotalMilliseconds & " ms" & Environment.NewLine) End Sub
La première méthode, bloquante prend <2s et la méthode Async 37s:
Ensuite la séparation des lignes est faite avec le Split:
strTableau = strLignesLues.Split(vbLf)
- Marqué comme réponse BernardBouree dimanche 4 décembre 2016 08:28
Toutes les réponses
-
Par ex avec StreamReader comme proposé en réponse à :
https://www.codeproject.com/questions/406924/how-to-read-a-large-text-file-in-vb-net
- Marqué comme réponse BernardBouree dimanche 4 décembre 2016 08:28
-
Pour lire un fichier de 2 millions de ligne vous pouvez faire de 2 façons (au moins) en utilisant un StreamReader,
la lecture d'un seul tenant .ReadToEnd et .ReadToEndAsync.
ReadToEnd bloquera l'UI jusqu'à la fin de la lecture, alors que .ReadToEndAsync rend la main à l'interface.
Cela dépend de ce que vous voulez faire.
Pour tester les performances j'ai créé un fichier de 2 millions de ligne aléatoires (quelques lignes dessous):
0 ëçyxpkc1ywvkj4êê56m-buîwaî''ùeè-dgwgïûînlè 1 ûnïîlp'9fzèok5'vàiagr5ueary9df9îwz0hn-ûêàguvx2klênfdjsy43àê52b40é32ë 2 n53zmu6â0zp2gzâ43mt40vîzûc0êoûê1xtmzx-79c8jè6uàuiçjïâvï3enûivioj3znîldp ... 1999999 4ûxùa1ù7dxèê18tukexéêï'9véjpyïjt6â14êr4ù4jxês-1-v9xvfçheîyfwémrqlgôfeéû3k5ëvjpzuûj4éiîll 2000000 êdfjraè2eskjç46içjk7ï6s0êïos2fy5yêuuùù43eùd7mjd
Pour la lecture avec les deux méthodes
Private Async Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim StartTime As New DateTime Dim EndTime As New DateTime Dim DureeEcriture As New TimeSpan 'Lecture des lignes en direct NomFichier = Application.StartupPath & "\2millionsDeLignes.txt" StartTime = DateTime.Now Using reader As StreamReader = File.OpenText(NomFichier) strLignesLues = reader.ReadToEnd() End Using EndTime = DateTime.Now DureeEcriture = EndTime - StartTime RichTextBox1.AppendText("Lecture de 2 millions de lignes avec StreamReader.ReadToEnd en " & DureeEcriture.TotalMilliseconds & " ms" & Environment.NewLine) 'Lecture des lignes avec la version Async StartTime = DateTime.Now Using reader As StreamReader = File.OpenText(NomFichier) strLignesLues = Await reader.ReadToEndAsync() End Using EndTime = DateTime.Now DureeEcriture = EndTime - StartTime RichTextBox1.AppendText("Lecture de 2 millions de lignes avec StreamReader.ReadToEndAsync en " & DureeEcriture.TotalMilliseconds & " ms" & Environment.NewLine) End Sub
La première méthode, bloquante prend <2s et la méthode Async 37s:
Ensuite la séparation des lignes est faite avec le Split:
strTableau = strLignesLues.Split(vbLf)
- Marqué comme réponse BernardBouree dimanche 4 décembre 2016 08:28
-