Szerző Téma: Fájlban keresés  (Megtekintve 757 alkalommal)

Fájlban keresés
« Dátum: 2013. február 01. - 17:55:20 »
0 Show voters
Hali!
Hogy tudnám megoldani azt, hogy egy adott fájlban keressen egy változót és ha megtalálta, akkor álljon le a keresés és zárja be a fájlt. Ha nem találta meg akkor mondjuk print-eljen ki valamit?
Az alap fájlkezelõt használom, ami a_samp-ben van!
Köszönöm!

Fájlban keresés
« Válasz #1 Dátum: 2013. február 01. - 18:34:29 »
0 Show voters
new
line[128],
key[64],
value[64];
while(fread(file, line))
{
if(sscanf(line, \"p<=>s[64]s[64]\", key, value))   printf(\"Invalid INI format line\");
else
{
printf(\"%s <--> %s\", key, value);
}
}

 
Edit:
Vagy próbáld ezt használni: http://sampforum.hu/index.php?topic=37808.0
« Utoljára szerkesztve: 2013. február 01. - 20:33:44 írta ɐʞzssǝlosz »

Fájlban keresés
« Válasz #2 Dátum: 2013. február 02. - 07:44:50 »
0 Show voters
Igazából ez egy saját aka rendszer lenne, eddig minden szép és jó, ki is olvassa, le is menti ip alapján külön-külön txt fájlokba a neveket, csak annyi a problémám, hogy nem veszi észre, ha már egyszer belevan írva.
Tehát egy txt fájl így néz ki: a neve az ip, pl: 245.111.532.txt, a tartalma pedig a nevek, pl:
Virgonc
Virgo.Onc,
VirgonCC
itt van a kódom:
 
new File:TLGMWfileaka, filepath2[256], filename[17], filestring2[256], akastring[70], pName44[MAX_PLAYER_NAME], plrIP44[16];
    GetPlayerName(playerid,pName44,MAX_PLAYER_NAME);
GetPlayerIp(playerid, plrIP44, sizeof(plrIP44));
    format(filename,sizeof(filename),\"tlgmultiwar/logok/aka/%s.txt\",plrIP44);
    if(fexist(filename))
    {
        printf(\"létezik\");
        TLGMWfileaka = fopen(filename,io_read);
        akabool=true;
        while(fread((fopen(filename,io_read)), akastring))
        {
            printf(\"%s\",akastring);
        if(!strcmp(akastring, pName44), true)==1)
        {
      akabool=false;
        }
      }
      if(akabool==true)
      {
          fclose(TLGMWfileaka);
            TLGMWfileaka = fopen(filename,io_append);
            format(filestring2,sizeof(filestring2),\"%s\\r\\n\",pName44);
   fwrite(TLGMWfileaka,filestring2);
   fclose(TLGMWfileaka);
   printf(\"létrehozom\");
}
else if(akabool==false)
{
           fclose(TLGMWfileaka);
}
    }
    else
    {
        format(filepath2,sizeof(filepath2),\"tlgmultiwar/logok/aka/%s.txt\",plrIP44);
        TLGMWfileaka = fopen(filepath2,io_append);
        format(filestring2,sizeof(filestring2),\"%s\\r\\n\",pName44);
fwrite(TLGMWfileaka,filestring2);
fclose(TLGMWfileaka);
    }

 
A printf-eket amúgy nem írja ki, lehet azért, mert nincs benne változó. Azt már csak kínomban raktam oda.

Fájlban keresés
« Válasz #3 Dátum: 2013. február 02. - 13:22:58 »
0 Show voters
stock
teszt()
{
new
bool:aka = true,
File:F,
str[256],
pName[MAX_PLAYER_NAME],
IP[16];
// GetPlayerName(playerid, pName44, MAX_PLAYER_NAME);
// GetPlayerIp(playerid, IP, sizeof(IP));
IP = \"127.0.0.1\";
pName = \"virgonc\";
format(str, sizeof str, \"%s.txt\", IP); //tlgmultiwar/logok/aka/%s.txt
F = fopen(str, io_readwrite);
if(F)
{
while(fread(F, str))
{
   StripNewLineY(str);
   if(!strcmp(str, pName, true))
   {
      aka = false;
      break;
   }
}
if(aka)
{
   format(str, sizeof str, \"%s\\r\\n\", pName);
   fwrite(F, str);
} else {
   printf(\"Már mentett felhasználónév: %s IP: %s\", pName, IP);
}
fclose(F);
} else {
format(str, sizeof str, \"%s.txt\", IP); //\"tlgmultiwar/logok/aka/%s.txt\"
F = fopen(str, io_write);
format(str, sizeof str, \"%s\\r\\n\", pName);
fwrite(F, str);
fclose(F);
}
}
stock
StripNewLineY(str[]) //ysi_misc.own
{
new
l = strlen(str);
while (l-- && str[l] <= \' \') str[l] = \'\\0\';
}

Fájlban keresés
« Válasz #4 Dátum: 2013. február 02. - 14:17:57 »
0 Show voters
Most meg akkor sem ment, ha új névvel vagyok fent.
 
stock AkaEllenorzes(playerid)
{
    new File:TLGMWfileaka, filepath2[256], filename[17], filestring2[256], akastring[MAX_PLAYER_NAME], pName44[MAX_PLAYER_NAME], plrIP44[16];
    GetPlayerName(playerid,pName44,MAX_PLAYER_NAME);
GetPlayerIp(playerid, plrIP44, sizeof(plrIP44));
    format(filename,sizeof(filename),\"tlgmultiwar/logok/aka/%s.txt\",plrIP44);
    TLGMWfileaka = fopen(filename,io_readwrite);
    if(!fexist(filename))
    {
        format(filepath2,sizeof(filepath2),\"tlgmultiwar/logok/aka/%s.txt\",plrIP44);
        format(filestring2,sizeof(filestring2),\"%s\\r\\n\",pName44);
fwrite(TLGMWfileaka,filestring2);
fclose(TLGMWfileaka);
    }
    else
    {
        akabool=true;
        while(fread(TLGMWfileaka, akastring))
        {
   StripNewLineY(akastring);
        if(!strcmp(akastring, pName44, true))
   {
      akabool=false;
      break;
        }
      }
      if(akabool==true)
      {
            format(filestring2,sizeof(filestring2),\"%s\\r\\n\",pName44);
   fwrite(TLGMWfileaka,filestring2);
}
    }
fclose(TLGMWfileaka);
}
« Utoljára szerkesztve: 2013. február 02. - 14:22:20 írta Virgonc »

Fájlban keresés
« Válasz #5 Dátum: 2013. február 02. - 16:46:42 »
0 Show voters
Mert rosszul írtad át.
Minek tetted vissza azt a sok felesleges változót?
Szerinted miért használtam kettõ fopen-t?
Ha nem érted mi miért van akkor ne próbálj a sorrenden meg a kialakításon változtatni.
A
 
    if(!fexist(filename))
    {

 
alatt olyan fájlba próbálsz adatot írni amit eleve nem sikerült megnyitni hiszen ! felkiáltó jellel letagadtad, aztán mivel nem sikerült megnyitni fopen-el se próbáltad meg létrehozni.
Használd úgy ahogy van, ne változtass a sorrenden, csak a megfelelõ dolgokat írd át, mint elérési útvonal, és ahogy helyesen megadtad a playerid változót az eljárásban, nem kell hülye elnevezéseket adni a változóknak, meg feleslegesen létrehozni többet!
« Utoljára szerkesztve: 2013. február 02. - 16:50:45 írta ɐʞzssǝlosz »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal