Guten Abend Gm-d.de,
ich habe seit ein paar Tagen ein Problem mit der GM for-Schleife. Unswahr will ich eine Variable mit Daten teilen, das war eigentlich kein Problem. Soweit sogut, nun zähl ich die Anzahl an Zeichenketten der getrennten Variable, auch kein Problem. So jetzt kommt mein eigentlcihes Problem: Jede geteilte Zeichenkette soll jetzt nocheinmal geteilt werden und ausgewertet werden, das alles in der for-Schleife,
So, einmal der Explode Skript das ich benutze:
Alles anzeigen
Das SizeOf Skript um die Anzahl des Arrays herauszufinden:
Alles anzeigen
Und schließlich der eigentliche Teil:
Alles anzeigen
Die Variable i wird wenn ich es mit show_message anzeige 3 ausgegeben. die var anzahl ist immer richtig.
Beispielsweise sind 2 Nachichten in der var. Er liest nur die erste und macht weiter, ohne die Schleife von 0 bis anzahl abzuarbeiten.
edit: Problem gelöst!! DIe variable i gab es schon, daher hab ich eine andere genommen.
ich habe seit ein paar Tagen ein Problem mit der GM for-Schleife. Unswahr will ich eine Variable mit Daten teilen, das war eigentlich kein Problem. Soweit sogut, nun zähl ich die Anzahl an Zeichenketten der getrennten Variable, auch kein Problem. So jetzt kommt mein eigentlcihes Problem: Jede geteilte Zeichenkette soll jetzt nocheinmal geteilt werden und ausgewertet werden, das alles in der for-Schleife,
So, einmal der Explode Skript das ich benutze:
GML-Quellcode
- //Argumente zu Variablen
- arrayname = argument0
- globarr = argument1
- meinstring = argument2
- teiler = argument3
- loeschen = argument4
- limit = argument5
- //wie oft kommt der Teiler im String vor
- vorkommen = string_count(teiler,meinstring)
- if (limit == 0 || vorkommen < limit) {//wenn Limit aus ist oder der Teiler weniger oft vorkommt als das Limit
- sooft = vorkommen//vorkommen-mal "explodieren"
- } else {
- sooft = limit//limit-mal "explodieren"
- }
- if (vorkommen == 0) {//wenn es nie vorkommt, gleich so lassen
- if (globarr == 1) {
- variable_global_array_set(arrayname,0,meinstring)
- } else {
- variable_local_array_set(arrayname,0,meinstring)
- }
- return 0
- exit
- }
- for (i=0; i<sooft; i+=1) {
- meinstring2 = meinstring//Kopie anlegen
- position = string_pos(teiler,meinstring)//wo ist der Teiler
- if (loeschen == 1) {//wird der Teilere gelöscht?
- meinstring = string_delete(meinstring,position,9999999)//Teiler und alles dahinter raus
- } else {
- meinstring = string_delete(meinstring,position+string_length(teiler),9999999) //alles hinter dem Teiler raus
- }
- if (globarr == 1) {
- variable_global_array_set(arrayname,i,meinstring)
- } else {
- variable_local_array_set(arrayname,i,meinstring)
- }
- meinstring = string_copy(meinstring2,position+string_length(teiler),9999999)//meinstring beinhaltet nun den alten String ohne das Rausgeschnittene und Teiler
- letzteid = i//der wievielte Durchlauf
- }
- if (meinstring == "" || meinstring == " ") {
- return sooft//wenn alles weg ist, sind wir fertig
- } else {//sonst muss noch der Rest it ins Array
- if (globarr == 1) {
- variable_global_array_set(arrayname,letzteid+1,meinstring)
- } else {
- variable_local_array_set(arrayname,letzteid+1,meinstring)
- }
- return sooft+1
- }
Das SizeOf Skript um die Anzahl des Arrays herauszufinden:
GML-Quellcode
Und schließlich der eigentliche Teil:
GML-Quellcode
- explode_script("message",0,message,"~",1,0);
- anzahl=sizeof("message");
- show_message("Du hast " + string(anzahl) + " Nachrichten in deinem Postfach!");
- for (i=0; i<=anzahl; i+=1)
- {
- explode_script("messagedata",0,message[i],"|",1,0);
- if real(messagedata[0])=0
- {
- show_message(string(i) + ". Nachricht#Von: " + messagedata[1] + "#" + messagedata[2]);
- }
- if real(messagedata[0])=1
- {
- show_message(string(i) + ". Spezielle-Nachricht#Von: " + messagedata[1] + "#" + messagedata[2]);
- }
- }
Die Variable i wird wenn ich es mit show_message anzeige 3 ausgegeben. die var anzahl ist immer richtig.
Beispielsweise sind 2 Nachichten in der var. Er liest nur die erste und macht weiter, ohne die Schleife von 0 bis anzahl abzuarbeiten.

edit: Problem gelöst!! DIe variable i gab es schon, daher hab ich eine andere genommen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Burhan82 ()