Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
30.08.2002, 10:48
Ratman2000



Ich hab da ein eher simples problem...
Mir fällt nur nicht ein wie ich es behebe :)

Also:

Ich mache ne Wortabfrage wo ich in nem File wörter stehen habe wie folgt:

hure
bitch
schlampe
.....

Nun möchte ich, das jedes Wort was der Client eingibt überprüft wird:

if(FStrEq(pcmd,"say"))
{
int CheckStatus;
for (i = 0; i < CMD_ARGC();i++)
{
sprintf(sCommand,"%s", CMD_ARGV(i));
Status = CheckBadWord(sCommand);
if (Status == 1)
{
CheckStatus = 1;
}
}
}

So weit so gut...

Das problem was ich habe ist, das beim überprüfen der wörter
mit

fgets (zeile, 1000, Datei);

if(FStrEq(Word,zeile))
{
Ergebnis = 1;
}

immer Ergebnis = 0;

also kein Badword zurück lifert.
Ich glaube, dass es daran ligt, das beim einlesen eines wortes aus der Datei
ein zeilenumbruch dahinter steht und bei den worten per say nicht...
Gehe ich da richtig in der annahme ?
Wenn ja, wie kann ich den Zeilenumbruch abhacken ?

THX

Ratman2000

--

zum Seitenanfang zum Seitenende Profil || Suche
001
30.08.2002, 10:55
King of Darkness



ich bin mir nich sicher aber lass dann doch einfach das letzte zeichen weg (is ja der zeilen umbruch)
oder schreib alle wörter hintereinander in die datei

keine ahnung

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
002
30.08.2002, 11:01
Ratman2000



hmm hintereinnander dan wäre ich wieder an dem problem die wörter einzeln zu teilen...

Oder gibt es eine Möglichkeit, einfach in nem String zu suchen ?

Wie kann ich den erfahren, ob es wirklich der Zeilenumbruch ist ?

Und wie kann ich den erfahren, wie lang oder kurz ein satz iss damit ich mit einer for drauf gehen kann ?

--

zum Seitenanfang zum Seitenende Profil || Suche
003
30.08.2002, 15:02
the_viking



Mach doch einfach so was:

void trim_zeilenumbruch(char* string)
{
char buffer[1024];
strcpy(buffer,string);
strset(string,0);
int lenght = strlen(buffer);
int j = 0;
for(int i=0;i<buffer;i++)
{
if(buffer[i] != '\n')
{
string[j] = buffer[i]
j++;
}
}
}

Das wars. Die Funktion filtert alle '\n's, also Zeilenumbrüche, aus dem String heraus.

du kannst "if(buffer[i] != '\n')" natürlich erweitern:
z.B. Für Tabstopps:

if(buffer[i] != '\n' || buffer[i] != '\t')

Dann filtert er alle Zeilenumbrüche und Tabstopps aus dem String.

Aber für das "eine-zeile-aus-der-datei-mit-zeilenumbruch" ist das zu kompliziert.

Da dann eher so was:

char buffer[1000];
fgets(buffer,1000,datei);

if(buffer[strlen(buffer)-1] == '\n')
buffer[strlen(buffer)-1] = '\0';

Das reicht schon.

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446


Dieser Beitrag wurde am 30.08.2002 um 15:03 von the_viking bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
30.08.2002, 19:23
TheTinySteini



http://hlpp.telefragged.com/tuts/cl_censoring.txt

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
005
30.08.2002, 20:43
Ratman2000



So ich nochmal *g*

Ich habs noch immer nicht gepackt....

ich übergebe jetz jedes wort an meine checkbadwords routine unzwar so:

int CheckStatus = 0;

for (i = 0; i < CMD_ARGC();i++)
{
sprintf(sCommand,"%s", CMD_ARGV(i));

Status = CheckBadWord(sCommand);

if (Status == 1)
{
CheckStatus = 1;
}
}

sprintf(sCommand,"say STATUS = %i. CheckStatus = %i\n", Status, CheckStatus);

SERVER_COMMAND(sCommand);

und checke dan so:

BOOL CheckBadWord(char *Word)
{
char zeile[1000];
char sCommand[100];
int Ergebnis = 0;
//char buffer[1024];

std::string gamedir;

char* game_dir= new char();

(*g_engfuncs.pfnGetGameDir)(game_dir);

gamedir = (std::string)game_dir;

#ifdef WIN32
gamedir = gamedir + "\\";
FILE *Datei = fopen ((gamedir + "ratmod\\badwords.ini").c_str(),"rb");
#else
gamedir = gamedir +"/";
FILE *Datei = fopen ((gamedir + "ratmod/badwords.ini").c_str(),"rb");
#endif

if (Datei)
{
while (!feof(Datei))
{
fgets (zeile, 1000, Datei);

strcpy(buffer,zeile);

strset(zeile,0);

int lenght = strlen(buffer);

int j = 0;

for(int i=0;i<lenght;i++)
{
if(buffer[i] != '\n')
{
zeile[j] = buffer[i];
j++;
}
}

if(FStrEq(Word,zeile))
{
Ergebnis = 1;
}
}

fclose(Datei);
}
else
{
sprintf(sCommand,"say Die Datei konnte nicht geoeffnet werden.\n");

SERVER_COMMAND(sCommand);
}

return Ergebnis;
}

aber das einzige was ich zurück bekomme ist eine 0 also niemals 1 egal ob das wort im file steht oder nicht...

Wass mach ich falsch ?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
30.08.2002, 20:44
Ratman2000



So ich nochmal *g*

Ich habs noch immer nicht gepackt....

ich übergebe jetz jedes wort an meine checkbadwords routine unzwar so:

int CheckStatus = 0;

for (i = 0; i < CMD_ARGC();i++)
{
sprintf(sCommand,"%s", CMD_ARGV(i));

Status = CheckBadWord(sCommand);

if (Status == 1)
{
CheckStatus = 1;
}
}

sprintf(sCommand,"say STATUS = %i. CheckStatus = %i\n", Status, CheckStatus);

SERVER_COMMAND(sCommand);

und checke dan so:

BOOL CheckBadWord(char *Word)
{
char zeile[1000];
char sCommand[100];
int Ergebnis = 0;
//char buffer[1024];

std::string gamedir;

char* game_dir= new char();

(*g_engfuncs.pfnGetGameDir)(game_dir);

gamedir = (std::string)game_dir;

#ifdef WIN32
gamedir = gamedir + "\\";
FILE *Datei = fopen ((gamedir + "ratmod\\badwords.ini").c_str(),"rb");
#else
gamedir = gamedir +"/";
FILE *Datei = fopen ((gamedir + "ratmod/badwords.ini").c_str(),"rb");
#endif

if (Datei)
{
while (!feof(Datei))
{
fgets (zeile, 1000, Datei);

strcpy(buffer,zeile);

strset(zeile,0);

int lenght = strlen(buffer);

int j = 0;

for(int i=0;i<lenght;i++)
{
if(buffer[i] != '\n')
{
zeile[j] = buffer[i];
j++;
}
}

if(FStrEq(Word,zeile))
{
Ergebnis = 1;
}
}

fclose(Datei);
}
else
{
sprintf(sCommand,"say Die Datei konnte nicht geoeffnet werden.\n");

SERVER_COMMAND(sCommand);
}

return Ergebnis;
}

aber das einzige was ich zurück bekomme ist eine 0 also niemals 1 egal ob das wort im file steht oder nicht...

Wass mach ich falsch ?

--

zum Seitenanfang zum Seitenende Profil || Suche
007
30.08.2002, 20:44
Ratman2000



So ich nochmal *g*

Ich habs noch immer nicht gepackt....

ich übergebe jetz jedes wort an meine checkbadwords routine unzwar so:

int CheckStatus = 0;

for (i = 0; i < CMD_ARGC();i++)
{
sprintf(sCommand,"%s", CMD_ARGV(i));

Status = CheckBadWord(sCommand);

if (Status == 1)
{
CheckStatus = 1;
}
}

sprintf(sCommand,"say STATUS = %i. CheckStatus = %i\n", Status, CheckStatus);

SERVER_COMMAND(sCommand);

und checke dan so:

BOOL CheckBadWord(char *Word)
{
char zeile[1000];
char sCommand[100];
int Ergebnis = 0;
//char buffer[1024];

std::string gamedir;

char* game_dir= new char();

(*g_engfuncs.pfnGetGameDir)(game_dir);

gamedir = (std::string)game_dir;

#ifdef WIN32
gamedir = gamedir + "\\";
FILE *Datei = fopen ((gamedir + "ratmod\\badwords.ini").c_str(),"rb");
#else
gamedir = gamedir +"/";
FILE *Datei = fopen ((gamedir + "ratmod/badwords.ini").c_str(),"rb");
#endif

if (Datei)
{
while (!feof(Datei))
{
fgets (zeile, 1000, Datei);

strcpy(buffer,zeile);

strset(zeile,0);

int lenght = strlen(buffer);

int j = 0;

for(int i=0;i<lenght;i++)
{
if(buffer[i] != '\n')
{
zeile[j] = buffer[i];
j++;
}
}

if(FStrEq(Word,zeile))
{
Ergebnis = 1;
}
}

fclose(Datei);
}
else
{
sprintf(sCommand,"say Die Datei konnte nicht geoeffnet werden.\n");

SERVER_COMMAND(sCommand);
}

return Ergebnis;
}

aber das einzige was ich zurück bekomme ist eine 0 also niemals 1 egal ob das wort im file steht oder nicht...

Wass mach ich falsch ?

--

zum Seitenanfang zum Seitenende Profil || Suche
008
30.08.2002, 20:44
Ratman2000



So ich nochmal *g*

Ich habs noch immer nicht gepackt....

ich übergebe jetz jedes wort an meine checkbadwords routine unzwar so:

int CheckStatus = 0;

for (i = 0; i < CMD_ARGC();i++)
{
sprintf(sCommand,"%s", CMD_ARGV(i));

Status = CheckBadWord(sCommand);

if (Status == 1)
{
CheckStatus = 1;
}
}

sprintf(sCommand,"say STATUS = %i. CheckStatus = %i\n", Status, CheckStatus);

SERVER_COMMAND(sCommand);

und checke dan so:

BOOL CheckBadWord(char *Word)
{
char zeile[1000];
char sCommand[100];
int Ergebnis = 0;
//char buffer[1024];

std::string gamedir;

char* game_dir= new char();

(*g_engfuncs.pfnGetGameDir)(game_dir);

gamedir = (std::string)game_dir;

#ifdef WIN32
gamedir = gamedir + "\\";
FILE *Datei = fopen ((gamedir + "ratmod\\badwords.ini").c_str(),"rb");
#else
gamedir = gamedir +"/";
FILE *Datei = fopen ((gamedir + "ratmod/badwords.ini").c_str(),"rb");
#endif

if (Datei)
{
while (!feof(Datei))
{
fgets (zeile, 1000, Datei);

strcpy(buffer,zeile);

strset(zeile,0);

int lenght = strlen(buffer);

int j = 0;

for(int i=0;i<lenght;i++)
{
if(buffer[i] != '\n')
{
zeile[j] = buffer[i];
j++;
}
}

if(FStrEq(Word,zeile))
{
Ergebnis = 1;
}
}

fclose(Datei);
}
else
{
sprintf(sCommand,"say Die Datei konnte nicht geoeffnet werden.\n");

SERVER_COMMAND(sCommand);
}

return Ergebnis;
}

aber das einzige was ich zurück bekomme ist eine 0 also niemals 1 egal ob das wort im file steht oder nicht...

Wass mach ich falsch ?

--

zum Seitenanfang zum Seitenende Profil || Suche
009
31.08.2002, 17:07
TheTinySteini



Wie jetz? Doppelter Doppelpost oder was? Junge, du machst dich echt verdammt schnell unbeliebt.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
010
31.08.2002, 17:37
King of Darkness



lol

so wie der_vicking es gemacht hat sollte es doch gehn also wo is dein problem ???

oder mach es so wie ich es gesagt habe... wenn du eine zeile einiest ist logischer weise immer das letze zeichen ein zeilen umbruch (denke ich mal)

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
011
31.08.2002, 19:02
the_viking



Hehe King Of Darkness!

Nicht immer ist das letzte Zeichen einer Zeile einer Datei ein Zeilenumbruch!

Sondern nur dann, wenn die Zeile nicht die letzte Zeile ist, mit anderen worten:

die Letzte Zeile hat (meistens) keinen Zeilenumbruch:

test.txt:
Z.1: "aaaa\n"
Z.2: "bbbb\n"
Z.3: "cccc"

Oder du machst hinter jedes wort einen Zeilenumbruch:

Z.1: "aaaa\n"
Z.2: "bbbb\n"
Z.3: "cccc\n"
Z.4: "" // Da Z.3 = Zeilenumbruch

Ach ja: wie willst du alle wörter in eine datei schreiben? so:

strassewieseblöddumm

oder so:

strasse#####wiese#####blöd#####dumm#####

??

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446


Dieser Beitrag wurde am 31.08.2002 um 19:04 von the_viking bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
31.08.2002, 19:53
King of Darkness



bestimmt so:

bla
ficken
strib
verecke

--

Coding Center --- Tutorials über Programmierung und andere Themen
Amazon Preisbeobachung mit Preisalarm

zum Seitenanfang zum Seitenende Profil || Suche
013
31.08.2002, 22:52
Ratman2000



Jo genau so wie king es meint !
Sorry wegen dem 4mal post...
Irgentwie hatte er den Post nicht angenommen nach 5 min laden... da hab ich einfach noch ein paar mal gedrückt *argh* SORRY !

--

zum Seitenanfang zum Seitenende Profil || Suche
014
02.09.2002, 16:02
[RMen]OneStone



strib?!

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
015
02.09.2002, 16:06
Ratman2000



LOL ich glaub er meinte stirb
oder stripp :)
Find beides gut lol

--

zum Seitenanfang zum Seitenende Profil || Suche