text datei durchsuchen und text ersetzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

text datei durchsuchen und text ersetzen

Beitrag von udg »

Hallo,

ich möchte mit einem kleinen Tool in einer Text Datei einen Text finden und mit dem eingegebenen Namen aus dem "StringGadget" beim klicken auf SAVE automatisch ersetzen.

Wenn also der User seinen Namen eingibt, soll dieser dann durch klicken auf den Button "Save" aus dem StringGadget übernommen werden und
in der TXT Datei den Namen: UserName="hier soll der Name aus dem StringGadget geschrieben werden"
überschreiben und das Ganze speichern.

vorher:
UserName=User
nachher
UserName=neuer Name

Nun habe ich schon einige Beispiele und Stunden um die Ohren geschlagen bin jedoch zu keinem Ergebnis gekommen.

hier einmal der einfache Code da mein originalcode einiges an Grafiken verwendet:
Bild

Code: Alles auswählen

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #String_0
  #save
  #exit
  #Font_String_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, StringGadget
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 463, 196, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      StringGadget(#String_0, 50, 205, 300, 30, "enter username", #PB_String_BorderLess|#PB_Window_ScreenCentered)
      SetGadgetFont(#String_0, LoadFont(#Font_String_0, "HelveticaNeueLT Pro 35 Th", 20, #PB_Font_HighQuality))
      SetActiveGadget(StringGadget)
      ButtonGadget(#save, 50, 255, 130, 40, "save")
      ButtonGadget(#exit, 220, 255, 130, 40, "exit")
   
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #String_0
      ElseIf EventGadget = #save
      ElseIf EventGadget = #exit
      End  
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}
Vielen Dank für eine Hilfe und Lösung
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: text datei durchsuchen und text ersetzen

Beitrag von HeX0R »

Was genau hat das Beispiel mit der Aufgabenstellung zutun?
Du gibst uns also ein GUI-Gerüst, und wir sollen den Rest erledigen?

Ich bin mir sicher, irgendeiner wird Dir den fehlenden Code dort reinpflanzen, aber es wäre auch für Deine Lernkurve sehr viel sinnvoller, wenn Du uns Deine bisherigen Versuche zeigen könntest und wir sagen Dir was Du falsch machst.

Wenn der Text in der Datei tatsächlich so aussieht (UserName=User), dann würde ich Dir raten mal bei den Preference-Befehlen nachzuschauen.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: text datei durchsuchen und text ersetzen

Beitrag von udg »

Danke für deinen Beitrag.

Ich werde selber weiter probieren. Wenn man sich nicht richtig mit einer Sache auskennt fragt man eben lieber da man kein Ergebnis in Sicht hat.

Aber trotzdem DANKE
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
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 datei durchsuchen und text ersetzen

Beitrag von ts-soft »

Code: Alles auswählen

SetActiveGadget(StringGadget)
das soll wohl:

Code: Alles auswählen

SetActiveGadget(#String_0)
sein? Damit das nicht passiert, gibt es EnableExplicit!

Ansonsten in der Hilfe mal nach ReplaceString suchen.
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
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: text datei durchsuchen und text ersetzen

Beitrag von udg »

Danke TS-Soft für den Tipp,

nach langem Versuchen bin ich nun zu mindest soweit, dass ich eine TxT Datei auslese und mit einem vorgegebenene Namen ersetzen kann.
ReplaceString habe ich versucht aber da tat sich gar nichts :(
Leider fehlt mir der Faden wie ich nun einen eingetippten Namen aus dem "StringGadget(#String_0") übergebe.

Hier mal mein Ansatz der in der Text.txt Datei zumindest schon mal einen Namen ändert

Text Datei Inhalt:
Name:Text.txt

Code: Alles auswählen

1
2
3
4
4
5
3
52
35
2
352
36
wet
g
wde
we
###########################################
UserName=UserName
###########################################

End
und hier mein Code zum durchsuchen der Text.txt Datei

Code: Alles auswählen

EnableExplicit
;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #String_0
  #save
  #exit
  #Font_String_0
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu, StringGadget
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 463, 196, 400, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
      StringGadget(#String_0, 50, 205, 300, 30, "enter username", #PB_String_BorderLess|#PB_Window_ScreenCentered)
      SetGadgetFont(#String_0, LoadFont(#Font_String_0, "HelveticaNeueLT Pro 35 Th", 20, #PB_Font_HighQuality))
      SetActiveGadget(#String_0)
      ButtonGadget(#save, 50, 255, 130, 40, "save")
      ButtonGadget(#exit, 220, 255, 130, 40, "exit")
   
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #String_0
        ElseIf EventGadget = #save
          ;öffne txt Datei und durchsuche
          OpenFile(0,"Text.txt")
            While Not Eof(0)
               If ReadString(0)="UserName=UserName"
                 FileSeek(0,Loc(0)-10) ; löscht die Zeichen hinter dem "="
                 WriteStringN(0, "peter")  ; schreibt neuen Namen. Dieser Soll aber eigtl. aus dem StringGadget(#String_0) übernommen werden
               EndIf
            Wend
          CloseFile(0)  
       ElseIf EventGadget = #exit
          End 
       EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}
Nun steht in der Text.txt der "username=peter"

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: text datei durchsuchen und text ersetzen

Beitrag von Bisonte »

und um das "Peter" gegen den Inhalt des StringGadgets zu ersetzen schau Dir in der Hilfe mal die Abteilung
StringGadget und GetGadgetText an....

Und evt. die ganze Abteilung wo es sich um Variablen dreht!

Aber :
Hex0r hat geschrieben:Wenn der Text in der Datei tatsächlich so aussieht (UserName=User), dann würde ich Dir raten mal bei den Preference-Befehlen nachzuschauen.
Das ist dann um einiges einfacher mit der Änderung in der Datei....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: text datei durchsuchen und text ersetzen

Beitrag von HeX0R »

So wie Du das machen möchtest (direkt in der Datei verändern), must Du folgendes beachten:
Das funktioniert nur korrekt, wenn dein zu ersetzender Name genauso lang ist wie das, was da vorher steht.
Wenn Du z.B. Username=Username in Peter ändern möchtest, wird sich das in

Code: Alles auswählen

###########################################
Username=Peterame
###########################################
ändern, bzw. wenn Du ReadStringN benutzt (weil dann noch ein CR und LF dazu kommt):

Code: Alles auswählen

###########################################
Username=Peter
e
###########################################
Probier mal die Preference-Befehle, ich bin mir nicht sicher, ob das in dieser merkwürdigen Text-Datei funktioniert, einen Versuch wäre es aber Wert.

Ansonsten führen viele Wege nach Rom:
z.B. komplette Datei in einen String lesen und dort mittels den Stringbefehlen die Änderung durchführen und dann die Datei wieder neu zurückschreiben.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: text datei durchsuchen und text ersetzen

Beitrag von udg »

Danke für eure beiden Antworten. Ich werde das heute abend durchlesen wenn ich von der Arbeit rein bin. Die Hilfe und eure Ansätze ausprobieren. Das ein anderer Name zb noch andere Buchstaben hatte oder ein Zeilenumbruch auf einmal da war, hatte ich in meinen versuchen auch schon. Wichtig ist vor allem, dass ich den Namen aus der Tool Eingabe übergeben kann und in eine txt speichern und einen vorgegebenen string bzw. Namen überschreiben kann. Wird schon. Muss gehen. Bei anderen geht es ja auch.

Grüße
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten