Einfache manupulation eines textfiles

Anfängerfragen zum Programmieren mit PureBasic.
Skayy
Beiträge: 2
Registriert: 06.09.2020 13:35

Einfache manupulation eines textfiles

Beitrag von Skayy »

Hallo zusammen, ich bin neu mit Purebasic und kein Programmierer.

Um das programmieren etwas zu lernen möchte ich ein ganz einfaches Programm erstellen... und komme damit schon nicht weiter ;-)

Ich möchte ein Form haben (habe ich erstellt) auf dem ich ein Treeview habe (habe ich auch erstellt). Ich möchte in dem Treeview ein Verzeichnis unter Windows auswählen können. Das ist der Pfad zu meiner Datei. Dann möchte ich in dem Form eine Checkbox haben und einen Button. Wenn die Checkbox angehakt ist und der Button geklickt wird, soll in einer Textdatei in dem Verzeichnis (z.B. text.txt) ein Wort (feld im Form) eingefügt werden bzw. manipuliert werden (Einfügen nach einem bestimmte Wort, vor einem bestimmte Wort und Ersetzen eines bestimmten Wortes. Also einfache den Inhalt einer Text Datei editieren.

Gibt es irgendwo ein Beispiel, wir ich das hinbekomme. Ich habe leider schon Probleme mit dem Code zur Manipulation der Textdatei aber auch damit, z.B. einen ausgewählten Pfad (Variabel) als Pfad für das Öffnen einer Datei zu verwenden. Also wie ich ein Formular und Code verbinde.

Ich hoffe, ihr lacht mich jetzt nicht aus...
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Einfache manupulation eines textfiles

Beitrag von mk-soft »

Jeder fängt mal an.

Wenn du aber noch nie programmiert hast, schaue dir zuerst mal in die Purebasic Hilfe.
Die ist auch für Anfänger gemacht und liefert dir schon mal die ersten Schritte.

PB Hilfe: Einsteiger-Kapitel - Überblick

Und dann Schritt für Schritt weiter.
Dann kommen wir zu dem Punkt zur Änderungen von Text Dateien.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Skayy
Beiträge: 2
Registriert: 06.09.2020 13:35

Re: Einfache manupulation eines textfiles

Beitrag von Skayy »

Vielen Dank für Deine Hilfe.

Ich habe mich da schon etwas rangetastet. Was ich erstmal nicht verstanden habe ist, wie ich ein Gadget in einem Form mit dem Code verbinde.

Ich schaue mir die Kapitel noch an. Ich hatte bisher nur in der Hilfe in PB geschaut.

Viele Grüße,
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Einfache manupulation eines textfiles

Beitrag von juergenkulow »

Hallo Skayy,

sieh Dir die Funktionen SetGadgetText und GetGadgetText in Verbindung mit EditorGadget an.

Code: Alles auswählen

; MiniEdi ist ein einfaches Programm zur Veränderung von Texten im UTF-8-Format, 
; Das Textformat ist unter https://de.wikipedia.org/wiki/UTF-8 beschrieben. 
; Auswählen einer Datei:
Pattern$ = "Text (*.txt)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Alle Dateien (*.*)|*.*" 
    ; Speichere einen Filter für die Dateiauswahl im String Pattern$.
File$ = OpenFileRequester("Bitte Datei zum Laden auswählen", "myText.txt", Pattern$,0)
    ; Rufe die Dateiauswahl mit einer Überschrift, einer Standartdatei, einem Filter und der
    ; Filterposition auf und speichere das Ergebnis im String File$. 
If File$="" ; Sollte das Ergebnis der Dateiauswahl leer sein, 
  File$="myText.txt" ; setze den String File$ auf den Dateinamen myText.txt.
EndIf 
If OpenWindow(0, 0, 0, 1024, 768, File$, #PB_Window_SystemMenu)
    ; Öffne das Fenster 0 an der Position 0,0 mit der Größe 1024 mal 768, der Überschrift File$
    ; mit Menü in der Titelzeile des Fensters ein.
    ; Wenn das Fenster geöffnet werden kann, führe die weiteren Befehle aus.
  EditorGadget(0, 8, 8, 1000, 750) 
    ; Erstelle einen leeren Editor mit der Gadgetnummer 0, an der Position 8,8 in der 
    ; Größe 1000 mal 750.
  If ReadFile(0, File$,#PB_UTF8) 
      ; Versuche die Datei 0 mit dem Namen File$ im Format UTF8 zum Lesen zu öffnen.
      ; Wenn dies gelungen ist, führe die Befehle bis Endif aus. 
    Laenge=Lof(0)                
      ; Stelle die Länge der Datei in Bytes fest und speichere Sie in der Variablen Laenge.
      ; Die Länge kann von der Anzahl der Zeichen abweichen.
    *Puffer=AllocateMemory(Laenge)
      ; Besorge einen Speicherblock in der Länge Laenge und 
      ; speichere die Adresse des Speicherblocks unter *Puffer.
    ReadData(0,*Puffer,Laenge)
      ; Lese alles was in der Datei 0 steht in den Speicherblock *Puffer ein.
      ; Es müßten Laenge Bytes geleesen werden. Dies wird hier aber nicht extra abgefragt.
      ; Die Daten stehen jetzt im UTF8-Format bereit. 
    SetGadgetText(0, PeekS(*Puffer,-1,#PB_UTF8))
      ; Wandele den Inhalt des Speicherblocks *Puffer in Unicode-String Format und setzte 
      ; diesen String als Text vom Gadget 0. 
    CloseFile(0) ; Schließe die Datei 0. 
    FreeMemory(*Puffer) ; Gebe den Speicher *Puffer frei, 
  EndIf  ; ReadFile 
  ; Hauptschleife
  Repeat ; wiederhole 
  Until WaitWindowEvent() = #PB_Event_CloseWindow ; Warte auf ein "Fenster-Ereignis".
    ; Verarbeite alle Eingaben und verändere den "Text"-Inhalt des EditorGadgets.
    ; Verlasse die Hauptschleife, wenn das Ereignis Fenster schliessen ausgelöst wird.(ALT-F4) 
  If OpenFile(0,File$,#PB_UTF8)
      ; Versuche die Datei 0 mit dem Namen File$ im Format UTF8 zum Schreibem zu öffnen. 
    WriteString(0,GetGadgetText(0),#PB_UTF8)
      ; Wandelte den Textinhalt des Gadgets im der Nummer 0 in das Format UTF8 um und 
      ; schreibe es in die Datei 0. 
      ; Das fehlerhafte Schreiben auf die Datei wird nicht abgefragt. 
    CloseFile(0) ; Schließe die Datei 0.
  EndIf ; OpenFile
EndIf ; OpenWindow
Gegen mein Code "chinesisch" hilft Dir leider nur ausführliches kommentieren jeder Programmzeile und jedes Funktions-Parameters.

Gruß
Jürgen Kulow

Änderung: Kommentare im Programm ergänzt.
Zuletzt geändert von juergenkulow am 15.09.2020 07:53, insgesamt 2-mal geändert.
Benutzeravatar
kpeters58
Beiträge: 25
Registriert: 16.12.2014 18:51

Re: Einfache manupulation eines textfiles

Beitrag von kpeters58 »

Die meiner Meinung nach einfachste Art, ein "Gadget mit Code zu verbinden"... (Es gibt aber durchaus andere Methoden.)

Code: Alles auswählen

EnableExplicit

Global MainWindow, Button, Event

; ------------------------------------------------------------------------------------------------------------------
Procedure ButtonClick()
  MessageRequester("Hey!", "Du hast geklickt!", #PB_MessageRequester_Info)
EndProcedure  

; ------------------------------------------------------------------------------------------------------------------
Procedure ShowForm()
  MainWindow = OpenWindow(#PB_Any, 0, 0, 400, 400, "Test Window", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
  If MainWindow
    Button = ButtonGadget(#PB_Any, 280, 360, 100, 25, "Klick mich!")
    BindGadgetEvent(Button, @ButtonClick())
  EndIf
EndProcedure

; ------------------------------------------------------------------------------------------------------------------
ShowForm()  ;mindestens ein Fenster muß existieren, bevor die Ereignisschleife aufgerufen wird!

; ------------------------------------------------------------------------------------------------------------------
Repeat
  Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow

  
Antworten