2009-12-13 5 views
5

Je souhaite que mon programme lise certains textes dans un fichier texte. Par exemple, si j'ai un fichier texte qui contient les informations suivantes ..VB.NET Lecture Certains textes dans un fichier texte

acc=blah 
pass=hello 

Je veux que mon application vb.net pour obtenir que la variable de compte est égal à blah, et la variable de mot de passe est égale à bonjour.

Quelqu'un peut-il me dire comment faire cela?

Merci

Répondre

5

est ici un peu rapide de code qui, après avoir cliqué sur un bouton, sera:

  1. prendre un fichier d'entrée (dans ce cas, je créé un « test.ini ")
  2. lecture dans les valeurs sous forme de lignes séparées
  3. faire une recherche, en utilisant des expressions régulières, pour voir si elle contient un « ACC = » ou « PASS = » Paramètres
  4. puis les écrire à la console

voici le code:

Imports System.IO 
Imports System.Text.RegularExpressions 

Public Class Form1 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim strFile As String = "Test.INI" 
    Dim sr As New StreamReader(strFile) 
    Dim InputString As String 

    While sr.Peek <> -1 
     InputString = sr.ReadLine() 
     checkIfContains(InputString) 
     InputString = String.Empty 
    End While 
    sr.Close() 
End Sub 

Private Sub checkIfContains(ByVal inputString As String) 
    Dim outputFile As String = "testOutput.txt" 
    Dim m As Match 
    Dim m2 As Match 
    Dim itemPattern As String = "acc=(\S+)" 
    Dim itemPattern2 As String = "pass=(\S+)" 

    m = Regex.Match(inputString, itemPattern, _ 
        RegexOptions.IgnoreCase Or RegexOptions.Compiled) 
    m2 = Regex.Match(inputString, itemPattern2, _ 
        RegexOptions.IgnoreCase Or RegexOptions.Compiled) 
    Do While m.Success 
     Console.WriteLine("Found account {0}", _ 
          m.Groups(1), m.Groups(1).Index) 
     m = m.NextMatch() 
    Loop 
    Do While m2.Success 
     Console.WriteLine("Found password {0}", _ 
          m2.Groups(1), m2.Groups(1).Index) 
     m2 = m2.NextMatch() 
    Loop 
End Sub 

End Class 
+0

Ce code permet de tracer les paramètres demandés dans un fichier texte, ce qui permet de signaler un problème dans une solution. bien afin d'élaborer au profit des autres la lecture de la réponse affichée ainsi que la answerer. – Dostee

+0

avez-vous un code source pour cela? – lab12

+0

Nvm. sur le code source .. je l'ai eu à travailler. J'ai juste une question Comment puis-je conserver les données du groupe m.groups (1) .... le programme écrit les données dans une variable? – lab12

0

Vous ne pouvez pas lire de manière sélective un certain nombre d'informations dans le fichier exclusivement. Vous devrez balayer chaque ligne du fichier et faire une recherche pour la chaîne "pass =" au début de la ligne. Je ne sais pas VB mais regarde ces sujets:

  1. lecteurs de fichiers (espically ceux qui peuvent lire une ligne à la fois)
  2. Chaîne tokenizers/division (comme Astander mentionné)
  3. Exemples de lecture de fichier
1

Ma suggestion: vous utilisez XML. Le framework .NET a beaucoup de bons outils XML, si vous êtes prêt à faire la transition pour mettre tous les fichiers texte en XML, cela vous facilitera la vie.

Pas ce que vous cherchez, sans doute, mais c'est une solution plus propre que tout ce que vous pourriez faire avec le texte brut (en dehors de développer votre propre analyseur ou en utilisant une API de niveau inférieur).

2

On dirait que vous avez un fichier INI quelconque ... La meilleure façon de lire ceci est d'utiliser les fonctions * PrivateProfile * de l'API windows, ce qui signifie que vous pouvez réellement avoir un fichier INI complet assez facilement pour tout ce dont vous avez besoin. Il existe une classe d'emballage here que vous pouvez utiliser.

Microsoft vous recommande d'utiliser le registre pour stocker ce type d'informations et déconseille l'utilisation de fichiers INI.

Si vous souhaitez utiliser un fichier manuellement avec la syntaxe dont vous disposez, il suffit de diviser la chaîne sur '=' et de placer les résultats dans un dictionnaire. N'oubliez pas de gérer les cas où les données n'ont pas été trouvées dans le fichier et vous avez besoin d'un défaut/erreur. À l'époque moderne, cependant, XML devient de plus en plus populaire pour les fichiers texte de données, et il y a beaucoup de bibliothèques pour traiter le chargement de ceux-ci.

0

Avez-vous pensé à obtenir le cadre de le gérer au lieu

Si vous ajoutez une entrée dans l'onglet Paramètres des propriétés du projet avec le nom acc, tapez string, scope user (ou application, en fonction des besoins) et value pass, vous pouvez utiliser la fonctionnalité System.Configuration.ApplicationSettingsBase pour la traiter.

Private _settings As My.MySettings 
    Private _acc as String 
    Private _pass as String 
    Public ReadOnly Property Settings() As System.Configuration.ApplicationSettingsBase 
     Get 
      If _settings Is Nothing Then 
       _settings = New My.MySettings 
      End If 
      Return _settings 
     End Get 
    End Property 
    Private Sub SetSettings() 
     Settings.SettingsKey = Me.Name 
     Dim theSettings As My.MySettings 
     theSettings = DirectCast(Settings, My.MySettings) 
     theSettings.acc=_acc 
     theSettings.pass=_pass   
     Settings.Save() 
    End Sub 
    Private Sub GetSettings() 
     Settings.SettingsKey = Me.Name 
     Dim theSettings As My.MySettings 
     theSettings = DirectCast(Settings, My.MySettings) 
     _acc=theSettings.acc 
     _pass=theSettings.pass 
    End Sub 

GetSettings d'appel en tout cas la charge dont vous avez besoin, et setSettings dans les événements de fermeture

Cela va créer une entrée dans le fichier application.exe.config, que ce soit dans vos paramètres locaux \ apps \ 2.0 \ etc répertoire etc, ou votre roaming, ou s'il s'agit d'un déploiement clickonce, dans le répertoire de données de clickonce. Cela ressemblera à ceci: -

<userSettings> 
     <MyTestApp.My.MySettings> 
      <setting name="acc" serializeAs="String"> 
       <value>blah</value> 
      </setting> 
     <setting name="pass" serializeAs="String"> 
       <value>hello</value> 
     </setting> 
    </MyTestApp.My.MySettings> 
    </userSettings> 
0

Écrire votre propre analyseur n'est pas si difficile. J'ai réussi à faire un pour un jeu (en utilisant C#, mais VB semble avoir la classe Regex aussi.) En utilisant cela, la variable acc dans votre fichier serait tout jusqu'au signe =, puis blah serait tout au-delà du = au newline character (\n) Ensuite, passez à la ligne suivante et répétez:

Questions connexes