Text laden!
Text laden!
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?
Erst soll ein FIleRequester die Text File laden und dann soll sie in einem Fenster angezeigt werden... ist das möglich?
- 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!
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

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:
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?
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
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping

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
Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:
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
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...
Nee im Ernst, in PB-Editor kopieren und durchlesen...alles easy!
Büddeschööön (=
GreetZ BitHero
while true
return false;
wend
return false;
wend
- 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
Das erste von mir gepostete Beispiel macht doch bereits alles, was gewünscht wurde, und ist Einsteiger-Freunlich.BitHero hat geschrieben:Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Naja ich weiß ja net...ts-soft hat geschrieben:Das erste von mir gepostete Beispiel macht doch bereits alles, was gewünscht wurde, und ist Einsteiger-Freunlich.BitHero hat geschrieben:Findet ihr das net alles n bissel kompliziert für nen anfänger...hier was NewBe-freundliches:
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
return false;
wend
- 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
@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.
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.

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
