Szerző Téma: Fájlból olvasás/fájlba írás sscanfal  (Megtekintve 1544 alkalommal)

Nem elérhető nyE

  • 1745
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Dátum: 2012. július 18. - 18:54:01 »
0 Show voters
Helló! Valaki írna nekem egy példát arra, hogyan lehet sscanfal fájlba írni és fájlból olvasni?

Nem elérhető shadee

  • 1073
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #1 Dátum: 2012. július 18. - 19:02:51 »
0 Show voters
erre én is kiváncsi lennék  ;D

Fájlból olvasás/fájlba írás sscanfal
« Válasz #2 Dátum: 2012. július 18. - 19:09:21 »
0 Show voters
Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!

Nem elérhető nyE

  • 1745
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #3 Dátum: 2012. július 18. - 19:28:35 »
0 Show voters
Idézetet írta: kadaradam date=1342631361\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic
Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!
 
Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom :D

Nem elérhető Norby

  • 1575
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #4 Dátum: 2012. július 18. - 19:30:31 »
0 Show voters
Idézetet írta: Antonyo date=1342632515\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic


Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!
 
Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom :D
[/quote]
Kezdjük ott, hogy te most mit akarsz? Fájlkezelõ rendszer kell, mert sscanfal nem tudsz fájlba írni és olvasni max feldarabolod!
Fájlkezelõ rendszerek kezdõknek:
Dini

Nem elérhető nyE

  • 1745
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #5 Dátum: 2012. július 18. - 19:34:31 »
0 Show voters
Idézetet írta: Norby date=1342632631\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic


 

Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!
 
Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom :D
[/quote]
Kezdjük ott, hogy te most mit akarsz? Fájlkezelõ rendszer kell, mert sscanfal nem tudsz fájlba írni és olvasni max feldarabolod!
Fájlkezelõ rendszerek kezdõknek:
Dini
 
[/quote]
Úgylátszik nemtudom, hogy mit is akarok :D
Akkor erre a feldarabolásra esetleg egy pédát valaki? De lehetõleg ne mysql-es legyen . . .

Nem elérhető Norby

  • 1575
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #6 Dátum: 2012. július 18. - 19:37:45 »
0 Show voters
//------------------------------------------------------------------------------
// Név: sscanf példaszkript, magyarázatokkal
// Készítõ: GameStar
// sscanf plugin, eredeti dokumentáció: Y_Less (a példák Y_Less dokumentációjára épülnek!)
// Web: gtaforum.hu, y-less.com
// Frissítve: 2012. május 20.
//------------------------------------------------------------------------------
#include <a_samp>
// Az sscanf funkció beágyazása ebbe a szkriptbe
#include <sscanf2>
// Ha egy példa nem kell, akkor tegyél az alábbi sorokban \"//\"-t elé. (kommenteld)
// Ha pedig kell, akkor töröld ki elõle.
#define EXAMPLE1
#define EXAMPLE2
#define EXAMPLE3
#define EXAMPLE4
#define EXAMPLE5
#define EXAMPLE6
#define EXAMPLE7
#define EXAMPLE8
//#define EXAMPLE9
// A példák a szkript indulásakor futnak le. Ha elindítod a szkriptet, akkor
// ellenõrizheted a leírtakat.
public OnFilterScriptInit()
{
    #if defined EXAMPLE1
// 1. PÉLDA: Az alap
    // Meg kell adni egy bemenetet, egy formátumot, és céltárolókat, amikbe az
    // értékeket szeretnéd menteni a bemenetbõl a formátum alapján.
    new
        EXAMPLE1_var0[32],
        EXAMPLE1_var1;
   
    // Az alábbi kód lefutásával az EXAMPLE1_var0 értéke \"üdv\", az EXAMPLE1_var1 értéke
    // pedig 10 lesz. A formátum egy 32 cellás karakterlánc és egy egész szám.
    sscanf(\"üdv 10\", \"s[32]i\", EXAMPLE1_var0, EXAMPLE1_var1);
    printf(\"EXAMPLE1_var0: %s\\nEXAMPLE1_var1: %i\", EXAMPLE1_var0, EXAMPLE1_var1);
    #endif
   
    #if defined EXAMPLE2
// 2. PÉLDA: Tömbök
    // A függvény lehetõvé teszi, hogy egy tömbbe mentsük bele az értékeket.
    new
        EXAMPLE2_array0[5];
    // Az alábbi kód lefutásával az EXAMPLE2_array0 minden indexbe sorra felveszi
    // az értékeket
    sscanf(\"1 2 3 4 5\", \"a<i>[5]\", EXAMPLE2_array0);
    for(new i = 0; i < sizeof(EXAMPLE2_array0); i++)
        printf(\"EXAMPLE2_array0[%i]: %i\", i, EXAMPLE2_array0);
    #endif
   
    #if defined EXAMPLE3
// 3. PÉLDA: Enum
    enum EXAMPLE3_enum0
    {
        e_integer,
        Float:e_float,
        e_string[32],
        e_character
    }
    new
        EXAMPLE3_var0[EXAMPLE3_enum0];
    // Az alábbi kód lefutásával az EXAMPLE3_var0 minden indexe felvesz egy értéket
    // a megadott formátum alapján
    sscanf(\"1 12.0 Bob c\", \"e<ifs[32]c>\", EXAMPLE3_var0);
    printf(\"EXAMPLE3_var0[e_integer]: %i\", EXAMPLE3_var0[e_integer]);
    printf(\"EXAMPLE3_var0[e_float]: %f\", EXAMPLE3_var0[e_float]);
    printf(\"EXAMPLE3_var0[e_string]: %s\", EXAMPLE3_var0[e_string]);
    printf(\"EXAMPLE3_var0[e_character]: %c\", EXAMPLE3_var0[e_character]);
    #endif
   
    #if defined EXAMPLE4
// 4. PÉLDA: Az úgynevezett \"csendes szekció\"
    // Amelyik formátumszakaszt {} közé rakjuk, azt a függvény késõbb érzékeli,
    // de nem veszi figyelembe.
    new
        EXAMPLE4_var0,
        EXAMPLE4_var1;
    // Az alábbi kód lefutásával az EXAMPLE3_var0 értéke -100 lesz, mert az elsõ egész
    // számot (42) nem vesszük figyelembe.
    sscanf(\"42 -100\", \"{i}i\", EXAMPLE4_var0);
    printf(\"EXAMPLE4_var0: %i\", EXAMPLE4_var0);
    // Az alábbi kód lefutásával az EXAMPLE3_var1 értéke 42 lesz, mert a második egész
    // számot (-100) nem vesszük figyelembe.
    sscanf(\"42 -100\", \"i{i}\", EXAMPLE4_var1);
    printf(\"EXAMPLE4_var1: %i\", EXAMPLE4_var1);
    #endif
   
    #if defined EXAMPLE5
// 5. PÉLDA: Szöveg keresése
    // \'\' közé rakva kereshetõ egy szöveg. Ilyenkor a függvény a szöveg pozíciójára
    // ugrik, ezért a korábbi és az új pozíció közötti dolgokat nem fogja figyelembe
    // venni. Az alábbi példa is szemlélteti ezt.
    // Formátumként megadunk egy egész számot (ami az elsõ egész szám - 10), amit a
    // függvény be is olvas. Majd megkerestetjük vele a szövegben a \"szöveg\" részt,
    // és végül lekérjük az utolsó egész számot (ami a 12). A 11 kimarad, mert a keresés
    // elõtt még nem lett figyelembe véve, utána pedig a függvény nem is törõdött vele,
    // mert a keresés miatt átugrott azon a részen.
    new
        EXAMPLE5_var0,
        EXAMPLE5_var1;
    sscanf(\"10 11 szöveg 12\", \"i\'szöveg\'i\", EXAMPLE5_var0, EXAMPLE5_var1);
    printf(\"EXAMPLE5_var0: %i\\nEXAMPLE5_var1: %i\", EXAMPLE5_var0, EXAMPLE5_var1);
    #endif
   
    #if defined EXAMPLE6
// 6. PÉLDA: Az elválasztók
    // Ha a bemeneti szövegekben az értékeket valami elválasztja (mondjuk vesszõ), akkor
    // megadhatjuk a függvénynek, hogy azok mentén válassza szét az értékeket.
    // A formátuma p<elválasztó>, tehát vesszõnél p<,>
    new
        EXAMPLE6_var0,
        EXAMPLE6_var1[12],
        EXAMPLE6_var2;
    sscanf(\"1,nem,3\", \"p<,>is[12]i\", EXAMPLE6_var0, EXAMPLE6_var1, EXAMPLE6_var2);
    printf(\"EXAMPLE6_var0: %i\\nEXAMPLE6_var1: %s\\nEXAMPLE6_var2: %i\", EXAMPLE6_var0, EXAMPLE6_var1, EXAMPLE6_var2);
    #endif
   
    #if defined EXAMPLE7
// 7. PÉLDA: Választható formátumok
    // Ugyanaz, mint a sima formátum, viszont ha a függvény nem talál neki értéket,
    // abban az esetben az általunk megadott \"alapértelmezett értéket\" adja neki.
    // Csak nagybetûvel kell írni, és meg kell adni az alapértelmezett értéket.
    new
        EXAMPLE7_var0,
        EXAMPLE7_var1[16],
        EXAMPLE7_var2[5];
    // Itt nem adunk meg bemeneti szöveget, a választható egész szám alapértelmezett értékét
    // pedig 12-re állítjuk. A függvény nem fog találni értéket, így automatikusan 12-t fog
    // adni.
    sscanf(\"\", \"I(12)\", EXAMPLE7_var0);
    printf(\"EXAMPLE7_var0: %i\", EXAMPLE7_var0);
   
    // Karakterlánccal
    sscanf(\"\", \"S(alapértelmezett)[16]\", EXAMPLE7_var1);
    printf(\"EXAMPLE7_var1: %s\", EXAMPLE7_var1);
   
    // Tömbbel
    sscanf(\"\", \"A<i>(1, 2, 3, 4, 5)[5]\", EXAMPLE7_var2);
    for(new i = 0; i < sizeof(EXAMPLE7_var2); i++)
        printf(\"EXAMPLE7_var2[%i]: %i\", i, EXAMPLE7_var2);
    #endif
   
    #if defined EXAMPLE8
// 8. PÉLDA: Egyéni formátumok
    // Lehetõségünk van saját formátumokat csinálni. Csak egy SSCANF: elõtag kell.
    // Ennek is van választható, és sima fajtája is. A választható esetében, ha nem tudja
    // meghívni a saját formátum eljárását, akkor az alapértelmezett értéket adja.
    new
        EXAMPLE8_var0[16],
        EXAMPLE8_var1,
        EXAMPLE8_var2[16],
        EXAMPLE8_var3;
    sscanf(\"GameStar PLAYER_STATE_PASSENGER\", \"s[16]k<playerstate>\", EXAMPLE8_var0, EXAMPLE8_var1);
    // Az EXAMPLE7_var1 értéke 3 kell, hogy legyen.
    printf(\"EXAMPLE8_var0: %s\\nEXAMPLE8_var1: %i\", EXAMPLE8_var0, EXAMPLE8_var1);
   
    // Ha a bemenetben nincs megadva az állapot szövegesen, akkor az alapértelmezett
    // értéket (PLAYER_STATE_PASSENGER) kapjuk
    sscanf(\"GameStar\", \"s[16]K<playerstate>(PLAYER_STATE_PASSENGER)\", EXAMPLE8_var2, EXAMPLE8_var3);
    // Az EXAMPLE8_var3 értéke 3 kell, hogy legyen.
    printf(\"EXAMPLE8_var2: %s\\nEXAMPLE8_var3: %i\", EXAMPLE8_var0, EXAMPLE8_var1);
    #endif
   
    #if defined EXAMPLE9
// 9. PÉLDA: Összetettebb használat
    // A függvénnyel akár egész komplex formátumokat is csinálhatunk, íme egy példa:
    enum EXAMPLE9_enum0
    {
        Float:e_float,  // f
        e_string[32],   // s[32]
        e_character,    // c
        e_hex           // h
    }
    new
        EXAMPLE9_var0[EXAMPLE9_enum0],
        EXAMPLE9_var1,
        Float:EXAMPLE9_var2[4];
    // unformat-ot is írhatunk, az is elfogadott...
    unformat(
        \"üdv 22 nem PLAYER_STATE_DRIVER 20.0 gtaforum.hu g FF00DD\",
        \"{s[4]}\'nem\'k<playerstate>e<fs[32]ch>A<f>(1.434, 2.233, 3.262 ,4.176)[4]\",
        // A formátum szöveges magyarázata:
        // - Az elsõ szöveget (üdv) kihagyjuk a \"csendes szekcióval\".
        // - A 22-t is kihagyjuk, mert rákeresünk a következõ szövegre (nem).
        // Azzal sem törõdünk.
        // - A következõ szövegrõl (PLAYER_STATE_DRIVER) lekérdezzük a saját
        // formátumunkkal, hogy milyen érték tartozik hozzá.
        // - Ezután az enumba tartozó értékeket olvassuk ki:
        //      - A lebegõpontos értéket (20.0)
        //      - A karakterláncot (gtaforum.hu)
        //      - A karaktert (g)
        //      - A tizenhatos számrendszer beli számot (FF00DD)
        // - Választható tömbformátummal az alapértelmezett lebhegõpontos értékeket
        // fogjuk kapni, mivel nincs megadva a 4 lebegõpontos érték
        EXAMPLE9_var1,  // k<playerstate>
        EXAMPLE9_var0,  // e<fs[32]ch>
        EXAMPLE9_var2   // A<f>(1.434, 2.233, 3.262 ,4.176)[4]
    );
    printf(\"EXAMPLE9_var1: %i\", EXAMPLE9_var1);
    printf(\"EXAMPLE9_var0[e_float]: %.1f\", EXAMPLE9_var0[e_float]);
    printf(\"EXAMPLE9_var0[e_string]: %s\", EXAMPLE9_var0[e_string]);
    printf(\"EXAMPLE9_var0[e_character]: %c\", EXAMPLE9_var0[e_character]);
    printf(\"EXAMPLE9_var0[e_hex]: %x\", EXAMPLE9_var0[e_hex]);
    for(new i = 0; i < sizeof(EXAMPLE9_var2); i++)
        printf(\"EXAMPLE9_var2[%i]: %.3f\", i, EXAMPLE9_var2);
    #endif
   
    return 1;
}
// (A 8. és 9. példához) egy egyéni formátum. Megadja szöveges adat alapján számmal, hogy a játékosnak
// éppen mi az állapota.
SSCANF:playerstate(string[])
{
    // Ha a szöveg már szám formátumú
    if (\'0\' <= string[0] <= \'9\')
    {
        // Lekérjük az értékét
        new
            ret = strval(string);
        // Ha a lekért érték 0, vagy kisebb vagy egyenlõ mint 9, akkor visszaadjuk
        if (0 <= ret <= 9)
        {
            return ret;
        }
    }
    else if (!strcmp(string, \"PLAYER_STATE_NONE\")) return 0;
    else if (!strcmp(string, \"PLAYER_STATE_ONFOOT\")) return 1;
    else if (!strcmp(string, \"PLAYER_STATE_DRIVER\")) return 2;
    else if (!strcmp(string, \"PLAYER_STATE_PASSENGER\")) return 3;
    else if (!strcmp(string, \"PLAYER_STATE_WASTED\")) return 7;
    else if (!strcmp(string, \"PLAYER_STATE_SPAWNED\")) return 8;
    else if (!strcmp(string, \"PLAYER_STATE_SPECTATING\")) return 9;
   
    // Ha nem találtunk a megadott szöveghez azonosítót, akkor -1-el tér vissza
    return -1;
}

Fájlból olvasás/fájlba írás sscanfal
« Válasz #7 Dátum: 2012. július 18. - 19:38:43 »
0 Show voters
new query[87],line[50],adat[2];
format(query, sizeof(query), \"SELECT `Pont`,`Penz` FROM `users` WHERE `Name` = \'%s\' LIMIT 1\", GetPlayerNameEx(playerid));//Kiválasztjuk a játékos pontjait és pénzét!
mysql_query(query);
mysql_store_result();
mysql_fetch_row(line);//itt eltároljuk az értéket,ha pl 10 pont van az adatbázisban és $1000 akkor így néz ki,amit beleírtál a változóba: 10|1000
mysql_free_result();
sscanf(line, \"p<|>ii\",adat[0],adat[1]);//Most jöjjön a feldarabolás:Megadjuk neki a változót,amibe el van tárolva a string,majd a 2db kész intigert eltároljuk az adat[0],adat[1] változóban!

 
Magyarázat:
p<|> = Melyik karakternél legyen a feldarabolás,ez esetben: |
i = integer(szám)
« Utoljára szerkesztve: 2012. július 18. - 19:40:50 írta kadaradam »

Nem elérhető Norby

  • 1575
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #8 Dátum: 2012. július 18. - 19:40:22 »
0 Show voters
Idézetet írta: kadaradam date=1342633123\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic

new query[87],line[50],adat[2];
format(query, sizeof(query), \"SELECT `Pont`,`Penz` FROM `users` WHERE `Name` = \'%s\' LIMIT 1\", GetPlayerNameEx(playerid));//Kiválasztjuk a játékos pontjait és pénzét!
mysql_query(query);
mysql_store_result();
mysql_fetch_row(line);//itt eltároljuk az értéket,ha pl 10 pont van az adatbázisban és $1000 akkor így néz ki,amit beleírtál a változóba: 10|1000
mysql_free_result();
sscanf(line, \"p<|>ii\",adat[0],adat[1]);//Most jöjjön a feldarabolás:Megadjuk neki a változót,amibe el van tárolva a string,majd a 2db kész intigert eltároljuk az adat[0],adat[1] változóban!

 
Magyarázat:
p<|> = Melyik karakternél legyen a feldarabolás,ez esetben: |
i = intiger(szám)
 
Azt írta lehetõleg ne mysql, de ez jó példa ebbõl is meg lehet érteni. ;)

Fájlból olvasás/fájlba írás sscanfal
« Válasz #9 Dátum: 2012. július 18. - 19:42:06 »
0 Show voters
Idézetet írta: Antonyo date=1342632515\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic


Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!
 
Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom :D
[/quote]
Ennél a hozzászólásnál még nem írta,mert én amikor megláttam ezt,akkor írtam a példámat! :)

Nem elérhető Norby

  • 1575
    • Profil megtekintése
Fájlból olvasás/fájlba írás sscanfal
« Válasz #10 Dátum: 2012. július 18. - 19:43:53 »
0 Show voters
Idézetet írta: kadaradam date=1342633326\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"24629\" data-ipsquote-contentclass=\"forums_Topic


 

Sscanf az nem fájlkezelõ! :)
Általában feldarabolásra szokták használni,pl.:BlueG:MySQL plugin R6,ott,ha ki választasz pár dolgot,akkor így kapod meg az értéket:
 
Pisti|Mari|Jani

 
és ezt szokták feldarabolni a | jel mentén!
 
Egy példát tudnál esetleg írni rá? Mert nemnagyon vágom :D
[/quote]
Ennél a hozzászólásnál még nem írta,mert én amikor megláttam ezt,akkor írtam a példámat! :)
 
[/quote]
oké, bocs én nem figyeltem. :)

Fájlból olvasás/fájlba írás sscanfal
« Válasz #11 Dátum: 2012. július 18. - 20:17:26 »
0 Show voters
fájlba írni ugyanúgy, mint alap esetben
 
fwrite(\"filename\", \"változóneve=változóértéke\");

 
olvasni pedig
 
new line[128];
while(fread(\"filename\", line)) {
    if(sscanf(line, \"p<=>ss\", változóneve, változóértéke)) continue; //ha nem egyezik, továbbmegy a következõ sorra
    //változóértéket írhatod arra, amit szeretnél visszakapni, tehát szám, illetve lebegõpontos is lehet.
    ha pedig egyezik, akkor megkapod a két értéket
}

 
Vagy valami ilyesmi xD

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal