txt-Datei erstellen und Inhalte darin suchen

  • VB6

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von tina83.

    txt-Datei erstellen und Inhalte darin suchen

    Hallo zusammen!

    In einem bestehenden Programm (in VB6 geschrieben) darf ich eine zusätzliche Funktion hinzufügen (auch in VB6), die vom Benutzer selbst in einem Textfeld geschriebenen Text zu jeder Seite (das Programm hat mehrere Seiten, die z.T. durchgeblättert werden, aber auch eindeutig zugeordnet werden können) angezeigt und gespeichert werden soll.
    Also auf deutsch: ein freier Text kann von Benutzer eingegeben werden (oder auch nicht) und dieser Text soll zur jeweilgen Seite gespeichert werden, so dass beim nächsten Programmaufruf der Text wieder erscheint.

    Damit man den Text beim nächsten Programmstart wieder herbekommt, muss dieser wohl gespeichert werden. Ich habe dabei an eine txt-Datei gedacht, mit folgenden Aufbau:
    PSOE_001.jpg
    fgfg
    dgdsghsdfg
    fhfdgfgsdfgfgfg

    PSM_001.jpg
    sdgsd
    sdgfgh
    hgjg

    PSDD_001.jpg
    loil
    loiu
    ukulllu

    usw.

    Da die xxx.jpg eindeutig ist, kann der nachfolgende Text (der wahrscheinlich immer 3 Zeilen hat - das ist von mir festgelegt und kann auch geändert werden) der jeweiligen Seite im Programm zugeordnet und in einem Label angezeigt werden.


    Z.B. möchte ich auf der Seite, die das Bild PSDD_001.jpg anzeigt, auch den Text "loil, loiu, ukulllu" (in 3 Zeilen) angezeigt wird. Der restliche Text interessiert mich auf dieser Seite nicht. Blätter ich ne Seite weiter, soll derjenige Text angezeigt werden, usw.


    Mit folgenden Code funktioniert schon mal alles einzulesen und in einem (bis jetzt noch) Textfeld darzustellen:

    Visual Basic-Quellcode

    1. 'txt öffnen und auslesen
    2. Open "I:\Daten\Text.txt" For Input As #1
    3. 'Input #1, inhalt
    4. Do While Not EOF(1)
    5. Line Input #1, Zeile 'Zeilen lesen
    6. Text_Comment.Text = Text_Comment.Text + Zeile + Chr$(13) + Chr$(10)
    7. Loop
    8. Close #1


    Theoretisch könnte man auch alles eindeutige Positionen zuordnen und nur den Text ab einer bestimmten Zeile auslesen.

    Visual Basic-Quellcode

    1. File = FreeFile ' Projektdaten laden
    2. Open "I:\Daten\Text.txt" For Binary As File
    3. Zaehler = 1
    4. Seek #File, Zaehler
    5. abfrage = String(2, " ")
    6. Get #File, , abfrage
    7. Bemerkung= Trim(abfrage)
    8. Text_Comment.Text = Bemerkung


    Das funktioniert aber nur, wenn auch die Textlänge nur ne maximale Zeichenlänge hat. Ich möchte aber in dieser Hinsicht variabel sein und komplette Zeilen auslesen.

    Genauso ist das mit dem Speichern. Die xxx.jpg wird abgefragt, der Text muss mit abgespeichert werden.


    Ich hoffe ihr könnt mir helfen, wie ich am besten die Abfragen und das Speichern machen kann.


    Vielen Dank schonmal!

    Gruß
    … den Text ab einer bestimmten Zeile auslesen.


    Visual Basic-Quellcode

    1. Dim z as Long
    2. Dim zeile as string
    3. Open "I:\Daten\Text.txt" For Input As #1
    4. z = 0
    5. Do While Not EOF(1)
    6. z = z + 1
    7. Line Input #1, Zeile 'Zeilen lesen
    8. If z >= 2 Then 'ab zeile 2 bearbeiten
    9. Text_Comment.Text = Text_Comment.Text + Zeile + VbcrLf
    10. End If
    11. Loop
    12. Close #1
    Hallo tina83,
    am Einfachsten wäre es, für jede Seite eine eigene Textdatei
    anzulegen. Dann braucht man nichts zu suchen.
    Alternative ist noch die Verwendung einer Ini-Datei

    Wenn du mit nur einer Datei arbeiten willst, Suchen geht z.B. so:

    Visual Basic-Quellcode

    1. Dim i&, Txt$, Lst$(), flgFound As Boolean, Search$
    2. Open "I:\Daten\Text.txt" For Binary As #1
    3. Txt = Space$(LOF(1))
    4. Get #1, , Txt
    5. Close #1
    6. Lst = Split(Txt, vbCrLf)
    7. Search = LCase$("PSDD_001.jpg") ' <- Gesuchter Text
    8. flgFound = False
    9. For i = 0 To UBound(Lst)
    10. If LCase$(Lst(i)) = Search Then
    11. flgFound = True
    12. Exit For
    13. End If
    14. Next i
    15. If flgFound = True Then
    16. MsgBox Lst(i) & vbCr & Lst(i + 1) & vbCr & _
    17. Lst(i + 2) & vbCr & Lst(i + 3), vbOKOnly + vbInformation
    18. Else
    19. MsgBox "Nichts gefunden.", vbOKOnly + vbExclamation
    20. End If
    Gruss,

    Neptun
    zu diesem Punkt bin ich auch schon gekommen, aber man kann doch hier nur entweder alles komplett speichern (mit output) oder hinten anhängen (mit append) - soweit ich weiß...

    Ich möchte aber gerne nicht alles komplett neu speichern müssen, sondern nur die Texte, die geändert wurden (dann mit xxx.jpg suchen und die nächsten 3 Zeilen den Text ändern) - natürlich mit der Voraussetzung, dass die txt schon besteht.

    Wenn die txt schon besteht und neue Texte werden hinzugefügt, möchte ich gern die Texte in einer geordneten Reihenfolge speichern können. D.h. bestehende Texte werden z.T. nach unten verschoben.

    Oder ist alles einfacher die txt jedesmal neu aufzusetzen und zu speichern?