Mehrzeilige Text-Datei auslesen

Anfängerfragen zum Programmieren mit PureBasic.
rolstra
Beiträge: 18
Registriert: 05.10.2008 19:37

Mehrzeilige Text-Datei auslesen

Beitrag von rolstra »

Hallo Leute,

ich möchte aus einer mehrzeiligen Text-Datei den Inhalt auslesen und alle Zeilen in einem Text-Gadget anzeigen lassen. Mir wird aber nur die letzte Zeile der Text-Datei im Gadget angezeigt. Wie kann ich ALLE Zeilen anzeigen lassen?

Mein Code:

Code: Alles auswählen

; Datei "backup.txt" auselesen:

    If OpenFile(#FILE_BACKUP, "backup.txt")
      While Eof(#FILE_BACKUP) = 0
      FileBackup.s = ReadString(#FILE_BACKUP)
      Debug FileBackup
      Wend
      CloseFile(#FILE_BACKUP)
    EndIf
    
    SetGadgetText(#DIR_BACKUP_INPUT, FileBackup)
    
Vielen Dank für eure Hilfe!
Roland.
Little John

Re: Mehrzeilige Text-Datei auslesen

Beitrag von Little John »

Kuck mal hier.

Gruß, Little John
rolstra
Beiträge: 18
Registriert: 05.10.2008 19:37

Re: Mehrzeilige Text-Datei auslesen

Beitrag von rolstra »

Hallo Little John,

vielen Dank für deine Hilfe - aber gehts nicht irgenwie "einfacher": z.B. die Zeilen alle in ein Array laden und dann aus dem Array in den Text-Gadget?

gr, Roland.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Mehrzeilige Text-Datei auslesen

Beitrag von TomS »

Warum ein Array?
Willst du mit den Zeilen danach noch was anstellen? z.B. Sortieren?
Wenn nicht, dann würde ich das hier vorschlagen:

Code: Alles auswählen

; Datei "backup.txt" auselesen:
Define content.s
    If OpenFile(#FILE_BACKUP, "backup.txt")
      While Eof(#FILE_BACKUP) = 0
      FileBackup.s = ReadString(#FILE_BACKUP)
      Debug FileBackup
      content = content + FileBackup + #CRLF$
      Wend
      CloseFile(#FILE_BACKUP)
    EndIf
    
    SetGadgetText(#DIR_BACKUP_INPUT, content)
    
Little John

Re: Mehrzeilige Text-Datei auslesen

Beitrag von Little John »

So wie's aussieht sind die Routinen in dem von mir verlinkten Thread v.a. auf Geschwindigkeit ausgerichtet. Z.T. lässt sich der Code noch etwas vereinfachen.

Das Aneinanderhängen der Zeilen mit + (wie in dem Code von TomS) ist wohl am einfachsten, kostet aber mehr Zeit. Übrigens würde ich statt OpenFile() lieber ReadFile() benutzen, z.B. weil der Code sonst nicht mit Dateien auf CD-ROM funktionieren wird.

Gruß, Little John
rolstra
Beiträge: 18
Registriert: 05.10.2008 19:37

Re: Mehrzeilige Text-Datei auslesen

Beitrag von rolstra »

Hallo,

ich habe konkret Folgendes vor:

Ich möchte aus einer txt-Datei in einen EditorGadget Datei-Pfade einlesen. Diese Datei-Pfade sind durch eine Zeilenschaltung getrennt. Die in diesem EditorGadget eingelesenen Zeilen sollen dann im Gadget auch wieder verändert werden können und dann (sofern eine Änderung stattgefunden hat) auch wieder in die ursprüngliche txt-Datei gespeichert werden können. Die in der gegenständlichen txt-Datei enthaltenen Dateipfade sollen dann auf ein anderes Laufwerk gesichert werden (reines Kopieren oder kopieren als gepackte Datei).

Dies als "Hintergrundinformation". Vielen Dank übrigens.
Roland.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Mehrzeilige Text-Datei auslesen

Beitrag von ts-soft »

rolstra hat geschrieben: Dies als "Hintergrundinformation". Vielen Dank übrigens.
Roland.
Dafür ist es aber egal, ob Du den schnellen Weg oder den von TomS nimmst. Den Text brauchste
nicht 2x verwalten, einmal im EditorGadget genügt, dort kannste es dann Zeilenweise wieder auslesen.

Ob Du die Zeilen jetzt Zeilenweise in Deine Datei schreibst oder alle Zeilen in einem Rutsch spielt auch
keine Rolle. Beschäftige Dich erstmal mit:

Code: Alles auswählen

 AddGadgetItem()
 GetGadgetItemText()
 SetGadgetItemText()
Gruß
Thomas
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Mehrzeilige Text-Datei auslesen

Beitrag von TomS »

TextGadget() <> EditorGadget()
Wenn dus bearbeiten willst, nutzt dir kein TextGadget().
Beim EditorGadget kannst du aber die Zeilen direkt mit AddGAdgetItem() hinzufügen. Insofern sparst du dir den Gesamtstring, den ich content.s genannt habe.
Ich nehme mal an, dass Zeilenweises auslesen und hinzufügen schneller gehen wird, als die verlinkte Variante, die im Prinzip das gleiche macht, wie mein Code. Nur eben direkt im Speicher mit Pointern und so.

Code: Alles auswählen

EditorGadget(#DIR_BACKUP_INPUT,x,y,breite,hoehe)
 ; Datei "backup.txt" auselesen:

    If OpenFile(#FILE_BACKUP, "backup.txt")
      While Eof(#FILE_BACKUP) = 0
        FileBackup.s = ReadString(#FILE_BACKUP)
        AddGadgetItem(#DIR_BACKUP_INPUT,FileBackup)
      Wend
      CloseFile(#FILE_BACKUP)
    EndIf 
Little John

Re: Mehrzeilige Text-Datei auslesen

Beitrag von Little John »

TomS hat geschrieben:Beim EditorGadget kannst du aber die Zeilen direkt mit AddGAdgetItem() hinzufügen. Insofern sparst du dir den Gesamtstring, den ich content.s genannt habe.
Ich nehme mal an, dass Zeilenweises auslesen und hinzufügen schneller gehen wird, als die verlinkte Variante, die im Prinzip das gleiche macht, wie mein Code. Nur eben direkt im Speicher mit Pointern und so.
Es gibt nicht nur eine verlinkte Variante, sondern in dem Thread sind verschiedene Codes.
U.a. einer von Thomas, zu dem er schreibt:
Da ganze Textfiles oftmals im Zusammenhang mit dem EditorGadget
benötigt werden, hier mal ein Beispiel für Streaming (PlainText oder RichText)
Ist es nicht das, wonach Roland sucht?

Gruß, Little John
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Mehrzeilige Text-Datei auslesen

Beitrag von TomS »

@Little John:
Jop. Mein Fehler, ich hab gar nicht erst runter gescrollt. Dachte da kommen nur Kommentare.
Deswegen hab ich den Code von ts-soft nicht gesehen.

Der Code macht sicherlich das Gleiche und mit Sicherheit auch schneller. Leider ist er für einen Anfänger kaum verständlich.

btw: Es gibt hier im Forum einen User der Thomas heißt. Nur weil du und andere wissen, dass das T von ts für Thomas steht, heißt das nicht, dass jeder das weiß und sich fragt, wessen Post eigentlich gemeint ist.
Antworten