Szerző Téma: Több string összeformatálása.  (Megtekintve 980 alkalommal)

Több string összeformatálása.
« Dátum: 2012. szeptember 29. - 18:47:00 »
0 Show voters
Hello mindenki.Akadt egy kis gondom.Egy új zenesystemet csinálok és akadt egy dolog amit nem tudok megoldani.
Erre szeretnék tanácsot kérni.A lényeg az hogy egy fájlkezelõvel lementettem (esetemben dfile) pár dolgot.
A file ba úgy lessz lementve hogy:



SL0 = <link>
SL1 = <link>
SL2 = <link>
.
.
.
 
Az hogy hány ilyen lessz a fileba, azt nem lehet tudni, mert attól függ hogy mennyit rakok bele.Lessz egy külön változó, ami eltárolja a zenék számát, az én esetemben \"musicnumber\". A filebol való kiolvasást így oldottam meg.
 

Script elejére:
new Songs[1000][500]; //1000 változó, amibe 500 karakter fér el

 
for(new ss; ss <= musicnumber; ss++) {
            format(ssfile, sizeof(ssfile), \"SL%d\", ss);
            Songs[ss] = dfile_ReadString(ssfile);
            }
Ez végülis ahány musicnumber van, addig növekszik az ss és minden növekedésnél megformatálja az eltárolt nevet és ezt kiolvassa.
A kérdés az lenne hogy hogyan tudnám azt meg csinálni, hogy a dialogomba jelenjenek meg ezek a linkek amit kiolvasott a fileból.(hogyan formatálhatom össze úgy hogy \"Link1\\nLink2\\nLink3\\n...\")
Bocsánat a nagyon hosszú leírásért viszont azt akarom hogy értsétek meg mit szeretnék.
Elõre is köszönöm.



Tudom hogy van ilyen Zamarot TextDrawjába.Meg is találtam viszont nem tudom hogyan használjam én is mivel hogy az én fájlkezelõm nem az.
 

stock GetFileNameFromLst( file[], line )
{
/*  Returns the line in the specified line of the specified file.
    @file[]:            File to return the line from.
    @line:              Line number to return.
*/
new string[150];
new CurrLine,
File:Handler = fopen(file, io_read);
if(line >= 0 && CurrLine != line)
{
        while(CurrLine != line)
        {
   fread(Handler, string);
            CurrLine ++;
        }
}
// Read the next line, which is the asked one.
fread(Handler, string);
fclose(Handler);
// Cut the last two characters (\\n)
strmid(string, string, 0, strlen(string) - 2, 150);
return string;
}

 
Õ végülis így használja
 

new filename[135];
format(filename, sizeof(filename), \"%s\", GetFileNameFromLst(\"tdlist.lst\", listitem - 1));
LoadProject(playerid, filename);
« Utoljára szerkesztve: 2012. szeptember 30. - 13:05:21 írta xSkillZ7x »

Több string összeformatálása.
« Válasz #1 Dátum: 2012. szeptember 29. - 19:43:10 »
0 Show voters
Uhh..
Elméletileg úgy lehet, ahogy írtad.
Tehát
 
for(new i = 0; i < sizeof(Songs); i++) if(Songs[0] != EOS) format(string, sizeof(string), \"%s\\n%s\", string, Songs);
ShowPlayerDialog(playerid, 1234, DIALOG_STYLE_LIST, \"zenelista\", string, \"egyik\", \"másik\");

 
Gyakorlatilag, mivel karakterláncról van szó, lehet, hogy magában a tömbben tárolja az információt, hibásan, azaz valami ilyesmit fogsz kapni.
 
http://zene.hu/asd.pls
ttp://zene.hu/asd.pls
tp://zene.hu/asd.pls
p://zene.hu/asd.pls
://zene.hu/asd.pls

 
Remélem jól értelmeztem.

Több string összeformatálása.
« Válasz #2 Dátum: 2012. szeptember 29. - 19:53:13 »
0 Show voters
Hát igen.Az eleje az jó viszont a fileomba van 100 zenelink.Igazából nem a linket akarom hogy megjelenjen hanem a zene nevét.Viszont most elõször a linkbe kezdtem bele és ha tudom linkkel meg tudom zenenévvel is.
Szóval vissza térek.Leírom konkrétan amit szeretnék.
pl:
Ez található a fileba:



SL1 = http://........
SL2 = http://........
SL3 = http://........
SL4 = http://........
SL5 = http://........
SL6 = http://........
SL7 = http://........
 
Mivel hogy ezeket a zenéket majd egy másik dialogban fogom ide lementeni, van egy változó, ami minden sikeres lementésnél ++ ol.Azaz mindig megszámolja hogy mennyi zene van a listán.
Én azt szeretném elérni, hogy ezeket a linkeket a fileból sorolja fel nekem a dialogba listitemként, azaz ha 100 zene van, akkor a dialogban mind a 100 számlink jelenjen meg egymás alá:
 

\"Link1\\nLink2\\n...\"

 
Ennél érthetõbbre nem tudom kifejteni.

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 29. - 19:55:25 )

Azt szeretném hogy a dialogban az jelenjen meg amit te írtál(minden link ami a listán van), csak ne vágódjon le az eleje, hanem mindegyik link külön legyen.Csak ezt nem tudom megformatálni egy stringbe.
« Utoljára szerkesztve: 2012. szeptember 29. - 19:55:25 írta xSkillZ7x »

Több string összeformatálása.
« Válasz #3 Dátum: 2012. szeptember 29. - 20:13:15 »
+1 Show voters
Ez a baj, hogy ez a nehéz. (vagymi)
Egyszerûbben úgy is megoldhatnád, hogy lekérdezed a zenék nevét, kiadod egy dialogba, egy stringbe, és amit a játékos kiválaszt, azt olvasod be kiválasztás után, és játszod le,. így elkerülve a string miatt kialakuló darabolódást
Valahogy így (nemsimerem a dilfe-t, ezért marad a dini  :whistle:)
dialog kiírása
 

new string[512],
zene[16];
for(new i = 0; i < 100; i++) {
format(zene, sizeof(zene), \"NAME%02d\", i); //0-tól kezdve formázza
if(!dini_Isset(fájl, zene)) break; //ha nem létezik ez a szám, magyarul elérte a maxot, akkor megállítja a ciklust
format(string, sizeof(string), \"%s\\n%s\", string, dini_Get(fájl, zene)); //formázza
}
ShowPlayerDialog(playerid, 1234, DIALOG_STYLE_LIST, \"asd\", string, \"1\", \"2\");

 
ondilaogresponse
 

if(dialogid == 1234) {
if(!response) return 1;
new string[128],
    zene[16];
format(zene, sizeof(zene), \"LINK%02d\", listitem); //0-tól számolva beolvassa a listitem értékét a fájlból, amit kiválasztott a listából
format(string, sizeof(string), \"%s\", dini_Get(fájl, zene)); // beolvassa a linket
PlayAudioStreamForPlayer(playerid, string); //elindítja a zenét
}

 
fájlban
 
NAME00=rádió0
LINK00=http://0
NAME01=rádió1
LINK01=http://1
NAME02=rádió2
LINK02=http://2
NAME03=rádió3
LINK04=http://3

 
illetve ez megoldható 1 változóval is fájlon belül, de akkor splitelni, vagy sscanfolni kell.
Én így oldanám meg.

Több string összeformatálása.
« Válasz #4 Dátum: 2012. szeptember 29. - 20:25:28 »
0 Show voters
Végülis a lementést én is így terveztem.



S0 = <Songname>
SL0 = <Link>
S1 = <Songname>
SL1 = <Link>
S2 = <Songname>
SL2 = <Link>
.
.
.
 
Am erre voltam kiváncsi.Csak nem volt semmi eljárás hogy hogyan csináljam de ez ténleg jó kis cucc.Saját magát formálja :)))
 

format(string, sizeof(string), \"%s\\n%s\", string, dini_Get(fájl, zene));

 

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 29. - 20:32:40 )

Addig még nem zárom le a témát ameddig meg nem írom és tökéletesen megy.Viszont a + od meg kapod ezért :P
 

format(string, sizeof(string), \"%s\\n%s\", string, dini_Get(fájl, zene));
 
[/quote]
Ezt nem tudtam de már tudom :P

Dupla hozzászólás automatikusan összefûzve. ( 2012. szeptember 29. - 20:38:55 )

Am lenne még egy kérdésem.Nem akarok új topicot nyitni de ez már nagyon zavaró :evilmad:
Ha csinálok egy scriptet és teszek bele dialogot, ami parancsra hívódik le.Az elsõ dialog bejön.Ott van több listitem.Rámegyek az elsõre.Be kéne jöjjön még egy.Viszont ez már nem jön be.Ha ugyanezt beírom a modomba, akkor már megy.
A gond az hogy vannak olyan scriptek amibõl elindul a dialog mint például a zamaroth textdrawja.Az scriptként van betéve a szerverembe de mégis megy.
Viszont ha már kiszedem az én modomat és berakok egy sima lvdm et, akkor már bármelyik scriptembõl elindul a dialog.Mi lehet ennek az oka?Buggos a modom? vagy nem tudom
« Utoljára szerkesztve: 2012. szeptember 29. - 20:38:55 írta xSkillZ7x »

Több string összeformatálása.
« Válasz #5 Dátum: 2012. szeptember 29. - 21:10:59 »
+1 Show voters
Ezt annyiszor leírtam már, hogy az hihetetlen..
Mindegyik OnDialogRepsonse végén legyen \'return 0\' (nem return 1)
Másik pedig, hogy a dialogid nem lehet nagyobb, mint 9999

Több string összeformatálása.
« Válasz #6 Dátum: 2012. szeptember 29. - 21:42:38 »
0 Show voters
Oké.Viszont return 0; megvan a végén és a dialogid se lépi túl a 9999 et

Több string összeformatálása.
« Válasz #7 Dátum: 2012. szeptember 29. - 21:45:55 »
0 Show voters
Idézetet írta: xSkillZ7x date=1348947758\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28094\" data-ipsquote-contentclass=\"forums_Topic
Oké.Viszont return 0; megvan a végén és a dialogid se lépi túl a 9999 et
 
mindegyik végén? scriptekben is?
a másik pedig, hogy nem használod már egyszer azt az IDt?

Több string összeformatálása.
« Válasz #8 Dátum: 2012. szeptember 29. - 22:06:23 »
0 Show voters
Ezt még ellenõríznem kell.Azt vettem észre hogy mégse a mod a hibás.Lehetésges hogy egy scriptemben nincs meg.Átnézek mindent és ha mûködik zárok.

Több string összeformatálása.
« Válasz #9 Dátum: 2012. szeptember 29. - 22:12:56 »
+1 Show voters
Nálam régebben ez volt a hiba.. Minden scriptet átnéztem, amirõl azt hittem, hogy gond lehet vele. A végén a TextDrawEditor miatt nem volt jó, ott volt return 1 a végén. >.>

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal