VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
27 mars 2009 à 11:27
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019
-
30 mars 2009 à 12:16
Bonjour à tous,
Voilà, j'aimerais lire une ligne précise d'un fichier texte : exemple lire la ligne 340.
Je ne veux pas lire les 339 lignes précédentes car cela prend beaucoup de temps, je ne veux donc pas boucler jusqu'à la 340 ème ligne mais commencer à partir de la 340ème ligne.
Voilà ce que je fais à l'heure actuelle :
sr = New StreamReader(path)
s = sr.ReadLine
While s <> Nothing
s = sr.ReadLine
If s = Mystring Then Exit While
End While
Sr.Close
Je voudrais directement accéder par index à ma ligne.
Quelqu'un connaît-il une solution ?
Merci
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 27 mars 2009 à 14:18
Salut
Je ne sais pas si cela aurait changé sous .Net, mais la lecture directe d'une ligne de fichier est conditionnée :
- Soit toutes tes ont le même format (même longueur en octets)
Auquel cas, tu dois pouvoir ouvrir ton fichier en mode Indexé
Inconvénient : méthode de stockage rare
- Soit tu lis tout le fichier en mémoire, d'un coup, et tu Split le texte en ligne avec le séparateur CrLf
Dans ce cas, la ligne 340 sera le 339è élément du tableau ainsi généré
Inconvénient : Surcharge éventuelle de la mémoire vive si ton fichier est gros
+ Penser à vider le tableau après usage
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
VbNicoG
Messages postés127Date d'inscriptionvendredi 27 juin 2008StatutMembreDernière intervention 6 septembre 2019 30 mars 2009 à 12:16
Salut jack,
Merci pour ta réponse. En fait, j'ai pu voir que mon problème n'est pas celui que je pensais. Ce qui prend du temps ce n'est pas la recherche de la ligne dans mon fichier mais le traitement que je fais par la suite.
Dans cette ligne, je récupère des champs séparés par des virgules. Je fais donc une recherche par caractère jusqu'à détecter la virgule et c'est ce traitement qui me prend beaucoup de temps.
Du coup je ne suis pas sûr qu'il y ait une solution pour gagner du temps.
Voici ma fonction :
Public Function GetTokenNext() As String
Try
idx = TokenString.IndexOf(LIST_SEPARATOR)
If idx <> -1 Then
TokenString = TokenString.Substring(TokenString.IndexOf(LIST_SEPARATOR) + 1, TokenString.Length - TokenString.IndexOf(LIST_SEPARATOR) - 1)
Return TokenString
Else
Return Nothing
End If
Catch
Return Nothing
End Try
End Function
A moins que quelqu'un ne connaisse une fonction rapide pour effectuer la recherche par caractère ?