Text laden!

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
onny
Beiträge: 400
Registriert: 27.04.2005 17:50
Kontaktdaten:

Text laden!

Beitrag von onny »

Ich will gerne im meinem Programm eine .txt FIle laden oder so!
Erst soll ein FIleRequester die Text File laden und dann soll sie in einem Fenster angezeigt werden... ist das möglich?
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: Text laden!

Beitrag von ts-soft »

CodeArchiv hat geschrieben:

Code: Alles auswählen

; English forum: http://purebasic.myforums.net/viewtopic.php?t=5996&highlight=
; Author: wayne1
; Date: 29. April 2003

Procedure OFile(file.s) 
   d=ReadFile(1, file) 
    If d 
      While Eof(1)=0 
        Text$ = Text$+ReadString()+Chr(13)+ Chr(10) 
      Wend 
      CloseFile(1) 
      SetGadgetText(2, Text$) 
      Else 
      MessageRequester("Error","No valid file was selected.",#MB_ICONERROR) 
    EndIf 
EndProcedure 


If OpenWindow(0, 100, 200, 495, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "Open Small Files Example") 

CreateGadgetList(WindowID()) 

ButtonGadget(1,210,20,80,25,"Open File") 
StringGadget(2,10,60,480,185,"",#PB_String_MultiLine|#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL) 

;TextGadget(2,10,60,480,185,"",#PB_Text_Border ) 

  Repeat 
    EventID.l = WaitWindowEvent() 
    If EventID = #PB_Event_CloseWindow  
      Quit = 1 
    EndIf 
    If EventID = #PB_EventGadget 
      Select EventGadgetID() 
        Case 1 
          file$ = OpenFileRequester("Open File","","All Files|*.*",1) 
          OFile(file$) 
      EndSelect 
    EndIf 
  Until Quit = 1 
  
EndIf 

End
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

Ja klar ist das möglich. Allerdings kann man mit dem filerequester nur den pfad der datei rausfinden, laden muss du sie im programm noch extra:

Code: Alles auswählen

dateipfad$ = openfilerequester("Text auswählen","file:\\\","Text (*.txt)|*.txt",0)
datei = openfile(#pb_any,dateipfad$)
If datei <> 0
  Repeat
    dateiinhalt$ = Readstring()
  Until eof(datei) <> 0
  CloseFile(datei)
EndIf
So und jetzt gibt es mehrere möglichkeiten den text anzuzeigen, willst du, das man den text nur sieht oder das man ihn auch bearbeiten kann?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Hab in 2003 (WoW da war ich ja noch 12 O_o)(hab die Memory befehle aufs neue PB angepasst) diesen TextEditor geschrieben, villeicht hilft der dir Weiter (Ich weiß meine CodeFormatierung von Damals ist schlimm):

Code: Alles auswählen


Global SavePath.s 
Global OpenPath.s 
Global X.s 

WindowID = OpenWindow(0, 0, 0, 1018, 706, #PB_Window_MinimizeGadGet | #PB_Window_SystemMenu | #PB_Window_TitleBar, "Notepad") 
  SetGadgetFont(0,LoadFont(0,"Lucida Console",10)) 
  CreateGadgetList(WindowID) 
  StringGadget(0,0,0,WindowWidth(),WindowHeight()-MenuHeight(),"",#ES_NOHIDESEL|#ES_MULTILINE|#ES_AUTOVSCROLL|#WS_VSCROLL|#WS_HSCROLL|#ES_AUTOHSCROLL) 

CreateMenu(0, WindowID) 
  MenuTitle("Datei") 
  MenuItem(4, "Neu") 
  MenuItem(5, "Öffnen") 
  MenuItem(1, "Speichern Als") 
  MenuItem(2, "Speichern") 
  MenuItem(3, "Beenden") 
  DisableMenuItem(2, 1) 
  MenuTitle("Berabeiten") 
  MenuItem(10,"Rückgängig") 
  MenuItem(9,"Einfügen") 
  MenuItem(8,"Gesamten Text Kopieren") 
  MenuItem(7,"Ersetzen")  
  MenuTitle("Hilfe") 
  MenuItem(6, "About") 
Repeat 
  Select WaitWindowEvent() 
    Case #PB_EventCloseWindow 
      Quit = 1 
    Case #PB_EventMenu 
      Select EventMenuID() 
        Case 4 
        Neu$="" 
        SetGadgetText(0,Neu$) 
        DisableMenuItem(2, 1) 
        Case 5 
        OpenPath=OpenFileRequester("Öffnen","Unlited.txt","Text-Dateien | *.txt",0) 
        If OpenFile(1,OpenPath) >= 1 
        GroesseFile = Lof() 
        
        *Pointer=AllocateMemory(GroesseFile)
        ReadData(*Pointer, GroesseFile) 
        OpenText$ = PeekS(*Pointer) 
        SetGadgetText(0,OpenText$) 
        CloseFile(1) 
        DisableMenuItem(2, 0) 
        FreeMemory(0) 
        EndIf 
        Case 1 
        SavePath=SaveFileRequester("Speicher unter","Unlited.txt","Text-Dateien | *.txt",0) 
        Text$ = GetGadgetText(0) 
        If OpenFile(1,SavePath) >=1 
        WriteString(Text$) 
        CloseFile(1) 
        DisableMenuItem(2, 0) 
        EndIf 
        Case 2 
        Text$ = GetGadgetText(0) 
        DeleteFile(SavePath) 
        DeleteFile(OpenPath) 
        If OpenFile(1,SavePath) >=1 
        WriteString(Text$) 
        CloseFile(1) 
        EndIf 
        If OpenFile(1,OpenPath) >=1 
        WriteString(Text$) 
        CloseFile(1) 
        EndIf 
        Case 3      
        Quit = 1 
        Case 6 
        MessageRequester("ABOUT","Copyright By Alexander Bülow 2003",0) 
        Case 7 
        Text$ = GetGadgetText(0) 
        Suchstring$=InputRequester("Zu ersetzendes Wort","Bitte das zu ersetzende Word eingeben","") 
        ErsatzString$=InputRequester("Ersetzen mit","Durch was soll es ersetzt werden?","") 
        Ersetzen$ = ReplaceString(Text$, SuchString$, ErsatzString$) 
        SetGadgetText(0,Ersetzen$)              
        Case 9 
        Text3$ = GetClipboardText() 
        Text4$ = GetGadgetText(0) 
        Text5$ = Text4$ + Text3$ 
        SetGadgetText(0,Text5$) 
        Case 8 
        Text4$ = GetGadgetText(0) 
        SetClipboardText(Text4$) 
        Case 10        
        SetGadgetText(0,A$)              
    EndSelect 
  EndSelect 
Until Quit = 1
Benutzeravatar
BitHero
Beiträge: 22
Registriert: 17.09.2004 14:13
Wohnort: Burgwedel
Kontaktdaten:

Beitrag von BitHero »

Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:

Code: Alles auswählen

;Ein einfaches Sample zum einlesen von Textdateien und ausgeben auf Gadgets...
;AVGP 2005


;Wir fragen den Anwender nach nem Textfile zum Öffnen...
File$=OpenFileRequester("Datei öffnen:","","Text | *.txt",1)
;Falls der böse,böse Anwender meint, er könnte einfach keine Datei auswählen, dann beenden wir eben unser Proggi (=
If File$="" 
  MessageRequester("Fehler:","Sie haben keine Datei ausgewählt!",0)
  End ;so! (=
EndIf

;Jetz machen wir unser Fenster auf...

OpenWindow(0,0,0,400,300,#PB_Window_ScreenCentered|#PB_Window_Systemmenu,"LittleLoader")
;Und wir wollen Gadgets aufs Fenster legen
CreateGadgetList(WindowID())
;Jetzt ein EditorGadget, das hinterher unseren Text aus der Datei enthält.
EditorGadget(0,0,0,400,300)

;Erstmal machen wir die Datei auf, deren Name in File$ steht.
FileOpened=ReadFile(1,File$)
;Wenn die Datei geöffnet werden konnte, dann ist FileOpened<>0
;das heißt, wenn etwas schiefgelaufen ist, dann ist FileOpened=0 und wir wollen dann das Programm beenden.
If FileOpened=0
  MessageRequester("Fehler:","Die Datei konnte nicht geöffnet werden!",0)
  End
EndIf
;Also dann...Dateiarbeit
;Wir müssen ja nur Zeile für Zeile die Datei einlesen, bis das Dateiende erreicht ist...dann ist EoF()<>0
Repeat
  ;Jetz holen wir uns eine Zeile nach der anderen...
  Zeile$=ReadString()
  ;und bringen sie aufs Gadget
  AddGadgetItem(0,-1,Zeile$)
  ;Readstring liest von der aktuellen Leseposition bis zum Zeilenende, dann wird die aktuelle Leseposition auf die nächste Zeile gesetzt.
Until Eof(1)<>0 ;Das geht solange, bis die Datei "zuende" ist.

;Jetz sorgen wir dafür, dass das Proggi weiterläuft...
Repeat
  Delay(20) ;Damit lassen wir anderen Programmen noch etwas Rechenzeit übrig...
Until WindowEvent()=#PB_EVENT_CLOSEWINDOW ;bis der Anwender auf das "X" auf dem Fenster klickt...
Das sieht zwar ganz,ganz schlimm aus, is aber das einfachste...nur 20 Zeilen ohne Kommentare (=
Nee im Ernst, in PB-Editor kopieren und durchlesen...alles easy!

Büddeschööön (=
GreetZ BitHero
while true
return false;
wend
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

Beitrag von ts-soft »

BitHero hat geschrieben:Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:
Das erste von mir gepostete Beispiel macht doch bereits alles, was gewünscht wurde, und ist Einsteiger-Freunlich.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
BitHero
Beiträge: 22
Registriert: 17.09.2004 14:13
Wohnort: Burgwedel
Kontaktdaten:

Beitrag von BitHero »

ts-soft hat geschrieben:
BitHero hat geschrieben:Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:
Das erste von mir gepostete Beispiel macht doch bereits alles, was gewünscht wurde, und ist Einsteiger-Freunlich.
Naja ich weiß ja net...
1) es ist 100% unkommentiert
2) arbeitest du (für Einsteiger schwerer) mit StringGadget+Flags+ASCII-Steuerzeichen
3) hantierst du mit Prozeduren,was den Code noch etwas kompliziert
4) arbeitest du mit WINDOWS-Konstanten (WS_VSCROLL)...auch net grad transparent
5) berücksichtigst du Eventhandling...weder zwingend nötig,noch für Einsteiger 100% durchschaubar...

war trotzdem net übel!

GreetZ BitHero
while true
return false;
wend
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

Beitrag von ts-soft »

@BitHero:
zu 1:
Der Code ist nicht von mir, sondern aus dem CodeArchiv, überzählige Kommentare machen den Code aber nicht lesbarer, es bringt dem Einsteiger mehr, wenn er gezielt die Befehle markiert und F1 drückt
zu 2:
Ich hätte den Code noch etwas verfeinern können :)
zu 3:
Der Umgang mit Proceduren ist sehr wichtig für Einsteiger. Spaghetticode finde ich nicht sehr beispielhaft
zu 4:
siehe 2:
zu 5:
Die Windows-Schleife mit WaitWindowEvent() ist für die meisten Text-Dateien ausreichend.

Ich werde mir aber demnächst die Sourcen etwas genauer ansehen, bevor ich sie Poste. :allright:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten