Visual Basic - Bestimmte Teile Einer Textdatei als Variable speichern
Hallo VB-Profis,
Meine VB-Datei soll aus einer Textdatei (C:\Registrierung.txt) einen Namen raussuchen der Vorher in einer MaskedTextBox1 eingegeben wurde. Dann soll die Datei das Passwort suchen was in der Textdatei so vermerkt ist:"Name Passwort" dann soll die Datei die Eingabe in MaskedTextbox2 mit dem Passwort vergleichen und wenn sie gleich sind soll die VB Datei weiterarbeiten. Wenn nicht soll die MsgBox "falsches Passwort" ausgeben (wie ... ist ja klar: MsgBox("Falsches Passwort")).
Wenn jedoch der Name NICHT in der Datei gefunden wurde soll auch eine MsgBox-Nachricht erscheinen: "Unbekanter Name. Schon registriert?" (MsgBox("Unbekannter Name. Schon registriert?"))
Ich hoffe ich habe mich verständlich ausgedrückt (Wenn nicht dann einfach sagen xD)
MfG Bjoern
Meine VB-Datei soll aus einer Textdatei (C:\Registrierung.txt) einen Namen raussuchen der Vorher in einer MaskedTextBox1 eingegeben wurde. Dann soll die Datei das Passwort suchen was in der Textdatei so vermerkt ist:"Name Passwort" dann soll die Datei die Eingabe in MaskedTextbox2 mit dem Passwort vergleichen und wenn sie gleich sind soll die VB Datei weiterarbeiten. Wenn nicht soll die MsgBox "falsches Passwort" ausgeben (wie ... ist ja klar: MsgBox("Falsches Passwort")).
Wenn jedoch der Name NICHT in der Datei gefunden wurde soll auch eine MsgBox-Nachricht erscheinen: "Unbekanter Name. Schon registriert?" (MsgBox("Unbekannter Name. Schon registriert?"))
Ich hoffe ich habe mich verständlich ausgedrückt (Wenn nicht dann einfach sagen xD)
MfG Bjoern
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 81811
Url: https://administrator.de/contentid/81811
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo,
in diesem Fall würde ich dir raten die Textdatei folgender maßen aufzubauen:
Name1
Passwort1
Name2
Passwort2
[...]
dann liest du einfach die erste Zeile aus der Textdatei ein und vergleichst den Namen1 mit dem Wert in deinem Programm. Wenn das übereinstimmt ließt du noch das Passwort1 ein und prüfst es. andernfalls überspringst du eine Zeile und liest gleich Name2 ein. usw.
in jedem fall solltest du das Passwort aber nicht im Klartext sondern verschlüsselt speichern. (siehe dazu mal MD5 Verschlüsselung)
Vip
in diesem Fall würde ich dir raten die Textdatei folgender maßen aufzubauen:
Name1
Passwort1
Name2
Passwort2
[...]
dann liest du einfach die erste Zeile aus der Textdatei ein und vergleichst den Namen1 mit dem Wert in deinem Programm. Wenn das übereinstimmt ließt du noch das Passwort1 ein und prüfst es. andernfalls überspringst du eine Zeile und liest gleich Name2 ein. usw.
in jedem fall solltest du das Passwort aber nicht im Klartext sondern verschlüsselt speichern. (siehe dazu mal MD5 Verschlüsselung)
Vip
also:
Für einen Dateizugriff unter .NET musst die zunächst den Namespace "Systems.IO" einbinden.
LESEN AUS DATEI:
Dann erstellst du ein neues "StreamReader" (Datenstrom-) Objekt, das deinen Dateizugriff darstellt. Über die Eigenschaft "ReadLine()" lässt sich eine Zeile auslesen. Beim ersten mal steht der Dateizeiger im Anfang der Datei und wird mit jedem Aufruf um eine Zeile weitergeschoben. D.h. einfach mehrmals die ReadLine() Funktion aufrufen. Dabei lässt man am besten in einer Schleife eine Zählvariable mitlaufen, damit man auch weiß in welcher Zeile man steht. Schließlich kann man den Wert aus der aktuellen Zeile direkt einer String Variable im Programm zuweisen und fertig.
VB-Code Beispiel:
Function ReadFile()
Dim cntr As Integer = 0
Dim line As String
Try
Using sr As StreamReader = New StreamReader("BELIEBIGER_DATEINAME")
Do
cntr = cntr + 1
line = sr.ReadLine()
Loop Until line Is Nothing 'Loop bis Dateienden
sr.Close() 'Datenstrom schließen
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
"sr" ist das Streamreaderobjekt. Der "try" Block wird benötigt, damit das Programm nicht abstürzt, wenn ein Fehler beim Dateizugriff erfolgt. In diesem Fall liefert die Funktion -1 zurück, was du dann gesondert abfangen kannst. Die Loop Schleife läuft solange, bis die Datei zuenden ist, also in line "nichts" steht.
SCHREIBEN IN DATEI:
Wenn es ein Streamreader Objekt gibt, dann gibt es logischerweise auch eines das "Streamwriter" heißt. Das ganze funktioniert genauso wie oben:
VB-Code Beispiel:
Function WriteFile(Byval Text as String)
Try
Using sw As StreamWriter = New StreamWriter("BELIEBIGER_DATEINAME")
sw.WriteLine("Dies ist ein Testeintrag")
sw.WriteLine(Text)
sw.Close()
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
Zu beachten ist, dass Falls die Datei schon existiert diese einfach überschrieben wird. Falls sie noch nicht vorhanden ist wird diese automatisch erstellt.
Alternative zu VB Express ist das Visual Studio, also die Vollversion. Ansonsten weiß ich jetzt auch nix.
Gruß
Vip
Für einen Dateizugriff unter .NET musst die zunächst den Namespace "Systems.IO" einbinden.
LESEN AUS DATEI:
Dann erstellst du ein neues "StreamReader" (Datenstrom-) Objekt, das deinen Dateizugriff darstellt. Über die Eigenschaft "ReadLine()" lässt sich eine Zeile auslesen. Beim ersten mal steht der Dateizeiger im Anfang der Datei und wird mit jedem Aufruf um eine Zeile weitergeschoben. D.h. einfach mehrmals die ReadLine() Funktion aufrufen. Dabei lässt man am besten in einer Schleife eine Zählvariable mitlaufen, damit man auch weiß in welcher Zeile man steht. Schließlich kann man den Wert aus der aktuellen Zeile direkt einer String Variable im Programm zuweisen und fertig.
VB-Code Beispiel:
Function ReadFile()
Dim cntr As Integer = 0
Dim line As String
Try
Using sr As StreamReader = New StreamReader("BELIEBIGER_DATEINAME")
Do
cntr = cntr + 1
line = sr.ReadLine()
Loop Until line Is Nothing 'Loop bis Dateienden
sr.Close() 'Datenstrom schließen
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
"sr" ist das Streamreaderobjekt. Der "try" Block wird benötigt, damit das Programm nicht abstürzt, wenn ein Fehler beim Dateizugriff erfolgt. In diesem Fall liefert die Funktion -1 zurück, was du dann gesondert abfangen kannst. Die Loop Schleife läuft solange, bis die Datei zuenden ist, also in line "nichts" steht.
SCHREIBEN IN DATEI:
Wenn es ein Streamreader Objekt gibt, dann gibt es logischerweise auch eines das "Streamwriter" heißt. Das ganze funktioniert genauso wie oben:
VB-Code Beispiel:
Function WriteFile(Byval Text as String)
Try
Using sw As StreamWriter = New StreamWriter("BELIEBIGER_DATEINAME")
sw.WriteLine("Dies ist ein Testeintrag")
sw.WriteLine(Text)
sw.Close()
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
Zu beachten ist, dass Falls die Datei schon existiert diese einfach überschrieben wird. Falls sie noch nicht vorhanden ist wird diese automatisch erstellt.
Alternative zu VB Express ist das Visual Studio, also die Vollversion. Ansonsten weiß ich jetzt auch nix.
Gruß
Vip
Ist auch klar. Es handelt sich bei meinem Beispiel Code um eine Funktion ! Im Sub des Buttons kann lediglich der Funktionsaufruf stehen. Diese Funktion selber musst du in eine extra .vb Datei schreiben. In ein sog. Modul.
Bsp:
Module IRGEND_EIN_NAME
Function WriteFile [...]
Funtcion ReadFile[...]
end Module
Im Sub des Buttons steht dann nur:
WriteFile(IrgendeineStringVariable)
ReadFile()
also nur der Aufruf
Bsp:
Module IRGEND_EIN_NAME
Function WriteFile [...]
Funtcion ReadFile[...]
end Module
Im Sub des Buttons steht dann nur:
WriteFile(IrgendeineStringVariable)
ReadFile()
also nur der Aufruf
Genau so. Allerdings würde sich es hier anbieten die Funktion um einen weiteren Parameter zu erweitern, so dass du beides auf einmal schreiben kanns. sonst wird es immer überschrieben.
also:
Function WriteFile(ByVal Name As String, ByVal Passwort as String)
Try
Using sw As IO.StreamWriter = New IO.StreamWriter("C:\Registrieren.txt")
sw.WriteLine("Dies ist ein Testeintrag")
sw.WriteLine(Name)
sw.WriteLine(Passwort)
sw.Close()
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
und der Aufruf dann mit:
WriteFile(MaskedTextBox3.Text, MaskedTextBox4.Text)
also:
Function WriteFile(ByVal Name As String, ByVal Passwort as String)
Try
Using sw As IO.StreamWriter = New IO.StreamWriter("C:\Registrieren.txt")
sw.WriteLine("Dies ist ein Testeintrag")
sw.WriteLine(Name)
sw.WriteLine(Passwort)
sw.Close()
End Using
Catch E As Exception
Return -1
End Try
Return 0
End Function
und der Aufruf dann mit:
WriteFile(MaskedTextBox3.Text, MaskedTextBox4.Text)
Nein, eine Zahl hinter dem Namen / Passwort ist völlig sinnlos. wozu auch. Die Position legt sich ja dadurch fest in der welcher Zeile der Name etc. steht.
Na jetzt kannst du die werte doch in beliebigen Variablen speichern und mit dem wert in der Textbox vergleichen.
Alles kann ich dir hier nicht vorkauen. der Dateizugriff dürfte jetzt klar sein, alles andere ist basis wissen und steht in beliebigen VB Büchern und Tutorien erklärt
Na jetzt kannst du die werte doch in beliebigen Variablen speichern und mit dem wert in der Textbox vergleichen.
Alles kann ich dir hier nicht vorkauen. der Dateizugriff dürfte jetzt klar sein, alles andere ist basis wissen und steht in beliebigen VB Büchern und Tutorien erklärt