Verfasst: Mi 19.09.2001 - 09:25
Ich hab mir gestern die unten stehende Funktion geschrieben, um in Strings Platzhalter für Variablen (z.B. %n Schaden) oder andere Strings (z.B. %s findet %n Gold) zu ermöglichen.
Vielleicht könnt Ihr sie auch gebrauchen ...
mfg
Thomas
PS: Die Leerzeichen in den Tempstrings muesst Ihr selber einfuegen, das Forum hat diese geloescht.
var temp2;
string tempstring, " "; // ein langer String
string tempstring2, " ";
string str_set_vartext, " ";
var var_set_vartext[10]; // je nach Bedarf auch mehr oder weniger
text temp_strlist // wird nie angezeigt, dient nur als String-Array, darin werden die Strings für %s abgelegt
{ layer = 0; font = myfont; strings = 5;
string = " ", " ", " ", " ", " ";}
function test()
{
var_set_vartext[0] = 200; var_set_vartext[1] = 10;
str_cpy(temp_strlist.string[0], "einen Ring");
str_cpy(temp_strlist.string[1], "des Glücks");
str_cpy(str_set_vartext, "Du hast %n Gold, %n Edelsteine und %s %s gefunden.");
set_vartext();
// jetzt enthält str_vartext ""Du hast 200 Gold, 10 Edelsteine und einen Ring des Glücks gefunden."
}
function set_vartext()
{
str_cpy(tempstring, "");
temp = str_stri(str_set_vartext, "%n");
temp2 = 0; // Counter
while (temp > 0) // wenn %n im Text vorkommt
{ str_cpy(tempstring2, str_set_vartext);
str_trunc(tempstring2, str_len(tempstring2) - temp + 1); // enthält jetzt Text vor %n
str_cat(tempstring, tempstring2); // diese an tempstring (vorläufiges Result) anhängen
str_for_num(tempstring2, var_set_vartext[temp2]); // holt sich die entsprechende Variable aus dem Array
str_cat(tempstring, tempstring2); // diese anhängen
str_clip(str_set_vartext, temp + 1); //trennt Text einschl. %n vom Anfang ab
temp = str_stri(str_set_vartext, "%n"); // kommt %n nochmal vor?
temp2 += 1; // Counter um 1 erhöhen
}
str_cat(tempstring, str_set_vartext); // hängt den Rest nach dem letzten %n an den tempstring
str_cpy(str_set_vartext, tempstring); // str_set_vartext auf Text mit eingesetzen Variablen aber noch mit %s setzen
temp = str_stri(str_set_vartext, "%s"); // ist %s im text vorhanden?
if (temp == 0) {return;} //nein
str_cpy(tempstring, "");
temp2 = 0; // Counter
while (temp > 0) // wenn %n im Text vorkommt
{ str_cpy(tempstring2, str_set_vartext);
str_trunc(tempstring2, str_len(tempstring2) - temp + 1); // enthält jetzt Text vor %n
str_cat(tempstring, tempstring2); // diese an tempstring (vorläufiges Result) anhängen
str_cpy(tempstring2, temp_strlist.string[temp2]); // holt sich den entsprechenden String aus dem Text-Array
str_cat(tempstring, tempstring2); // diesen anhängen
str_clip(str_set_vartext, temp + 1); //trennt Text einschl. %s vom Anfang ab
temp = str_stri(str_set_vartext, "%s"); // kommt %s nochmal vor?
temp2 += 1; // Counter um 1 erhöhen
}
str_cat(tempstring, str_set_vartext); // hängt den Rest nach dem letzten %s an den tempstring
str_cpy(str_set_vartext, tempstring); // str_set_vartext auf Text mit eingesetzen Variablen und Strings setzen (als Result)
}
[ Dieser Beitrag wurde von samot am 19.09.2001 editiert. ]
Vielleicht könnt Ihr sie auch gebrauchen ...
mfg
Thomas
PS: Die Leerzeichen in den Tempstrings muesst Ihr selber einfuegen, das Forum hat diese geloescht.
var temp2;
string tempstring, " "; // ein langer String
string tempstring2, " ";
string str_set_vartext, " ";
var var_set_vartext[10]; // je nach Bedarf auch mehr oder weniger
text temp_strlist // wird nie angezeigt, dient nur als String-Array, darin werden die Strings für %s abgelegt
{ layer = 0; font = myfont; strings = 5;
string = " ", " ", " ", " ", " ";}
function test()
{
var_set_vartext[0] = 200; var_set_vartext[1] = 10;
str_cpy(temp_strlist.string[0], "einen Ring");
str_cpy(temp_strlist.string[1], "des Glücks");
str_cpy(str_set_vartext, "Du hast %n Gold, %n Edelsteine und %s %s gefunden.");
set_vartext();
// jetzt enthält str_vartext ""Du hast 200 Gold, 10 Edelsteine und einen Ring des Glücks gefunden."
}
function set_vartext()
{
str_cpy(tempstring, "");
temp = str_stri(str_set_vartext, "%n");
temp2 = 0; // Counter
while (temp > 0) // wenn %n im Text vorkommt
{ str_cpy(tempstring2, str_set_vartext);
str_trunc(tempstring2, str_len(tempstring2) - temp + 1); // enthält jetzt Text vor %n
str_cat(tempstring, tempstring2); // diese an tempstring (vorläufiges Result) anhängen
str_for_num(tempstring2, var_set_vartext[temp2]); // holt sich die entsprechende Variable aus dem Array
str_cat(tempstring, tempstring2); // diese anhängen
str_clip(str_set_vartext, temp + 1); //trennt Text einschl. %n vom Anfang ab
temp = str_stri(str_set_vartext, "%n"); // kommt %n nochmal vor?
temp2 += 1; // Counter um 1 erhöhen
}
str_cat(tempstring, str_set_vartext); // hängt den Rest nach dem letzten %n an den tempstring
str_cpy(str_set_vartext, tempstring); // str_set_vartext auf Text mit eingesetzen Variablen aber noch mit %s setzen
temp = str_stri(str_set_vartext, "%s"); // ist %s im text vorhanden?
if (temp == 0) {return;} //nein
str_cpy(tempstring, "");
temp2 = 0; // Counter
while (temp > 0) // wenn %n im Text vorkommt
{ str_cpy(tempstring2, str_set_vartext);
str_trunc(tempstring2, str_len(tempstring2) - temp + 1); // enthält jetzt Text vor %n
str_cat(tempstring, tempstring2); // diese an tempstring (vorläufiges Result) anhängen
str_cpy(tempstring2, temp_strlist.string[temp2]); // holt sich den entsprechenden String aus dem Text-Array
str_cat(tempstring, tempstring2); // diesen anhängen
str_clip(str_set_vartext, temp + 1); //trennt Text einschl. %s vom Anfang ab
temp = str_stri(str_set_vartext, "%s"); // kommt %s nochmal vor?
temp2 += 1; // Counter um 1 erhöhen
}
str_cat(tempstring, str_set_vartext); // hängt den Rest nach dem letzten %s an den tempstring
str_cpy(str_set_vartext, tempstring); // str_set_vartext auf Text mit eingesetzen Variablen und Strings setzen (als Result)
}
[ Dieser Beitrag wurde von samot am 19.09.2001 editiert. ]