Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Parsování ftp url v C/C++

Zdravím, potřeboval bych poradit způsob, jak rozumně parsovat ftp url v C, případně C++, pokud jsou tam vhodnější nástroje. Vytvářím jednoduchého ftp klienta. Url bude zadána jako parametr. Zatím to mám vyřešeno pomocí funkce strtok(), která rozkouskuje řetězec na tokeny v definovaných místech (znaky @:/) a z těch si potom vyzobnu to, co potřebuji. Akorát chybí možnost kontroly správné syntaxe. Formát url (asi většina zná, ale jen pro upřesnění):

[ftp://[user:password@]]host[:port][/path][/]

Díky za případné rady.

Předmět Autor Datum
Regularni vyraz?
MaSo 05.03.2014 15:46
MaSo
A umí to i starší kompilátory C++, nebo jen ty s podporou C++11? Totiž server, na kterém se to bude…
Niko Bellic 05.03.2014 15:55
Niko Bellic
Hmm... Vypada to, ze to je jenom v C++11.
MaSo 05.03.2014 16:14
MaSo
podle tohohle by mel byt regexp stsandardni soucasti POSIXu http://stackoverflow.com/questions/10850…
gilhad 05.03.2014 19:13
gilhad
Velký dík. :-):beer: Vyřešeno. poslední
Niko Bellic 05.03.2014 20:55
Niko Bellic
Cyklus a parsujes si. State machine. Robota na pol hodku alebo 10minut
MM.. 05.03.2014 16:26
MM..
Takže klasika - číst znak po znaku, definovat si tabulku s přechody automatu, gramatiku, ... Sice ví…
Niko Bellic 05.03.2014 16:40
Niko Bellic
Tak nemusis si definovat tabulku, staci trochu uvazovat a stavy menit tym ze ides dalej. Na zaciatku…
MM.. 05.03.2014 16:55
MM..
ptr = retazec; if(strncmp(ptr,"ftp://",6)!=0) return false; ptr+=6; while(*ptr!=0 && *ptr!=':' && *p…
MM.. 05.03.2014 16:58
MM..
Dobře, díky. :-)
Niko Bellic 05.03.2014 17:03
Niko Bellic
resp. ne toto bola hovadina, uz vidim ze ti tam to ftp:// moze uplne chybat, ale ten test je uplne j…
MM.. 05.03.2014 17:04
MM..

Tak nemusis si definovat tabulku, staci trochu uvazovat a stavy menit tym ze ides dalej. Na zaciatku ocheckujem ci tam je ftp:// ak ano idem dalej (dalsi stav) ak ne tak return false. Neni to nic zlozite a nemusis to checkovat po znaku, mozes robit aj strncmp alebo strincmp apod a posuvat si pointer o X znakov dalej atd. Ja si vzdy checkujem vstup sam, nikdy to nebolo zlozite.

ptr = retazec;
if(strncmp(ptr,"ftp://",6)!=0) return false;
ptr+=6;
while(*ptr!=0 && *ptr!=':' && *ptr!='@')
{
if(*ptr==nedovoleny znak) return false
ptr++;
}
tu si teraz na prvej dvojbodke alebo @,
atd napriklad.

P.S.Neviem jake chces mat tam kriteria a co vsetko je dovolene a co ne, co vsetko tam moze chybat, v zavislosti na tom ze co moze chybat to budes muset mozno analyzovat uplne inac napr. hladanim stringov apod.

resp. ne toto bola hovadina, uz vidim ze ti tam to ftp:// moze uplne chybat, ale ten test je uplne jednoduchy ked tam je tak posunies pointer, ked tam neni tak tiez ok a neposunies pointer, a checkujes dalsiu vec, konkretne hladas @ ak najdes tak ocheckujes ci medzi tym je dvojbodka a len dovolene znaky, ak ano tak dalej posunies pointer za @ a chackujes host adresu na nedovolene znaky a zaroven hladas : a / apod. Alebo si prehladas na zaciatku pomocou strchr. Neni to komplikovane, pol hodka. Ok mozno hodka :)

Zpět do poradny Odpovědět na původní otázku Nahoru