Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2014-07-03, 11:11


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Witam, mam pewien problem z sprawdzaniem wyraz?w (dok?adniej z strfind). Mianowicie funkcja ta zwraca zawsze -1 (czyli nie znalaz?o) pomimo, ?e powinno znale??.

Kod:


for(new i = 0; i < MAX_SLOW; i++)
{
printf("00: %s, 02: %s", text, cenzuraSlow[i]);
f = strfind(text, cenzuraSlow[i]);

printf("01: %s, 02: %s", text, cenzuraSlow[i]);
while(f != -1)
{
printf("03: wykonalem");
}
}


Jak sobie wyprintowa?em wpisany wyraz + s?owa z pliku (przypisane do tablicy) to wszystko jest OK ale zawsze strfind zwraca -1. Czemu tak si? dzieje? Za? jak wpisze ostatni wyraz z pliku to p?tla WHILE wystartuje i b?dzie si? wykonywa?a w niesko?czono??.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 12:49


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Usu? p?tle while - niepotrzebne to, wystarczy jedna p?tla for, kt?r? ju? masz.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 13:15


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Zauwa?y?em w?a?nie, jednak?e strfind mi zwraca -1 zawsze, nawet je?li ustawie cenzuraSlow[0] (Gdzie pod 0 jest wyraz: gta).

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 13:16


Combacior







Wiek: 29
Na forum: 5795 dni
Posty: 1516

Piwa: 2161

Respekt: 1060
Respekt: 1060

Ostrzeżeń: 20%
Poka? ca?y kod i wszystkie dzia?ania na tablicy cenzuraSlow

@down - nie dzia?a ten pastebin, chyba ?e go usun??e?.

Ostatnio zmieniony przez Combacior 2014-07-03, 13:51, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 16:25


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Od?wie?am link: http://pastebin.com/iHJJ4qiX Tamten pastebin nie dzia?a? bo ustawi?em go tylko na 10 minut (chyba).

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 17:32


IgrexolonO







Wiek: 34
Na forum: 6809 dni
Posty: 1386

Piwa: 1062

Respekt: 651,8
Respekt: 651,8Respekt: 651,8

Dodaj true jako trzeci argument strfind.

Po wczytaniu wszystkich wyraz?w z pliku, wyprintuj je dla pewno?ci ze zmiennej:

Kod:

for(new i = 0; i < CensorMAXWords; i++)
{
print(CensorText[i]);
}


(sprawd? czy wszystko si? wczytuje jak trza)

[ Dodano: 2014-07-03, 17:49 ]
Prosz? bardzo. Ju? Ci m?wi? dlaczego Tw?j kod nie dzia?a. Bo usuwasz to co wczyta?e? z pliku (lini?), od razu po jej wczytaniu. ?apaj m?j kod.

Kod:

#include <a_samp>

#define strcpy(%0,%1,%2) \
strcat((%0[0] = '\0', %0), %1, %2)

new CensorText[10][42];
new CensorMAXWords;

public OnFilterScriptInit()
{
new File:_File = fopen("cenzura", io_read), buff[42], words;

while(fread(_File, buff))
{
CensorText[words] = buff;
words++;
buff = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
}

fclose(_File);
CensorMAXWords = words;

for(new i;i<CensorMAXWords;i++)
{
print(CensorText[i]);
}
}




[ Dodano: 2014-07-03, 17:53 ]
Pami?taj te?, ?eby usuwa? z wczytanej linii \n.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 18:25


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

// Rozwi?zane:

Problem tkwi? w tym, ?e w pliku gdzie trzyma?em wyrazy by?y one w nast?pnej linii (czyli przy odczytywaniu dawa?o dwie spacje) dlatego te? strfind nie m?g? znale?? takich samych wyraz?w.

A wi?c strdel pozostaje na tym samym miejscu jedynie co to musia?em zmieni? troch? t? funkcje, tak aby wyeliminowa?a te puste pola. ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 18:27


IgrexolonO







Wiek: 34
Na forum: 6809 dni
Posty: 1386

Piwa: 1062

Respekt: 651,8
Respekt: 651,8Respekt: 651,8

[ Dodano: 2014-07-03, 18:44 ]
"Wafelowski" napisał/a:

Problem tkwi? w tym, ?e w pliku gdzie trzyma?em wyrazy by?y one w nast?pnej linii (czyli przy odczytywaniu dawa?o dwie spacje) dlatego te? strfind nie m?g? znale?? takich samych wyraz?w.


To si? najpro?ciej w ?wiecie 'usuwa'.

Kod:

while(fread(_File, buff))
{
CensorText[words] = buff;
for(new i;i<43;i++)
{
if(CensorText[words][i] < 0x20)
{
CensorText[words][i] = EOS;
break;
}
}
words++;
buff = {false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false};
}


Ostatnio zmieniony przez IgrexolonO 2014-07-03, 19:11, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 18:59


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

IgrexolonO,

Ja wiem swoje Ty za? wiesz swoje. ;)

len = strlen(buff) - Zwraca d?ugo?? ca?ego stringu (r?wnie? te spacje).
strdel(buff, len - 2, len); - Za? ta funkcja odpowiada za usuwanie tych spacji od momentu ich wstawienia. Czyli jak mam wyraz: gtaonline . to od tego s?owa do kropki znajduj? si? 2 spacje i usuwa mi te dwie spacje.

Widz?, ?e nie masz poj?cia jak dzia?a funkcja strdel: http://wiki.sa-mp.com/wiki/Strdel

strdel(buff, gdzie ma rozpocz?? usuwanie, koniec usuwania); - buff - tam gdzie mi zapisuje string odczytany, p??niej rozpoczyna usuwanie od ko?ca wyrazu a? po koniec tego stringu. Trzeba powiedzie?, ?e strdel nie usuwa CA?EGO stringu (w moim przypadku) tylko usuwa cz??? gdzie s? spacje. Tyle w temacie. ;)

Czyli, ?e od razu przy wczytywaniu wyraz?w usuwa mi te spacje.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 19:02


IgrexolonO







Wiek: 34
Na forum: 6809 dni
Posty: 1386

Piwa: 1062

Respekt: 651,8
Respekt: 651,8Respekt: 651,8

"Wafelowski" napisał/a:

IgrexolonO,

Ja wiem swoje Ty za? wiesz swoje. ;)

len = strlen(buff) - Zwraca d?ugo?? ca?ego stringu (r?wnie? te spacje).
strdel(buff, len - 2, len); - Za? ta funkcja odpowiada za usuwanie tych spacji od momentu ich wstawienia. Czyli jak mam wyraz: gtaonline . to od tego s?owa do kropki znajduj? si? 2 spacje i usuwa mi te dwie spacje.

Widz?, ?e nie masz poj?cia jak dzia?a funkcja strdel: http://wiki.sa-mp.com/wiki/Strdel

strdel(buff, gdzie ma rozpocz?? usuwanie, koniec usuwania); - buff - tam gdzie mi zapisuje string odczytany, p??niej rozpoczyna usuwanie od ko?ca wyrazu a? po koniec tego stringu. Trzeba powiedzie?, ?e strdel nie usuwa CA?EGO stringu (w moim przypadku) tylko usuwa cz??? gdzie s? spacje. Tyle w temacie. ;)

Czyli, ?e od razu przy wczytywaniu wyraz?w usuwa mi te spacje.


No tak, to rzeczywi?cie o?lep?em. Ale chcia?bym zauwa?y?, ?e nie zawsze Ci to rozwi?zanie zadzia?a. Powodzenia. ;)

Postaw piwo autorowi tego posta
 

 
Wysłany: 2014-07-03, 19:06


Wafelowski







Wiek: 29
Na forum: 5347 dni
Posty: 428

Piwa: 100

Respekt: 232
Respekt: 232Respekt: 232

Jednak?e, musz? napisa? ?e dzi?ki Tobie mi si? uda?o doj?? do tego poniewa?, napisa?e? mi ?e mam usun?? z wczytanej linii \n. Wielkie dzi?ki a temat mo?na zamkn??. :)

Postaw piwo autorowi tego posta
 

 
Tagi: sprawdzanie :: wyrazów
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » PAWN Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku