Szerző Téma: Y_ini Keresés  (Megtekintve 943 alkalommal)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Y_ini Keresés
« Dátum: 2013. május 21. - 17:33:27 »
0 Show voters
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

 
Spoiler for A példámra...:
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

Y_ini Keresés
« Válasz #1 Dátum: 2013. május 22. - 14:00:47 »
0 Show voters
A példád rossz mivel Y:ini-vel ahogy leírtad nem igazán tudod megvalósítani, igaz a fent leírt példára meg lehetne oldani de a továbbiakban nem tudnád hasznát venni.
Az adatok tárolásának lényegét nem érted még.
Gyakorlatilag kettõ oszlopból áll, és teljesen hasonlít akár a pawn változókra is.
Van egy key[] és egy value[] azaz egy kulcs illetve egy érték melyet általában az egyenlõség jellel különítenek el.
A fájlban így néz ki most példaként:
 

Kulcs oszlop        (a kulcs és az érték megkülönböztetésére szolgáló jel)     Érték oszlop
----------------------------------------------------------------------------------------------------------------
Neve                   =                                                                                         Pista
Kor                      =                                                                                        10
Állat                     =                                                                                        Macska
[/quote]
Y_ini-vel átírhatod az Állat értékét a következõ sorral:  (a Macska helyett Kutya)
INI_WriteString(file, \"Állat\", \"Kutya\");  ( <- ebbõl a file változó így néz ki:            new INI:file = INI_Open(\"teszt.txt\");
Az elv egyébként megegyezik a dini fájlkezelõvel, mármint az adat tárolás terén illetve a kulcsok terén.
Kulcsok nélkül (Key) így nézne ki az adat:
Pista
10
Macska
Kulcsok azért kellenek mert egy idõ után nem tudnád mi micsoda.

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Y_ini Keresés
« Válasz #2 Dátum: 2013. május 22. - 14:23:23 »
0 Show voters
Nézd ɐʞzssǝlosz, értem a lényegét, de nem fogok több száz koordinátát elnevezni... Ez megint csak egy olyan dolog, amit nem szeretnék így nyilvánosan megosztani, mert szeretném a saját ötletemként megtartani, és megvalósítani azt. Szándékosan írtam a példát akármi = asd helyett simán asd-dal, mert úgy kéne... De ha nem megoldható, azt kell írni, hogy nem megoldható, és kész. Amit te leírtál, úgy dinivel is meg tudom oldani a dolgokat. Azért köszi, de nem írtál új információkat a számomra.
 
Idézetet írta: ɐʞzssǝlosz date=1369224047\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"37659\" data-ipsquote-contentclass=\"forums_Topic
Kulcsok azért kellenek mert egy idõ után nem tudnád mi micsoda.
 
Nem is kell tudnom, mert simán ki kéne keresni valamit, ami meg van adva... Ennyi a lényeg. Aztán azt elrakni egy tárolóba.
 

igaz a fent leírt példára meg lehetne oldani de a továbbiakban nem tudnád hasznát venni.
 
[/quote]
De, hasznát tudnám venni, hidd el. És ha megoldható, akkor hogyan? Inkább ezt írd le légyszi\', azt azért én is tudom az alapokat :D (Szinte, vagy inkább ténylegesen) minden fájlkezelõnél ugyanolyan. De lehet írni sima sorokat is kulcsok nélkül (ez a része már megvan), csak utólag kéne benne keresni. Tehát még egyszer: ha tudod a megoldást, akkor írd le pls :D

Y_ini Keresés
« Válasz #3 Dátum: 2013. május 22. - 16:09:14 »
0 Show voters
Sajnos míg le nem írod konkrétan mit szeretnél létrehozni addig elég nehéz bármit is írni.
A példádban hosszabb mondatok is szerepelnek, így nem tudni hogy te éppen egy sort akarsz megváltoztatni, vagy éppen egy sorban lévõ mondatból egy szót mivel a példádban több szóból álló sorok is vannak.
 
Pista ma 10 éves
Sanyi beszólt
Macska
Az alma sajtos lett
[/quote]
Edit:
 
Nem is kell tudnom, mert simán ki kéne keresni valamit, ami meg van adva... Ennyi a lényeg. Aztán azt elrakni egy tárolóba.[/quote]
Ebbõl kiindulva gyakorlatilag csak azt szeretnéd megtudni hogy az adott fájl tartalmazza-e amit keresel, de 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.  ;D
« Utoljára szerkesztve: 2013. május 22. - 16:13:26 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Y_ini Keresés
« Válasz #4 Dátum: 2013. május 23. - 14:52:09 »
0 Show voters
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.

Y_ini Keresés
« Válasz #5 Dátum: 2013. május 23. - 16:50:52 »
+1 Show voters
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;
}

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
Y_ini Keresés
« Válasz #6 Dátum: 2013. május 23. - 18:16:03 »
0 Show voters
Én is gondolkodtam már a MySQL-on, azon minden sokkal egyszerûbb... Na de ezt is köszi, zárok.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal