

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?
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 :)