Szerző Téma: ini_cut  (Megtekintve 904 alkalommal)

ini_cut
« Dátum: 2013. február 01. - 20:25:42 »
+2 Show voters
Biztos van már ebbõl is többféle verzió, ezért kreáltam egyet én is.  :angel:
Segítségével egy fájlból beolvasva kétfelé lehet szedni egy beolvasott sor adatait, melyet az egyenlõség jellel választanak el.
Példaként legyen a fájl neve Config.ini, a tartalma a következõ:
 

Autologin=1
AdminSkin=214
 
[/quote]
A példa szkript:
 
public 
OnFilterScriptInit()
{
new
File:F = fopen(\"Config.ini\", io_read),
str[128],
name[64],
value[64];
if(F)
{
while(fread(F, str))
{
   if(ini_cut(str, name, value)) printf(\"Error. line: %s\", str);
   else printf(\"%s <--> %s\", name, value);
}
fclose(F);
}
return 1;
}

 
Eredményként ezt kapjuk:
 
Autologin <--> 1
AdminSkin <--> 214
 
[/quote]
És a kód:
 
stock 
ini_cut(line[], name[], value[], const delim = \'=\') // author by Zsolesszka
{
new
ch,
pos = 0,
pos2 = 0,
bool:valid = true;
while((ch = line[pos++]) >= \' \')
{
while(line[pos] == \' \') pos++;
if(ch == delim) { valid = false; continue; }
if(valid)
   name[pos - 1] = ch, name[pos] = EOS;
else
   value[pos2++] = ch, value[pos2] = EOS;
}
return valid;
}

 
Megjegyzés:
Természetesen a string méretek megadásánál ügyelni kell a megfelelõ méretek megadására, a példában szerintem bõséges méreteket adtam meg, ha úgy kerül használatra akkor nem hiszem hogy gond lesz belõle, a hiba a következõ lenne: Ha túl hosszú nevet adna valaki a megjegyzésnek vagy az adatnak pl.: hblkahjdalhdaslkhflkhaslhxlkdhfaclhxlkdahflxahfxlahjfalxfdasfasdhflkas=2318732187632187632187361283762817362871638 de nem hiszem hogy ilyen extrém hosszú elnevezésekkel látna el bárki is valamilyen adatot.  :D
« Utoljára szerkesztve: 2014. március 25. - 15:13:16 írta ɐʞzssǝlosz »

ini_cut
« Válasz #1 Dátum: 2013. február 02. - 07:46:48 »
0 Show voters
Hehe, PM-ben pont ilyenre gondoltam!  :thumbsup: :thumbsup:
Köszönöm!  :D :D
« Utoljára szerkesztve: 2013. február 07. - 06:31:34 írta Virgonc »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal