Lire une ligne précise d'un texte

Signaler
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
-
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019
-
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

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
127
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
6 septembre 2019

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 ?

Merci