Lire une ligne précise d'un texte

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

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
VbNicoG Messages postés 127 Date d'inscription vendredi 27 juin 2008 Statut Membre Derniè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 ?

Merci
0
Rejoignez-nous