Gamestudio Links
Zorro Links
Newest Posts
AlpacaZorroPlugin v1.3.0 Released
by kzhao. 05/22/24 13:41
Free Live Data for Zorro with Paper Trading?
by AbrahamR. 05/18/24 13:28
Change chart colours
by 7th_zorro. 05/11/24 09:25
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (Akow, TipmyPip, tomaslolo), 788 guests, and 11 spiders.
Key: Admin, Global Mod, Mod
Newest Members
AemStones, LucasJoshua, Baklazhan, Hanky27, firatv
19055 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Erkennen und Ersetzen von Wörtern in Strings #146478
08/07/07 19:16
08/07/07 19:16
Joined: Jan 2005
Posts: 134
Germany
T
TTKJonas Offline OP
Member
TTKJonas  Offline OP
Member
T

Joined: Jan 2005
Posts: 134
Germany
Hallo

Ich habe ein ziemlich kompliziertes Problem.
Ich schreibe zur Zeit an einem Dialogsystem.

Nun habe ich dem Script beigebracht, bestimmte Befehle zu erkennen und durch Wörter zu ersetzen, die in Strings in einer ini Datei gespeichert sind. Das Script dafür sieht so aus:

Code:
  IF(str_cmpni("@Name@",s)==1) { //Spielername
str_clip(s,6);
str_cat(main_text.string,Vorname);
str_cat(main_text.string," ");
str_cat(main_text.string,Name);
str_cat(main_text.string,s);

}



Nun möchte ich aber noch einen Schritt weiter gehen.

Das Script soll nun selbsständig erkennen welches Wort zwischen den beiden @@ steht und sich anschließende selbsständig des gleichnamigen String in der ini Datei suchen und das dort definierte Wort ersetzen.

Wenn ich also z.b. den Befehl @Beruf@ eingebe, soll das Script sich den String
string Beruf=Schmied; suchen und @Beruf@ durch Schmied ersetzen.


Ist das Scripttechnisch mit c-Script überhaupt möglich und wenn ja, wie?
Ich bin für jeden Tipp Dankbar!

Gruß
Jonas

Re: Erkennen und Ersetzen von Wörtern in Strings [Re: TTKJonas] #146479
08/07/07 19:38
08/07/07 19:38
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
mit hilfe von str_stri, str_len, str_trunc, str_clip und str_cat müsste sich das eigentlich relativ einfach machen lassen.

Hier etwas sehr ähnliches, was sich eigentlich einfach an dein problem anpassen lassen sollte: http://www.coniserver.net/ubbthreads/showflat.php/Cat/0/Number/772579/an/0/page/3#Post772579

Re: Erkennen und Ersetzen von Wörtern in Strings [Re: Slin] #146480
08/08/07 15:58
08/08/07 15:58
Joined: Jan 2005
Posts: 134
Germany
T
TTKJonas Offline OP
Member
TTKJonas  Offline OP
Member
T

Joined: Jan 2005
Posts: 134
Germany
@Slin

Danke für die schnelle Antwort!

Das Script funktioniert. Allerdings kann ich damit (nach ein klein wenig umschreiben) nur den Text nach string1 durchsuchen und durch string2 ersetzen lassen. Ich kann damit also z.b. string1 als "Beruf" und string2 als "Schmied" definieren und das Script ersetzt das Wort.

Damit kann ich aber nur einen Befehl austauschen lassen.
Ich hätte aber gerne, dass das Script erkennt "oh da ist ja ein Befehl" (z.b. zwischen @Befehl@) und sich dann den gleichnamigen String sucht, ohne das "Befehl" vorher als Suchbegriff definiert wurde.

Ich möchte z.b. gerne so einen Satz schreiben

Hallo @Name@. Ich bin @Beruf@. Das @Gegenstand@ kostet @Geld@

Und das Script soll dann die Befehle erkennen und sich folgende Strings suchen

string Name=Tom;
string Beruf=Schmied;
string Gegenstand=Schwert;
string Geld=100;


Ich weis das ist keine einfache Frage, aber hat jemand eine Idee?


Gruß
Jonas

Re: Erkennen und Ersetzen von Wörtern in Strings [Re: TTKJonas] #146481
08/08/07 19:12
08/08/07 19:12
Joined: May 2005
Posts: 2,713
Lübeck
Slin Offline
Expert
Slin  Offline
Expert

Joined: May 2005
Posts: 2,713
Lübeck
Ich würde vorschlagen, einfach nach allen "Befehlen" suchen zu lassen, bis alle ersetzt sind. Alternativ könntest du vielleicht nach den @...@ suchen und dann das Wort dazwischen mit einer "Befehlsliste" abgleichen und entsprechend ersetzen.

Re: Erkennen und Ersetzen von Wörtern in Strings [Re: Slin] #146482
08/09/07 17:26
08/09/07 17:26
Joined: Oct 2002
Posts: 4,753
Munich, Bavaria, South of Germ...
TripleX Offline
Expert
TripleX  Offline
Expert

Joined: Oct 2002
Posts: 4,753
Munich, Bavaria, South of Germ...
Die Funktion unten ist ein Ersatz für sprintf, wenn auch wesentlich langsamer, da der code nicht wirklich geschickt, bzw. schnell geschrieben ist.
Aber Sorry für eine Optimierung des Codes bin ich jetzt wirklich zu faul ;-)

Aufruf geht so:

str_format(string,"Mein Name ist %s und ich liebe %s und du bist %f Jahre alt",vector("Horst","Fußball",12));

string = Mein Name ist Horst und ich liebe Fußball und du bist 12 Jahre alt.

Code:

string GEdit_HelpStr1[512];
string GEdit_HelpStr2[512];
string GEdit_HelpStr3[512];

function Str_Format(GEdit_Str,&GEdit_ar)
{
var GEdit_a; var GEdit_c;

str_cpy(GEdit_HelpStr1,GEdit_Str);
str_cpy(GEdit_HelpStr2,"");

temp = str_stri(GEdit_HelpStr1,"%");
if(temp <= 0) { str_cpy(GEdit_HelpStr2,GEdit_Str); }
while(temp > 0)
{
str_cpy(GEdit_HelpStr3,GEdit_HelpStr1);
str_trunc(GEdit_HelpStr3,str_len(GEdit_HelpStr3)-temp-1);
str_cat(GEdit_HelpStr2,GEdit_HelpStr3);

str_clip(GEdit_HelpStr3,temp - 1);
str_clip(GEdit_HelpStr1,temp - 1);

GEdit_a = 0;
if(str_cmpi(GEdit_HelpStr3,"%s")) { str_trunc(GEdit_HelpStr2,2); str_cat(GEdit_HelpStr2,GEdit_ar[GEdit_c]); GEdit_a = 1; GEdit_c += 1;}
if(str_cmpi(GEdit_HelpStr3,"%f")) { str_trunc(GEdit_HelpStr2,2); str_for_num(GEdit_HelpStr4,GEdit_ar[GEdit_c]); str_cat(GEdit_HelpStr2,GEdit_HelpStr4); GEdit_a = 1; GEdit_c += 1;}
if(str_cmpi(GEdit_HelpStr3,"%k")) { str_trunc(GEdit_HelpStr2,2); str_for_asc(GEdit_HelpStr4,34); str_cat(GEdit_HelpStr2,GEdit_HelpStr4); GEdit_a = 1; }
if(str_cmpi(GEdit_HelpStr3,"%'")) { str_trunc(GEdit_HelpStr2,2); str_for_asc(GEdit_HelpStr4,34); str_cat(GEdit_HelpStr2,GEdit_HelpStr4); GEdit_a = 1; }
if(GEdit_a == 0) { str_clip(GEdit_HelpStr1,1); } else { str_clip(GEdit_HelpStr1,2); }

temp = str_stri(GEdit_HelpStr1,"%");
if(temp <= 0) { str_cat(GEdit_HelpStr2,GEdit_HelpStr1); }
}

str_cpy(GEdit_Str,GEdit_HelpStr2);
}



%s = Ersetzte string
%f = Ersetzte durch Zahl
$k = ersetzte durch "

mfg
Timo
Kannst natürlich auch noch eigene schreiben.


Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1