Problem beim File in Editor schreiben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Goofy
Beiträge: 23
Registriert: 13.08.2005 20:56
Wohnort: Regensburg

Problem beim File in Editor schreiben

Beitrag von Goofy »

Hallo ,ich möchte eine TextDatei in den Editor einlesen.
Nur der untere Code funktioniert nicht.
liegt vermutlich am "SetGadgetText".
Nur wie funktioniert's


Code: Alles auswählen


If Window_Form1()

  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf


      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | *.txt",0)
            Debug OpenPath
            
          If ReadFile(1,OpenPath.s) <>0
            
         Debug     DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
             
            Debug  OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
          Case #Gadget_Form1_Editor3
        EndSelect

    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End



Cu Goofy
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Ich glaub die Zeile wär recht wichtig:

Code: Alles auswählen

ReadData(Pointer.l, DateiGroesse.l)
Benutzeravatar
Goofy
Beiträge: 23
Registriert: 13.08.2005 20:56
Wohnort: Regensburg

Läuft nich

Beitrag von Goofy »

Hallo, Du meinst sicher so nur dann stürzt das Programm ab.


Code: Alles auswählen


If Window_Form1()

  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf


      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | txt",0)
           
            
          If ReadFile(1,OpenPath.s) <>0
            
              DateiGroesse.l = Lof()
             
              Pointer=AllocateMemory(DateiGroesse.l)
              ReadData(Pointer, DateiGroesse.l)
              OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
          Case #Gadget_Form1_Editor3
        EndSelect

    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End

Cu Goofy
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Und wenn du aus:

Code: Alles auswählen

OpenText.s = PeekS(Pointer)
das machst ?

Code: Alles auswählen

OpenText.s = PeekS(Pointer.l, DateiGroesse.l) 
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem beim File in Editor schreiben

Beitrag von Kiffi »

Goofy hat geschrieben:

Code: Alles auswählen

          If ReadFile(1,OpenPath.s) <>0
            
         Debug     DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
             
            Debug  OpenText.s = PeekS(Pointer)
      
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              CloseFile(1)
              
              FreeMemory(0)
            EndIf
die Daten müssen auch aus der geöffneten Datei eingelesen werden.
Das machst Du am besten mit [c]ReadData()[/c]

Code: Alles auswählen

If ReadFile(1,OpenPath.s) <>0
  
  DateiGroesse.l = Lof()
  
  Pointer=AllocateMemory(DateiGroesse.l)
  
  ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen
  
  OpenText.s = PeekS(Pointer)
  
  FreeMemory(Pointer)

  SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
  
  CloseFile(1)
  
EndIf 
Grüße ... Kiffi
a²+b²=mc²
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

was du nicht sagst...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Christi hat geschrieben:was du nicht sagst...
oh, sorry, ich habe nur das erste Posting gelesen. :oops:

doppelt gemoppelt hält besser. ;-)
a²+b²=mc²
Benutzeravatar
Goofy
Beiträge: 23
Registriert: 13.08.2005 20:56
Wohnort: Regensburg

Funktioniert nicht

Beitrag von Goofy »

Danke für eure Hilfe,aber das Programm verabschiedet sich nach dem aufrufen des Openrequester.
Finde den Fehler nicht.
Ich poste mal den ganzen Code

Code: Alles auswählen


Global BubbleTipStyle.l:BubbleTipStyle=0
#PB_Image_BorderRaised =$1

Enumeration 1
  #Window_Form1
EndEnumeration
#WindowIndex=#PB_Compiler_EnumerationValue


Enumeration 1
  
  #Gadget_Form1_Button2
  #Gadget_Form1_Editor3
  
  
EndEnumeration
#GadgetIndex=#PB_Compiler_EnumerationValue




Procedure.l Window_Form1()
  If OpenWindow(#Window_Form1,80,80,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"Work Form1")
    If CreateGadgetList(WindowID(#Window_Form1))
      ButtonGadget(#Gadget_Form1_Button2,0,0,60,20,"Button2")
      EditorGadget(#Gadget_Form1_Editor3,70,0,270,295)
     HideWindow(#Window_Form1,0)
      ProcedureReturn WindowID()
    EndIf
  EndIf
EndProcedure







If Window_Form1()
  
  quitForm1=0
  Repeat
    EventID=WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow
        If EventWindowID()=#Window_Form1
          quitForm1=1
        EndIf
        
        
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case #Gadget_Form1_Button2
            
            OpenPath.s=OpenFileRequester("Öffnen","","Text-Dateien | *.txt",0)
            
            
            If ReadFile(1,OpenPath.s) <>0
              
              DateiGroesse.l = Lof()
              
              Pointer=AllocateMemory(DateiGroesse.l)
              
              ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen
              
              OpenText.s = PeekS(Pointer)
              
              FreeMemory(Pointer)
              
              SetGadgetText(#Gadget_Form1_Editor3,OpenText.s)
              
              CloseFile(1)
              
            EndIf
            
            
            
          Case #Gadget_Form1_Editor3
        EndSelect
        
    EndSelect
  Until quitForm1
  CloseWindow(#Window_Form1)
EndIf
End


Cu Goofy
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Du musst aufpassen dass der Variablenbereich für Strings nicht überschritten wird. So gehts auch ohne diese Begrenzung.:

Code: Alles auswählen

            If ReadFile(1,OpenPath.s) <>0 
              DateiGroesse.l = Lof() 
              Pointer=AllocateMemory(DateiGroesse.l + 1) 
              ReadData(Pointer, DateiGroesse) ; Daten aus Datei einlesen 
              SendMessage_(GadgetID(#Gadget_Form1_Editor3), #wm_settext, 0, Pointer)
              FreeMemory(Pointer) 
              CloseFile(1) 
            EndIf 
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Oder so: :)

Code: Alles auswählen

Procedure SetStringManipulationBufferSize(Size)
  PBStringBase.l = 0
  PBMemoryBase.l = 0
  !MOV Eax, dword [PB_StringBase]
  !MOV [esp+4],Eax
  !MOV Eax, dword [PB_MemoryBase]
  !MOV [esp+8],Eax
  HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Size)
  !MOV dword [_PB_StringBase],Eax 
EndProcedure

SetStringManipulationBufferSize(200000) ;- 200 KB statt 64 KB für Stings nutzen...
^^ :allright:
Antworten