

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.
Regularni vyraz?
A umí to i starší kompilátory C++, nebo jen ty s podporou C++11? Totiž server, na kterém se to bude testovat C++11 neumí a máme "využívat jen standardní knihovny C/C++" (ze zadání).
podle tohohle by mel byt regexp stsandardni soucasti POSIXu http://stackoverflow.com/questions/1085083/regular -expressions-in-c-examples , tak by to mohlo projit.
Jinak jestli to uz mas rozparsovane prez strtok, tak to uz snadno overis par if-ama
Velký dík.
Vyřešeno.
Cyklus a parsujes si. State machine. Robota na pol hodku alebo 10minut
Takže klasika - číst znak po znaku, definovat si tabulku s přechody automatu, gramatiku, ... Sice vím jak na to, ale neexistuje přece jen jednodušší způsob?
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.
Dobře, díky.
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 :)