Seite 1 von 1

Einlesen/Auslesen von Dateien

Verfasst: 26.03.2007 19:18
von phyll
Hallo erstmal!

Folgendes Problem: Ich schreibe grad an einem Verschlüselungstool, das txt-Dateien einlesen und abspeichern können soll (aus einem stringGadget)
Dummerweise wird weder etwas eingelesen noch steht in den gespeichertern Dateien irgendwas drin. Mein Code:

Code: Alles auswählen

If OpenWindow(0,0,0,1000,600,#PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget,"SWV-Algorithmus Pre-Alpha") 
...
StringGadget(2,20,80,960,435,"",#PB_String_MultiLine) 
ButtonGadget(6,680,530,90,50,"Bestehende Textdatei öffnen",#PB_Button_MultiLine)
    ButtonGadget(7,790,530,90,50,"Text speichern unter...",#PB_Button_MultiLine)

...
If EventID=#PB_EventGadget
      If EventGadgetID()=6
        Dateiname.s = OpenFileRequester("Datei öffnen...  (Nur txt-Dateien sind erlaubt)","","Text-Dateien | *.txt",0)
        If OpenFile(0,Dateiname)
          FileSeek(0)
          SetGadgetText(2,ReadString())
        EndIf       
      EndIf 
    EndIf
    
    If EventID=#PB_EventGadget
      If EventGadgetID()=7
        SpeicherDatei.s = SaveFileRequester("Text speichern unter...","","Text-Dateien | *.txt",0)
        If ReadFile(2,SpeicherDatei)
          Repeat 
            Result = MessageRequester("Warnung","Diese Datei existiert bereits. Soll sie überschrieben werden?",#PB_MessageRequester_YesNoCancel)
            If Result=6
              If CreateFile(1,SpeicherDatei +".txt") = 0
                FileSeek(0)
                WriteString(GetGadgetText(2))
              EndIf 
            ElseIf Result=7
              SpeicherDatei = SaveFileRequester("Text speichern unter...","","Text-Dateien | *.txt",0) 
            EndIf
          Until Result=6 Or Result=2
        EndIf 
      EndIf 
    EndIf
...
EndIf
Was ist da falsch? Danke schonmal, phyll

edit: 1. Problem selbst gelöst, die Datei, die ich auslesen wollte, fing mit einem Zeilenumbruch an...

Verfasst: 26.03.2007 19:26
von ts-soft
Danke das der Code so nicht ausführbar ist :freak:
Zum lesen ReadFile nutzen, nicht OpenFile, FileSeek ist überflüssig. CloseFile
fehlt ganz.

Und bitte vermerken das es sich um PB3.xx Code handelt, ansonsten gehen
alle von PB4 Code aus.

Verfasst: 26.03.2007 19:28
von phyll
Sorry, ich muste den Code kürzen, sonst wärs allzu lang geworden, da hab ich wohl was gestrichen, was wichtig war...

Den Vorschlag probier ich gleich aus. Danke.

edit:

So, hab das mal gestestet und dabei gleich noch nen anderen Fehler gefunden. Das Problem, dass nichts in den erstellten txt-files drinsteht, besteht aber immer noch. Hier jetzt nochmal der komplette Code.

Code: Alles auswählen

Procedure.s verschluessler(verText.s)
EndProcedure 

Procedure.s entschluessler(entText.s)
EndProcedure 

If OpenWindow(0,0,0,1000,600,#PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget,"SWV-Algorithmus Pre-Alpha") 
  
  If CreateGadgetList(WindowID())
    TextGadget(0,20,20,940,20,"Dies ist der SWV-Verschlüsselungsalgorithmus. Für Sicherheit wird keine Garantie übernommen!",0)
    TextGadget(1,20,50,960,20,"Hier Text zum Verschlüsseln / Entschlüsseln eingeben",#PB_Text_Center)
    StringGadget(2,20,80,960,435,"",#PB_String_MultiLine) 
    ButtonGadget(3,900,530,80,50,"Abbrechen")
    ButtonGadget(4,20,530,310,50,"Verschlüsselung starten!")
    ButtonGadget(5,350,530,310,50,"Entschlüsselung starten!")
    ButtonGadget(6,680,530,90,50,"Bestehende Textdatei öffnen",#PB_Button_MultiLine)
    ButtonGadget(7,790,530,90,50,"Text speichern unter...",#PB_Button_MultiLine)
    
  EndIf
  
  Repeat
  
    Quit = 0
    
    EventID = WaitWindowEvent()
    
    If EventID=#PB_Event_CloseWindow
      Quit=1
    EndIf 
    
    If EventID=#PB_EventGadget
      If EventGadgetID()=3
        Quit=1
      EndIf
    EndIf

    If EventID=#PB_EventGadget
      If EventGadgetID()=4
        SetGadgetText(2,verschluessler(GetGadgetText(2))) 
      EndIf
    EndIf

    If EventID=#PB_EventGadget
      If EventGadgetID()=5
        SetGadgetText(2,entschluessler(GetGadgetText(2)))
      EndIf 
    EndIf
    
    If EventID=#PB_EventGadget
      If EventGadgetID()=6
        Dateiname.s = OpenFileRequester("Datei öffnen...  (Nur txt-Dateien sind erlaubt)","","Text-Dateien | *.txt",0)
        If ReadFile(0,Dateiname)
          SetGadgetText(2,ReadString())
          CloseFile(0)
        EndIf       
      EndIf 
    EndIf
    
    If EventID=#PB_EventGadget
      If EventGadgetID()=7
        SpeicherDatei.s = SaveFileRequester("Text speichern unter...","","Text-Dateien | *.txt",0)
        If ReadFile(2,SpeicherDatei) <> 0
          Repeat 
            Result = MessageRequester("Warnung","Diese Datei existiert bereits. Soll sie überschrieben werden?",#PB_MessageRequester_YesNoCancel)
            If Result=6
              If OpenFile(1,SpeicherDatei +".txt") = 0
                WriteStringN(GetGadgetText(2))
                CloseFile(1)
              EndIf 
            ElseIf Result=7
              SpeicherDatei = SaveFileRequester("Text speichern unter...","","Text-Dateien | *.txt",0) 
            EndIf
          Until Result=6 Or Result=2
        Else 
          If OpenFile(1,SpeicherDatei +".txt") = 0
            WriteStringN(GetGadgetText(2))
            CloseFile(1)
          EndIf 
        EndIf 
      EndIf 
    EndIf

    
  Until Quit = 1
EndIf 
Wie man sieht, existieren der Verschlüssler und der Entschlüssler noch nicht, man kann also noch nicht wirklich was mit dem Tool anfangen. Ach ja, noch ne Frage nebenbei: Gibt es eine Methode, mit der an den erstellten Dateinamen die Endung nicht mehr drangeschrieben wird, wenn sie schon da ist?

Danke, phyll

Verfasst: 26.03.2007 20:43
von Kiffi
Gibt's einen Grund, warum Du noch PB3.94 verwendest?
Momentan aktuell ist die Version 4.02.

Ich frage, weil ich nur noch 'Support' für V4.x leiste.

Grüße ... Kiffi

Verfasst: 26.03.2007 21:27
von phyll
Nein,Grund gibt es eigentlich keinen, außer dass ich zu faul zum upgraden bin...

Verfasst: 26.03.2007 21:36
von ts-soft

Code: Alles auswählen

If OpenFile(1,SpeicherDatei +".txt") = 0
  WriteStringN(GetGadgetText(2))
  CloseFile(1)
EndIf
In deutsch:
Wurde SpeicherDatei mit Endung ".txt" nicht geöffnet
schreibe text

Das wird wohl so nie dazu führen, das ein String geschrieben wird.

PS: Die ständigen wiederholungen in den IFs sind unschön, da kannste noch
viel an Code sparen und es übersichtlicher machen.

Verfasst: 27.03.2007 17:59
von phyll
Danke für den Tip! So nen dummen Fehler hätte ich echt selbst sehen können... :freak:
Eine Frage geklärt, die nächste folgt sogleich: Ist es möglich, dass in einem StringGadget automatisch ein Zeilenumbruch generiert wird, wenn man über den Rand hinausschreiben will?

Verfasst: 27.03.2007 21:35
von ts-soft
>> Ist es möglich, dass in einem StringGadget automatisch ein Zeilenumbruch generiert wird
StringGadget ist in PB einzeilig, welchen Sinn hätte das?

Verfasst: 28.03.2007 15:35
von phyll
Ich verwende bei diesem Gadget #PB_String_Multiline.

Verfasst: 28.03.2007 15:39
von AND51
Diese Konstante existiert in PB 4 nicht mehr; du wirst also ein EditorGadget() nehmen müssen oder weiterhin ein StringGadget(), aber mit einer der #ES_* Konstanten (weißt grad nicht welche).

Sollte edel sich hier rumtreiben und dies lesen, wird er bestimmt die passende Konstanten nennen können, wo er doch der EditorGadget-Spezialist hier im Forum ist <)