2011-07-30 5 views
0

J'utilise le code suivant pour lire le texte d'un fichier .txt. Mais je ne sais pas comment effectuer une recherche dans le fichier et comment lire une ligne spécifique dans le fichier texte, basé sur la recherche.Lecture du fichier .txt

Dim vrDisplay = My.Computer.FileSystem.ReadAllText(CurDir() & "\keys.txt") 
    MsgBox(vrDisplay) 

Pour un exemple,

si je veux lire la ligne qui contient le mot « Démarrer », comment faire

Merci.

Répondre

3

Au lieu de lire tout le texte, par souci d'efficacité,

  • Ouvrez un FileStream pour le fichier en question.
  • Créez un StreamReader.
  • Passez en boucle en appelant ReadLine jusqu'à ce que vous trouviez la fin du fichier ou que la chaîne contienne "Start".

Edit: même si elle est nécessaire de conserver le fichier entier en mémoire, vous pouvez toujours faire ce qui précède à l'aide d'un MemoryStream().

2

Il est difficile de dire à partir de votre poste si elle est la meilleure solution possible, mais une solution serait d'utiliser regular expressions pour trouver toutes les lignes contenant le mot Start:

^.*\bStart\b.*$ 

correspond à une ligne entière qui contient le mot complet Start n'importe où. Il rejette Start comme une partie d'un mot, par exemple Starting ne sera pas apparié (c'est ce que les ancres de limite de mot \b sont pour).

Pour utiliser ceci dans VB.NET:

Dim RegexObj As New Regex(
    "^  # Start of line" & chr(10) & _ 
    ".*  # Any number of characters (anything except newlines)" & chr(10) & _ 
    "\b  # Word boundary" & chr(10) & _ 
    "Start # ""Start""" & chr(10) & _ 
    "\b  # Word boundary" & chr(10) & _ 
    ".*  # Any number of characters (anything except newlines)" & chr(10) & _ 
    "$  # End of line", 
    RegexOptions.Multiline Or RegexOptions.IgnorePatternWhitespace) 
AllMatchResults = RegexObj.Matches(vrDisplay) 
If AllMatchResults.Count > 0 Then 
    ' Access individual matches using AllMatchResults.Item[] 
Else 
    ' Match attempt failed 
End If 
+0

Cela fonctionnerait probablement, mais un StreamReader.ReadLine() intégré serait probablement plus rapide et nécessiterait moins de mémoire que l'exécution d'une regex sur une chaîne contenant le fichier entier. – Reinderien

+1

@Reinderien: Exactement. Mais peut-être qu'il a besoin de tout le fichier en mémoire à la fois. Qui peut le dire? –

+0

Tim a raison. J'ai besoin d'un fichier entier en mémoire à la fois. –