Sziasztok!
Új nekem a Y_ini, ezért hozzátok fordulok megoldásért. Hogyan tudok egy megadott fájlon belül egyezést találni egy megadott karakterlánccal?
Példa
File.ini tartalma
Pista ma 10 éves
Sanyi beszólt
Macska
Az alma sajtos lett
xDDD Tudom, hülyeség xD Na vissza a lényegre...
Beírok egy parancsot, pl. /keres Macska, és megkeresi a fájlban azt. Ha létezik és egyezik, beállítja azt egy tárolóba. És akkor át tudom írni például a Macskát Kutyára, pl. /átír Kutya paranccsal (ekkora az eltárolt találatot, a Macskát írja át a Kutyára). Gondolom összehasonlítani egy kis strcmp-vel lehet, csak a Y_ini-s részét nem igazán tudom...
Remélem érhetõ, tudom, néha furcsán fogalmazok :D Üdvözlehelletem: Dfoglalo
Biztosan tartalmazza, és a lényeg, hogy megkeresse, és átírja. És az egész sorra gondolok, nem csak abból egy-két szóra, tehát teljes soros, pontos egyezés szükséges.
Ha tudod mit keresel egy adott fájlban akkor azt már eleve nem nehéz egy változóban eltárolni mivel már a kereséskor valószínû eltároltad egyben, így talán nem kell egy újabb változóba tárolni.[/quote]
Ez teljesen igaz. :P Tehát csak ki tudjam cserélni a megtalált sort...
Sor1 sasasd
Sor2 asder
Sor3 asder
Sor4 949494
Rákeresek a Sor-ra, nem ad ki semmit, de ha a Sor3 asder-re, akkor megtalálja azt, és kicseréli másra, amit majd én megadok.
Azt talán legegyszerûbben úgy tudnád ha betöltenéd az egész fájl tartalmát egy elég nagy változóba, ehhez tudni kellene mekkora adatot is tartalmaz a fájl vagyis hány karaktert.
Na mindegy, de sokkal jobban járnál ha sql-t, vagy mysql-t használnál erre a célra.
#include <a_samp>
stock
StripNL(str[])
{
new
i = strlen(str);
while (i-- && str <= \' \') str = \'\\0\';
}
stock
bool:search(const filename[], source[]) // A legelsõ találatnál leáll
{ new
str[128],
File:F = fopen(filename, io_read);
if(F)
{
while(fread(F, str))
{
StripNL(str);
if(strcmp(str, source, true) == 0)
{
fclose(F);
return true;
}
}
fclose(F);
}
return false;
}
stock
replace(const filename[], source[], dest[]) // Az összes egyezést kicseréli
{
new
big_str[2048],
str[128],
File:F = fopen(filename, io_read);
if(F)
{
while(fread(F, str))
{
StripNL(str);
if(strcmp(str, source, true) == 0)
{
format(big_str, sizeof big_str, \"%s%s\\r\\n\", big_str, dest);
} else {
strcat(big_str, str);
strcat(big_str, \"\\r\\n\");
}
}
fclose(F);
if((F = fopen(filename, io_write)))
{
fwrite(F, big_str);
fclose(F);
}
}
}
#define FILENAME \"read.txt\"
public
OnFilterScriptInit()
{
// fremove(FILENAME);
// new
// File:F = fopen(\"read.txt\", io_write);
// if(F)
// {
// fwrite(F, \"sasasd\\r\\nasder\\r\\nasder\\r\\n949494\\r\\n\");
// fclose(F);
// }
new
str[128];
str = \"asder\";
if(search(FILENAME, str))
{
printf(\"\\nA keresett rész megtalálható a fájlban: %s\\n\", str);
replace(FILENAME, str, \"pamkutya\");
}
return 1;
}