Szerző Téma: Fájl sorainak lekérdezése  (Megtekintve 2902 alkalommal)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Dátum: 2014. Március 25. - 13:40:38 »
0 Show voters
Sziasztok! Megkérdezném, hogy hogyan tudnám lekérdezni egy fájl sorait? Konkrétan azt szeretném, hogy egy dini fájl minden sorának értékét lekérdezem és ami nem 0 azt kiírni egy dialogba.

Nem elérhető ZoleBB

  • 480
  • ZoleBB
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #1 Dátum: 2014. Március 25. - 14:08:02 »
0 Show voters

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #2 Dátum: 2014. Március 25. - 14:12:58 »
0 Show voters
Nem teljesen. Én azt szeretném, hogy fájlom sorainak értékét olvassa ki.
Pl. van 2 betûm:
a=5
b=6
És akkor azt szeretném, hogy dinibõl kiolvasva ezt a 2 értéket jelenítse meg nekem dialogba. Tehát, hogy a listitem dialog így nézzen ki formailag: 5\\n6.

Nem elérhető ZoleBB

  • 480
  • ZoleBB
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #3 Dátum: 2014. Március 25. - 14:16:18 »
0 Show voters
Idézetet írta: doboka98 date=1395753178\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"47353\" data-ipsquote-contentclass=\"forums_Topic
Nem teljesen. Én azt szeretném, hogy fájlom sorainak értékét olvassa ki.
Pl. van 2 betûm:
a=5
b=6
És akkor azt szeretném, hogy dinibõl kiolvasva ezt a 2 értéket jelenítse meg nekem dialogba. Tehát, hogy a listitem dialog így nézzen ki formailag: 5\\n6.
 
Ja értem, akor én olvastam félre.
Példa:
 
new
a = 5,
b = 3;
if (a == 5 && b != 3)
{
print(\"Won\'t be printed\");
}

 Forrás: Wiki SA-MP

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #4 Dátum: 2014. Március 25. - 14:20:05 »
0 Show voters
De nem így :D . Egy ciklus kéne nekem, ami lefut a fájl minden során és kiírja azok soroknak értékeit. :D Nem tudom ennél jobban elmagyarázni.
« Utoljára szerkesztve: 2014. Március 25. - 14:25:04 írta doboka98 »

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Fájl sorainak lekérdezése
« Válasz #5 Dátum: 2014. Március 25. - 14:37:33 »
0 Show voters
http://wiki.sa-mp.com/wiki/Fread
Reading Line-by-Line részt nézd meg ebbõl menni fog vagy kell még segítség?
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #6 Dátum: 2014. Március 25. - 14:39:05 »
0 Show voters
És ha valamivel (pl. sscanf) feladarabolnád /n szerint?
 

//A dinit nem annyira tudom, itt le kell kérned a fájlod teljes tartalmát a karilanc stringbe.
new karlanc[128],szam1,szam2;
sscanf(karlanc, \"d<\\n>d\", szam1, szam2)
//Mostmár azt csinálsz a számaiddal, amit akarsz.

 
Richard: Én is onnan néztem, ezen az elven csinálta, csak elavultabb megoldással.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Fájl sorainak lekérdezése
« Válasz #7 Dátum: 2014. Március 25. - 14:44:11 »
0 Show voters
soronként beolvassa a fájlt és összefûzi az = után levõ szöveget 1 stringbe...ezt kell csinálnia :)
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #8 Dátum: 2014. Március 25. - 15:08:08 »
0 Show voters
Köszönöm a segítséget, nem sikerült megoldanom, de ki kell találnom valami mást. Nem tudom, hogy lehet megoldani egy táska tartalmának lekérdezését :D . Ennyi.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Fájl sorainak lekérdezése
« Válasz #9 Dátum: 2014. Március 25. - 15:27:22 »
+1 Show voters
ezt próbáld ki:
 
    new string[64],dialog[128],value;
    new File:example = fopen(\"taska.txt\", io_read);
    if(example)
    {
        while(fread(example, string))
        {
            if(sscanf(string,\"p<=>{s[16]}i\",value)) { continue; }
            //
            if(strlen(dialog))
            { format(dialog,sizeof(dialog),\"%s\\n%d\",dialog,value); }
            else
            { format(dialog,sizeof(dialog),\"%d\",value); }
        }
        fclose(example);
    }
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #10 Dátum: 2014. Március 25. - 15:30:12 »
0 Show voters
Valahogy így próbáltam én is. Elmagyarázod, hogy mit jelent ez a sor? Konkrétabban ez érdekel: p<=>{s[16]}i .
 
if(sscanf(string,\"p<=>{s[16]}i\",value))

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #11 Dátum: 2014. Március 25. - 15:37:04 »
0 Show voters
Ha jól értem, akkor a fájl tartalmát az egyenlõség jelek mentén darabolja fel, a string típusú dolgokat (pl. azt, hogy \"a\") kihagyja, majd az integer típusú dolgokat (amely ugye egy szám lesz, pl. az \"a=3\"-nál a 3) a value változóba rakja. Pl. annál, hogy \"a=3\" az = jelek mentén fogja feldarabolni a dolgot, az a betût nem fogja figyelembe venni, és csak a 3-ast tárolja el. Vagy legalábbis valami ilyesmi, de ha nekem nem sikerült, majd más érthetõbben elmagyarázza.

Nem elérhető Kovacs_Richard

  • 1743
  • HRP Fejlesztő
  • Discord: Kovacs_Richard#0321
    • Profil megtekintése
    • Hun Role Play Web
Fájl sorainak lekérdezése
« Válasz #12 Dátum: 2014. Március 25. - 15:40:08 »
0 Show voters
http://forum.sa-mp.com/showthread.php?t=120356
szerintem ezt olvasd végig nagyon sokat tanulhatsz belõle :)
én is innen néztem :) emlékeztem régebbrõl hogy van ilyen lehetõség és utána néztem...
Régóta nem tevékenykedem, mint SA-MP scripter.
HRP Fejlesztő.

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
Fájl sorainak lekérdezése
« Válasz #13 Dátum: 2014. Március 25. - 15:41:29 »
0 Show voters
Aha, vágom, köszi :D . Most már csak az a baj, hogy rájöttem nekem nem fájlból kell kiolvassa, hanem az enumokat kell leolvassa szépen, amit betölt ebbõl a fájlból bejelentkezéskor. Bocsi srácok! :D Csak annyit kérdeznék, hogy egy enum listát hogyan kell leolvasni? :D :D

Fájl sorainak lekérdezése
« Válasz #14 Dátum: 2014. Március 25. - 15:46:00 »
+1 Show voters
Fájl sorainak beolvasása egy megadott fájlból, és kiíratása konzol ablakban.
 
        
new
File:F = fopen(\"dini.fuck\", io_read),
str[128];
if(F)
{
while(fread(F, str))
{
   print(str);
}
fclose(F);
}

 
Ezt kell úgy módosítani hogy a beolvasott sorokat feldarabolja valamilyen eljárás az = (egyenlõségjel) mentén, majd össze kell fûzzni egy karakterláncba a kapott eredményt amit ki kell íratni dialogba.
Sajnos egy ideje nem szkriptelek és semmi kedvem nincs tesztelgetni de hamar össze dobok valamit.
 
stock
akarmi(playerid, filename[])
{
new
File:F = fopen(filename, io_read), // Fájl megnyitása
str[128], // karakterlánc tárolása
dialogstring[256], // kimeneti, illetve a végeredmény tárolása
name[64], // Jelenleg nincs rá szükség csak az eljáráshoz kell
value[64]; // érték melyeket majd össze kell fûzni a dialogstring-be ha nem nulla persze karakterláncként beolvasva
if(F) // Fájl megnyitásának ellenõrzése
{
while(fread(F, str)) // Addig olvasunk amíg van sor
{
   if(ini_cut(str, name, value)) printf(\"Error. line: %s\", str); // Adat ellenõrzés és darabolás
            else
   {
      if(strval(value) != 0) // Ha nem nulla a value persze átalakítással mivel karakterláncként lett tárolva
      {
         strcat(dialogstring, value); // akkor összefûzés dialogstring változóba
         strcat(dialogstring, \"\\n\"); // új sor jel hozzáadása
      }
   }
}
//print(dialogstring);
fclose(F); // A megnyitott fájl bezárása
ShowPlayerDialog(playerid, 5432, DIALOG_STYLE_MSGBOX, \" \", dialogstring, \"Ok\", \"\"); // Megjelenítés
}
return 1;
}
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;
}

 
Persze az ini_cut helyett használhatod a sscanf-et is, vagy bármi mást ami képes feldarabolni neked a beolvasott karakterláncot egy megadott karakter mentén (=).


Edit:
Késõn olvastam a hozzászólást, van rá mód hogy végig futtass egy ciklus utasítással egy enum által tárolt adatokat amit aztán szintén össze tudsz fûzni egy adott karakterláncba melyet megtudsz jeleníteni.
« Utoljára szerkesztve: 2014. Március 25. - 15:48:19 írta ɐʞzssǝlosz »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal