Wie kann ich sachen einer Liste hinzugügen und dan Speichern

Anfängerfragen zum Programmieren mit PureBasic.
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 »

>> Da der Output doch Dynamisch ist

Code: Alles auswählen

If OpenPreferences("bla.cfg")
  Anzahl = ReadPreferenceLong("Anzahl", 0); dynamik
  For I = 1 To Anzahl
    PreferenceGroup(Str(I)) ; [1]
    bla.s = ReadPreferenceString("bla", "")
    SetGadgetText(#Gadget, bla)
    blub.s = ReadPreferenceString("blub", "")
    ; usw
  Next
  ClosePreferences()
EndIf
Am ende dann so ähnlich speichern, ist doch leicht!
Jetzt haste für jeden Eintrag eine ganze Gruppe für mehrere Werte, falls Du
es brauchst, ansonsten kannste es auch ohne Gruppen, nur mit nummern
machen.

Schreib Dir erstmal mit Notepad eine prefs, wie sie aussehen könnte!
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und wie ich bereits sagte, man kann die werte auch direkt speichern.

hier mal ne kleine demo.
einfach was einstellen und "save" drücken, dann beenden.
wieder starten, und "load" drücken. voila.

Code: Alles auswählen

Dim Wap1$(4)
Dim Wap2$(4)

WapNr1 = 0
WapNr2 = 0

OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  ComboBoxGadget(0, 10, 10, 250, 100)
  For n = 0 To 4
    Read Wap1$(n)
    AddGadgetItem(0, -1,Wap1$(n))
  Next 
  SetGadgetState(0, 0)

  ComboBoxGadget(1, 10, 40, 250, 100)
  For n = 0 To 4
    Read Wap2$(n)
    AddGadgetItem(1, -1,Wap2$(n))
  Next 
  SetGadgetState(1, 0)

  ButtonGadget(2,10,70,70,20,"Load")
  ButtonGadget(3,90,70,70,20,"Save")

  Repeat 
    EvID = WaitWindowEvent()
    GadID = EventGadget()
    Select EvID
      Case #PB_Event_Gadget
        Select GadID
          Case 0
            WapNr1 = GetGadgetState(0)
            Debug WapNr1  ;kontrolle
          Case 1
            WapNr2 = GetGadgetState(1)
            Debug WapNr2  ;kontrolle
          Case 2
            WapNr1 = 0  ;initialisieren, falls file nicht vorhanden
            WapNr2 = 0
            If ReadFile(0,"status.cfg")
              WapNr1 = ReadLong(0)
              WapNr2 = ReadLong(0)
              CloseFile(0)
            EndIf
            SetGadgetState(0, WapNr1)
            SetGadgetState(1, WapNr2)
          Case 3
            If CreateFile(0,"status.cfg")
              WriteLong(0,WapNr1)
              WriteLong(0,WapNr2)
              CloseFile(0)
            Else
              MessageRequester("Error","Can't save!",#MB_ICONERROR)
            EndIf
        EndSelect
    EndSelect
  Until EvID = #PB_Event_CloseWindow

DataSection
  Data.s "Keine", "Waffe1", "Waffe2", "Waffe3", "Waffe4"
  Data.s "Keine", "Waffe1", "Waffe2", "Waffe3", "Waffe4"
EndDataSection
PS:
so, jetzt hab ich mir dein eingangsposting noch mal angesehen,
und festgestellt, dass dir das nicht wirklich hilft.

du bräuchtest also eine liste, wo die textausgabe drin gespeichert wird,
damit du mehrere punkte anführen kannst.
zusätzlich würde ich aber die ganzen werte auch noch einzeln speichern,
damit das ganze wiederherstellbar und editierbar wird.
also, damit du die datei wieder öffnen kannst, und einträge ändern.

das wäre dann aber eine datei, die nur von deinem editor bearbeitet werden kann,
aus dieser kannst du dann das fertige script erzeugen.
das wiederum kanst du dann nicht mehr einladen und verändern,
aber du kannst die erzeugerdatei erneut öffnen, bearbeiten, und das script überschreiben.

mit deiner vermutung, dass du ne liste brauchst, warst du auf dem rechten weg.
schau in der Help mal ins kapitel LinkedList.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Beitrag von Coder Pinhead »

Kaeru Gaman hat geschrieben:mit deiner vermutung, dass du ne liste brauchst, warst du auf dem rechten weg.
schau in der Help mal ins kapitel LinkedList.
<)

Nur kriege ich trotzdem nichts sinnvolles zustande :( :cry: :cry:
Vielleicht ist es auch nur zu spät :roll:
Mal schauen vielleicht schaue ich mir das Morgen noch mal an wen ich Zeit finde <)
Und wen ich es dan die Tage immer noch nicht gepackt habe.
Compiliere ich einfach eine Preview Beta und Poste dan wieder einen Teil des Source's evtl könnt ihr mir dann besser Helfen wen ihr seht was ich meine :/
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich versuchs ma zusammenzufassen...

also, du hast ein paar gadgets, die ne bestimmte einstellung haben können.
aus denen erzeugst du deinen texteintrag, den man unten sieht.

für das zusammen brauchst du eine structure, die also zumindest die grundwerte für die gadgeteinstellungen beinhaltet.
(so ähnlich wie die variablen WapNr1 und WapNr2 in meinem beispiel, nur als teil einer struct)
außerdem sollte die struct die taste zum einbinden enthalten (bind "1")
und ggf eine laufende nummer.

mit dieser struct erzeugst du eine liste.
in dieser liste kannst du nun die ganzen bindings hintereinander speichern.
du bräuchtest also noch eine zusätzliche combobox, wo drinsteht, welchen eintrag du bearbeitest.
wenn man dort einen auswählt, werden die anderen gadgets entsprechend des eintrags eingestellt.

so eine liste kannst du dann einfach als strukturierte werte speichern,
und auch wieder einladen, bearbeiten, etc.

und wenn du dann "script erzeugen" anklickst,
erzeugt dein programm aus dieser liste das komplette buyscript,
das dann von CS eingelesen werden kann, aber eben nicht mehr von deinem programm bearbeitet.
dafür hast du die gespeicherte liste, die erzeuger-datei,
aus der kannst du jederzeit wieder ein script erzeugen.

das mal grob umrissen, das sollte das konzept klarer machen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Coder Pinhead
Beiträge: 234
Registriert: 27.02.2007 10:54
Wohnort: Germany

Beitrag von Coder Pinhead »

Ich habe es jetzt selbst herausgefunden wie ich es hinbekomme :mrgreen:
Was ne tüte schlaff nicht alles bewirkt :lol:

Und Kaeru Gaman es war viel einfacher als man glaubt also man braucht dafür aufjedenfall keine weitere combobox ;)
Windows 8.1 x64 | PureBasic v5.x x86/x64

Sämtliche Syntax, Tipp und Rechtschreibfehler unterliegen dem Copyright des Verfassers.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Und Kaeru Gaman es war viel einfacher als man glaubt also man braucht dafür aufjedenfall keine weitere combobox
irgendein weiteres gadget brauchst du, wenn du die liste editierbar halten willst.

wenn du einfach nur einträge hinzufügen willst,
ohne die vorher abgeschickten einsehen zu können,
dann brauchst du natürlich nix weiter.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten