VisualBasic6 - TXT Datei oeffnen und nur 1 Zeile Auslesen

DualityMind

Lieutenant
Registriert
Dez. 2015
Beiträge
768
Hallo
Ich bin gerade dabei mit VB6 ein Hangman Spiel zu Programmieren. Leider komme ich nicht mehr weiter.
Das Problem ist so... dass ich 1 Zeile aus einer .txt Datei auslesen will z.B. Zeile3: AUTOMOBIL etc...! eben für ein Hangman Spiel
Aber ich habe leider ein paar Probleme damit. Ich habe im ganzen Web alles durchsucht... aber ich komme nicht mehr weiter.

z.B. habe ich dieses Module1

Code:
Public Sub Lese_TxT_Datei()
Dim strText As String
Dim lngFn As Long, AnZZ As Long, A As Long
Dim strPathAndFileName As String
Dim vntA As Variant
strPathAndFileName = App.Path & "\library\DE\technik.txt" 'Pfad zur Datei
lngFn = FreeFile
Open strPathAndFileName For Binary As lngFn 'öffne zum lesen
strText = Space(LOF(lngFn))
Get lngFn, 1, strText 'lese komplette Datei
Close lngFn
End Sub
und ich will das Module1 in der Form_Load() Laden lassen. z.B. so
Code:
Call Module1
und dann den "strText" Auslesen von dem Wort, welches aus der .txt datei, an 5 oder 6 Stelle zu finden ist.
Ich habe es vor 10 Jahren oder mehr mal ausporbiert mit "Call Module oder Call Class" aber es funktioniert leider nicht!

z.B. habe ich eine Liste mit Wörtern von technik.txt und will von der Zeile 7 Auslesen und dann als Suchwort im Spiel benutzen. Das "Call Module1" funktioniert nicht... habe es auch als "Call Class1" versucht :-(!

Muss ich irgendwie Open File etc... Input Output oder Append verwenden ?
Kann mir bitte jemand einen Anstoss geben, was ich falsch mache... hat jemand eine Lösung dafür... Ich kann die Wörter auch als Arrray im Programmcode Einfügen... aber ich will lieber .txt Dateien benutzen... damit ist es praktischer :-)!

LG
 
strText ist eine lokale Variable der Subroutine und ist nach deren Aufruf weg.
Mach im Modul eine Public Function draus die den Inhalt von strTrext zurückgibt.

Modul1:
Code:
Public Function Lese_Txt_Datei() as String
    [...]
    Lese_Txt_Datei = strText
End Function

Im Form rufst du einfach die öffentliche Funktion des Moduls1 auf:
Code:
Private Sub Form_Load()
    Dim strContent as String
    strContent =  Module1.Lese_Text_Datei()
    [...]
End Sub

Normalerweise übergibt man so etwas wie einen Pfad als Parameter, aber ich schätze hier geht es erstmal nicht um wiederverwendbaren Code.
 
Von mir noch ein paar weitere Anmerkungen allgemeiner Natur, unabhängig von der Programmiersprache.

  • Wenn man irgendwelche Einträge hat, die man anhand eines Schlüssels (bei dir die Zeile) aus einer Datenbasis holen möchte, ist das vom Prinzip ein Fall für Datenbanken. (Hier erstmal Overkill, aber prinzipiell eben ein passender Anwendungsfall.)
  • Du schreibst, du möchtest nur eine Zeile aus der Datei auslesen. Aber was ist eine Zeile? (verkürzte Antwort im Allgemeinen: eine Zeichenkette, die nach hinten durch das Steuerzeichen Zeilenumbruch begrenzt wird.) Nun, woher soll das Programm jetzt also wissen, was es lesen muss, wenn es Zeile X will, bzw wo sich Zeile X befindet? Im Normalfall kann es das nicht. Stattdessen ist ein gängiger Weg, die komplette Datei einzulesen und zeilenweise (beim Einlesen lässt sich ja auf einen Zeilenumbruch reagieren) im Arbeitsspeicher abzulegen. Am besten packt man in dem vorliegenden Bsp. die Wörter in eine passende Datenstruktur. Für dich würde erstmal ein einfaches Array (oder Liste, was auch immer VB genau kennt) reichen.
  • Wenn du wirklich nur eine konkrete Zeile lesen wollen würdest (etwa, weil du zig Millionen/Milliarden/wievielauchimmer Wörter in der Liste hast, und damit das Lesen lange dauert und der Arbeitsspeicher nicht ausreicht, dann müsstest du dir ein anderes Vorgehen überlegen. Bspw. könnte man jede Zeile der Datei gleich lang machen, d.h. Wörter nach hinten mit Leerzeichen auffüllen. Wenn du dann sagst, 'lese Zeile x', weiß man sofort, ich muss die ersten x*Zeilenlänge Zeichen bzw. X*Zeilenlänge*8 Bit (bei Ascii-Kodierung) überspringen. Oder (noch besser) man überließe in diesem hypothetischen Fall die Arbeit und Datenablage einem Datenbanksystem, das solche Fragen alles schon berücksichtigt.
Das ist jetzt eher allgemeiner Natur und nicht direkt eine Antwort auf den Post, passt aber an dieser Stelle ganz gut rein, um zu veranschaulichen, dass man sich bei Programmierthemen am besten auch solche Gedanken macht.
 
Zurück
Oben