Edit: Listenwerte zusammenfassen

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Edit: Listenwerte zusammenfassen

    Hallo Community,

    ich bins - den mal wieder ein Problemchen an seinem freien Tag belästigt und quält.
    Es geht bei meinem Projekt ja um Rezepte (der ein oder andere ist sicherlich mit meinem Bilder-Verknüpfen Thread vertraut).

    Meine Rezepte sind in INI-Dateien gespeichert. Nun ist es so, das die Sektionen eine Nummer sind... Meine Datei sieht so aus - ein Beispiel ist besser:
    [200]
    name=Kuchen
    [201]
    name=Kekse
    etc...

    Mein ganzer Quelltext ist schon ziemlich umfangreich weswegen ich nicht unbedingt alles auflisten will. Jedenfalls macht das Programm folgendes:
    Es ermittelt die Anzahl der Gäste -> damit wird eine Schleife gesteuert die für diese Gäste ein Zufallsmenü wählt -> Ein Zähler generiert bei jedem Durchlauf eine Zufallsnummer und addiert sie mit 200 (wegen meiner Rezeptdatenbank) -> Meiner Liste wird dann der Name des Gerichts hinzugefügt.

    Soweit so gut... In der Praxis sieht der Code so aus:

    GML-Quellcode

    1. for ( i = 0; i < intGuests; i += 1 ) // Schleife die solange zählt wieviele Gäste
    2. {
    3. k = floor( random(2) ) + 200; // Temporärer Zähler der zufällig ein Rezept auswählt solange die Schleife läuft
    4. //ds_list_add(lsHauptspeisen, k);
    5. ds_list_add(lsHauptspeisen, ini_read_string(k,"dspBon",0)); // Wenn ja, dann in die Liste eintragen
    6. }


    Mein Problem ist, er füllt die Liste!!! Aber nicht mit dem was in der Kategorie dspBon der jeweiligen Sektion steht. Die Liste bekommt leere Werte 8| .
    Ich habe schon soviel ausprobiert und versucht - aber nichts funktioniert. Der auskommentierte Teil über ds_list_add war für mich zur Kontrolle gedacht ob meine Schleife funktioniert und die richtigen Menüs in die Liste geschrieben werden. Antwort war ja. Aber wende ich die Variable k auf die INI-Datei an wie man sieht, füllt er die Liste nur mit leeren Werten! :huh:

    Was mache ich hier falsch? Weiß das jemand?
    Meine nächste Frage ist: Gibt es wirklich keine Möglichkeit ini-Dateien in Unterordner zu speichern und sie dann aufzurufen? Weil ich habe keinen Bock darauf das ich zig Dateien im Hauptverzeichnis rumschwirren habe!

    Ich bin für jede Hilfe zu dem Problem dankbar!

    LG
    zero-tx
    Wenns nach mir ginge bei einem meiner Projekte:

    GML-Quellcode

    1. global.ProgrammNotFinish = 1;
    2. if (global.ProgrammNotFinish)
    3. {
    4. for (i=0; i<5; i += 1)
    5. {
    6. instance_create(x + i,y + i, objzerotx + i);
    7. }
    8. objzerotx1.task = "Erstelle Grafiken";
    9. objzerotx2.task = "Erstelle Sound";
    10. objzerotx3.task = "Erstelle Effekte und Doku";
    11. objzerotx4.task = "Programmiere";
    12. objzerotx5.task = "Kümmer dich um deine Frau!!!";
    13. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von zero-tx ()

  • EDIT

    Da ich meinen Post nicht löschen kann, muss ich ihn editieren. Das Problem hat sich von selber aufgelöst. Die Antwort wie es funktioniert war ganz einfach: Anwenderfehler. Näher möchte ich nicht drauf eingehen :D .
    Deswegen habe ich auch die Überschrift geändert, weil es eine neue Frage gibt -> siehe drunter.

    Aber ich hänge hier mal eine andere Frage dran die mich in den Wahnsinn treibt und hoffe, das jemand mit der logischer Weitsicht das Problem lösen kann.
    Ich habe ja nun meine Liste die die verschiedenen Gerichte enthält. Nun ist es ja so, das mehrere Leute dasselbe essen - wie in echt auch!
    Jetzt sieht meine Liste, die ich der Übersichthalber sortiert habe so aus:
    Kuchen
    Kuchen
    Kuchen
    Steak
    Steak
    Nudeln
    Wie kann ich es nun realisieren das er mir auf dem Bon anzeigt:
    3x Kuchen
    2x Steak
    Nudeln ?(
    Ich habe zwar einen Lösungsansatz es mit ner Schleife zu machen, die die verschiedenen Positionen miteinander vergleicht - aber ich denke mal wieder zu schwer und sehe den Wald vor lauter Bäumen nicht :thumbdown: .

    Hat hier jemand mal ein Codebeispiel?
    Das wäre echt super. Danke schonmal!

    Gruß
    zero-tx
    Wenns nach mir ginge bei einem meiner Projekte:

    GML-Quellcode

    1. global.ProgrammNotFinish = 1;
    2. if (global.ProgrammNotFinish)
    3. {
    4. for (i=0; i<5; i += 1)
    5. {
    6. instance_create(x + i,y + i, objzerotx + i);
    7. }
    8. objzerotx1.task = "Erstelle Grafiken";
    9. objzerotx2.task = "Erstelle Sound";
    10. objzerotx3.task = "Erstelle Effekte und Doku";
    11. objzerotx4.task = "Programmiere";
    12. objzerotx5.task = "Kümmer dich um deine Frau!!!";
    13. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von zero-tx ()

  • es gibt glaubich einen Befehl:

    GML-Quellcode

    1. ds_list_count(liste,"string")


    wenn du aber so 100 Rezepte hast dann benutz besser

    ds_map, weil da kann man den strings werte hinzufügen:

    Vorher:
    Kekse = 3
    Pfannkuchen = 1

    GML-Quellcode

    1. ds_map_add(liste,"Kekse",3)//weiss nicht ob die argumente richtig angeordnet sind

    Nachher:
    Kekse = 6
    Pfannkuchen = 1

    MfG

    Genesis
  • So etwas wie ds_list_count() gibt es leider nicht. Ich hab dir mal ein Script geschrieben welches eine Liste zusammenfasst:

    GML-Quellcode

    1. {
    2. var ls,ls_ret,i;
    3. ls_ret=ds_list_create();
    4. ls=argument0;
    5. for(i=0;i<ds_list_size(ls);i+=1)
    6. {
    7. var t,pos;
    8. t=ds_list_find_value(ls,i);
    9. pos=ds_list_find_index(ls_ret,t);
    10. if(pos>=0)
    11. {
    12. ds_list_replace(ls_ret,pos+1,ds_list_find_value(ls_ret,pos+1)+1);
    13. }
    14. else
    15. {
    16. ds_list_add(ls_ret,t);
    17. ds_list_add(ls_ret,1);
    18. }
    19. }
    20. return ls_ret;
    Alles anzeigen

    argument0 ist deine Liste
    Zurückgegeben wird eine Liste die immer abwechselnd den Namen und danach die Zahl wie oft es vorkam enthält.
    z.B.: "Kuchen",3,"Steak",2,"Nudeln",1

    mfg Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!