Seite 1 von 1

[ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 02.03.2016 04:53
von udg
Ich probiere mich zzT an einem kleinen Tool, welches eine Text Datei auslesen soll und mir die untereinander stehenden Zeilen in verschiedene StringGadget verteilen.

Die StringGadgets sind in der Text Datei pro Zeile bestimmt worden und sollen entsprechend dem Tool pro Gadget mit einem klick auf den Button zugeordnet werden.

meine Text Datei (bilder_links.txt) sieht wie folgt aus:

Code: Alles auswählen

StringGadgetPicture1=C:\Users\mich\Pictures\lokal.png
StringGadgetPicture2=C:\Users\mich\Pictures\eifel.png
StringGadgetPicture3=C:\Users\mich\Pictures\caffee.png
StringGadgetPicture4=C:\Users\mich\Pictures\maler.png
StringGadgetPicture5=C:\Users\mich\Pictures\noise.png
damit ich nun den kompletten Link nach dem "=" in das entsprechende StringGadget laden kann habe ich pro Zeile eine Kennung angelegt die genau so heißt, wie das StringGatget im Tool.

Der Link hinter dem "=" von "StringGadgetPicture1" soll nun im Tool auch in das richtige StringGadget, "#Picture1 usw" geladen und angezeigt werden.
Also müsste ich pro Zeile den Cursor 21 Zeichen nach rechts rücken, damit meine "sogenannte Kennungsvariable" aus der Text Datei nicht mit angezeigt wird?

Leider habe ich nicht das richtige in der Hilfe gefunden was mir weiter hilft. Ich kann den Button klicken und es lädt den Inhalt der ersten kompletten Zeile in das erste StringGadget, "#Picture1".

Wie muss man vorgehen um die richtige Zeile der Text Datei, dem richtigen StringGadget zuzuordnen? Bin seit paar Stunden schon Ratlos. Habe leider auch durch suchen nichts gefunden, da ich nicht recht weiß, was genau ich suchen muss.

Hier eine abgespeckter Tool Code:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;{ Gadgets
Enumeration
  #Picture1
  #Picture2
  #Picture3
  #Picture4
  #Picture5
  #btn_load_links
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 478, 221, 400, 396, "test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    
      StringGadget(#Picture1, 35, 45, 330, 30, "")
      StringGadget(#Picture2, 35, 105, 330, 30, "")
      StringGadget(#Picture3, 35, 165, 330, 30, "")
      StringGadget(#Picture4, 35, 225, 330, 30, "")
      StringGadget(#Picture5, 35, 285, 330, 30, "")
      ButtonGadget(#btn_load_links, 35, 335, 330, 45, "add Links from TXT File")
      TextGadget(#Text_1, 35, 30, 50, 15, "Bild 1")
      TextGadget(#Text_2, 35, 90, 50, 15, "Bild 2")
      TextGadget(#Text_3, 35, 150, 50, 15, "Bild 3")
      TextGadget(#Text_4, 35, 210, 50, 15, "Bild 4")
      TextGadget(#Text_5, 35, 270, 50, 15, "Bild 5")
    
  EndIf
EndProcedure

OpenWindow_Window_0()

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      
      ;- Lade Links in Link-Slots aus TxT-Datei
       If EventGadget = #btn_load_links
          If ReadFile(1, "Link_Dateien\bilder_links.txt")
             LinkContent$ = ReadString(1,#PB_Relative)
             CloseFile(1)
          EndIf
             SetGadgetText(#Picture1, LinkContent$)
       EndIf      
       
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        End
      EndIf
  EndSelect           
ForEver
Bild


Danke fürs lesen.

Re: [ Frage ] txt Datei einlesen, kürzen & verteilen

Verfasst: 02.03.2016 09:35
von mhs
Das einfachste wäre, wenn du in deiner Textdatei gleich die richtigen Konstantennamen der Gadgets (#Picture1, ...) schreibst, dann kannst du 1:1 mit Runtimevariablen arbeiten. Wenn das nicht geht, muss du an der Stelle den Namen mit z.B. StringField oder Right, Mid, etc auftrennen.

So könnte das dann z.B. aussehen:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;{ Gadgets
Runtime Enumeration
  #Picture1
  #Picture2
  #Picture3
  #Picture4
  #Picture5
  #btn_load_links
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Text_5
EndEnumeration
;}
Define.i Event, EventWindow, EventGadget, EventType, EventMenu    ; Integer statt Long


Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 478, 221, 400, 396, "test", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
   
      StringGadget(#Picture1, 35, 45, 330, 30, "")
      StringGadget(#Picture2, 35, 105, 330, 30, "")
      StringGadget(#Picture3, 35, 165, 330, 30, "")
      StringGadget(#Picture4, 35, 225, 330, 30, "")
      StringGadget(#Picture5, 35, 285, 330, 30, "")
      ButtonGadget(#btn_load_links, 35, 335, 330, 45, "add Links from TXT File")
      TextGadget(#Text_1, 35, 30, 50, 15, "Bild 1")
      TextGadget(#Text_2, 35, 90, 50, 15, "Bild 2")
      TextGadget(#Text_3, 35, 150, 50, 15, "Bild 3")
      TextGadget(#Text_4, 35, 210, 50, 15, "Bild 4")
      TextGadget(#Text_5, 35, 270, 50, 15, "Bild 5")
   
  EndIf
EndProcedure

OpenWindow_Window_0()

Repeat
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
     
      ;- Lade Links in Link-Slots aus TxT-Datei
      If EventGadget = #btn_load_links
       
        Define.i Id
        Define.s Line, Name, Value
        
        If Not ReadFile(1, "Link_Dateien\bilder_links.txt")
          Continue
        EndIf
        
        While Not Eof(1)
        
          Line = ReadString(1)
        
          Name  = StringField(Line, 1, "=")
          Value = StringField(Line, 2, "=")
          
          If Not IsRuntime(Name) : Continue : EndIf

          Id = GetRuntimeInteger(Name)
          
          SetGadgetText(Id, Value)
        
        Wend
        
        CloseFile(1)

       EndIf     
       
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        End
      EndIf
  EndSelect           
ForEver

Code: Alles auswählen

#Picture1=C:\Users\mich\Pictures\lokal.png
#Picture2=C:\Users\mich\Pictures\eifel.png
#Picture3=C:\Users\mich\Pictures\caffee.png
#Picture4=C:\Users\mich\Pictures\maler.png
#Picture5=C:\Users\mich\Pictures\noise.png
Noch einfacher wäre es, wenn du statt der Textdatei auf z.B. eine Preferencedatei setzt (falls du die Textdatei selber erzeugst!).

Re: [ Frage ] txt Datei einlesen, kürzen & verteilen

Verfasst: 02.03.2016 22:48
von udg
Danke für deine ausführliche Erklärung und dem Beispiel. Meine Textdatei Lese ich mit einem Tool aus, dass ein Verzeichnis scant und den File inhalt in eine TxT Datei speichert. Diese soll dann vom, siehe Beispiel (Tool) weiter verarbeitet werden.

wo erfahre ich mehr zu "Runtime Enumeration" ? Worin genau besteht der Unterschied zwischen Runtime Enumeration und normalem Enumeration?

Dein Beispiel erklärt soweit alles das ich es nachvollziehen kann. Leider konnte ich vor meiner Anfrage keinen Ansatz finden.
Passt nun super.

Bild

Nochmals VIELEN DANK

Re: [ Frage ] txt Datei einlesen, kürzen & verteilen

Verfasst: 03.03.2016 09:07
von mhs
udg hat geschrieben:wo erfahre ich mehr zu "Runtime Enumeration" ? Worin genau besteht der Unterschied zwischen Runtime Enumeration und normalem Enumeration?
Na in der Hilfe im Bereich Runtime :allright:

Also hier:
http://www.purebasic.com/documentation/ ... ntime.html
und hier:
http://www.purebasic.com/documentation/ ... index.html

Der Unterschied besteht darin, dass beim Kompilieren die Namen der Konstanten, Variablen, Funktionen, etc im Executable gespeichert werden (was normalerweise nicht der Fall ist) und du durch die Runtime Funktionen in Verbindungung mit dem Namen darauf Zugriff hast.

Re: [ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 04.03.2016 02:11
von udg
Ich habe die Hilfe letzte Nacht durchgequält aber nichts finden können. Von Runtime wusste ich nichts aber das ist natürlich für meinen Fall genau das Richtige.
Sehr nice. :allright:

Danke Dir

Re: [ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 04.03.2016 03:53
von PureLust
Hi udg,

kleine Frage: Ist die Anzahl der StringGadgets() immer gleich (also immer 5) oder kann/soll die auch mal variieren?

Greetz, PL.

Re: [ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 04.03.2016 04:07
von udg
Hallo,
Nein es handelt sich hier im Forum nur um eine abgespeckte Version. Im eigentlichen Tool variieren die StringGadgets in der Anzahl. Zzt. benutzt ich 22. Ausserdem habe ich zusätzlich noch einen OpenFile Dialog eingebunden das man eine Datei auch selber wählen kann, ohne das die Txt Datei an einem bestimmten Ort sein muss, damit das Tool sie findet.

Re: [ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 04.03.2016 04:22
von PureLust
Ich könnte mir vorstellen, dass das Fenster mit 22 StringGadgets() ziemlich lang ist.
Und wie wird das erst, wenn Du mal hunderte von Bildern auflisten möchtest?

Wäre da nicht evtl. eine Liste mit Hilfe eines ListIconGadget() sinnvoller?

Re: [ ERLEDIGT ] txt Datei einlesen, kürzen & verteilen

Verfasst: 07.03.2016 17:49
von udg
PureLust hat geschrieben:Ich könnte mir vorstellen, dass das Fenster mit 22 StringGadgets() ziemlich lang ist.
Und wie wird das erst, wenn Du mal hunderte von Bildern auflisten möchtest?

Wäre da nicht evtl. eine Liste mit Hilfe eines ListIconGadget() sinnvoller?
Im Moment sind 22 Gadgets ausreichend. Sollte es mehr werden schaue ich mir "ListIconGadget" an. Dann muss ich nicht jeden Slot einzeln angeben.
Danke für den Tipp