Mitenkä pystyy tekemään scriptikieleen tämän? Käytössä siis Quickbasic
scripti.psf
$nimi = Juhaz $ika = 15 text Minun nimeni on $nimi text ja ikäni on $ika
olen tähän mennessä tehnyt tähän tyyliin sitä scriptikieltä
open "scripti.psf" for input as #1 do line input #1, script$ if script$ = "CLEAR" then cls if mid$(script$, 1,1) = "'" then end if if mid$(script$, 1,4) = "TEXT" then print mid$(script$, 6,300) end if loop until eof(1) close #1
edit: ja onko mahdollista kehittää tuohon scriptikieleen mitään IF komennon kaltaista? Eli jos mä kehitän siihen vaikka jonkun
text tämä on kysymys nro 1! ask Mikä on nimesi a$ if a$ = juhaz then text Juhaz rulettaa!!!!
Tee silmukka joka lukee tota riviä merkki merkiltä mid$ funktiolla jos se merkki mikä tulee vastaan on "$" niin sitten siitä eteenpäin luetaan kaikki loput merkit ja tuhotaan turhat välilyönnit joita sun tekniikalla auttamatta tulee, viis siitä. Kun tämä on tehty olettaisin että muuttjanimet ovat typessä esim. Nimi ja sitten Arvo.. tämä tapa toimii nyt vain numeroille mutta kehitä joku oma tapa merkata esim. @ on numero ja $ on merkkijono. Eli tämän jälkeen ohjelmalla on indeksimuuttuja jossa on varastoituna muuttjien määrät. Sen avulla rullataan koko taulukko läpi ja jos joku nimi vastaa kirjoitettua arvoa niin sitten se kohta tekstistä korvataan arvolla. Tässä nyt ihan teoriana tämä... QB:tä tullu senverta vähän koodattuu etten koodista tulisi aikas buginen.
if mid$(script$, 1,1) = "'" then end if
mitähän järkeä tuossa on? :)
No kato jos mulla on kommentteja scriptitiedostossa ja jos mulla ei ole tota niin ainakin quickbasic on tähän mennessä aina valittanut siitä...
Hö??? mitä sen siitä pitäs valittaa? toi ei siis tee yhtään mitään! Ja voisit käyttää ton ekan mid$in sijaan left$iä, säästää ton ekan ,1 siitä. eli mid$(script$, 1, 4) on sama kun left$(script$, 4) ja säästät turhia endiffejä ku käytät elseiffiä. eli esim:
if script$ = "CLEAR" then cls elseif mid$(script$, 1,1) = "'" then 'pah elseif mid$(script$, 1,4) = "TEXT" then print mid$(script$, 6,300) end if
nii ja sisennä kans... :)
Olen itse koittanut tehdä vastaavaa, mutta se projekti tyssäsi if-lauseiden ja muuttujien jne. toteutukseen. Itse käytin apuna Laaksosen kätevää koodivinkkiä, jolla voi pilkkoa merkkijonon taulukkoon käyttäen erottimena vaikkapa välilyöntiä. Eli https://www.ohjelmointiputka.net/koodivinkit/
Kokeilin tehdä kerran kans itte ja sain toimimaan, niin että tekstipelin pystyy jo tekemään.
En viitsi avata uutta keskustelua, joten kirjoitan kysymykseni tähän keskusteluun.
jos mulla on quickbasicissa tehty komento näin
input "", cline$ shell rootdir$ + "\bin\" + cline$
niin saako sen tekemään niin, että jos vaikka tuosta inputista nyt sattuisikin löytymään useampi komento niin se toteuttaa ne kaikki? Esimerkiksi jos käyttäjä antaa inputissa vaikka komennon tyyliin näin
echo moi | beep
niin se shellaisi echo ohjelman, joka näyttäisi tekstin moi ja sitten sieltä bin-hakemistosta beep ohjelman, joka päästäisi piippauksen.
Voi ja se on itse asiassa kohtalaisen helppoa. Tutki tuo koodivinkki jonka linkin annoin tuossa yllä ja pilko tuo taulukkoon käyttäen erottimena '|'-merkkiä ja sitten käyt taulukkoa läpi.
Hei Hunajavohveli !
Voisitko lahettää sen N.S. ohjelmointi ohjelmas
Jep, lähetetty on!
edit: bugeja saattaa sitten löytyä, ohjeet pistin kyllä mukaan, toivottavasti riittävän selkeät.
Pystyisitkö lähettämään mullekkin sen?
Jep, lähetetty.
Pistä nyt mullekin niin on jotain tekemistä, kun tutkii sitä.
Ja sinne meni kolmas! Pitäisiköhän tämä kohta laittaa koodivinkkeihin, kun kaikki kyselevä? :)
No, ehkä pienien paranteluiden jälkeen, kun ei mitkään luupitkaan vielä toimi.
(melkein off topikkia)
miten olisi jos ohjelmointiputkalaiset tekisivät yhdessä oman "kielen"? =)
itsekin tässä taas väksään jotain mutta olisi hienoa jos joku tekisi sen osan mitä toiset ei osaa ja toisinpäin =)
Minä yhdistin omaan testikieleen Future Libraryn, mutta en osannut/keksinyt mitään hyvää tapaa siihen, mutta tässä on se scriptikieli
scripti.bas
'$include: 'future.bi' x = 10 y = 10 ext$ = command$ if ext$ = "" or ext$ = " " then input "Tiedosto: ", ext$ Set800x600 32 future.cls RGB2Color(0,0,0) open ext$ for input as #1 do line input #1, script$ if script$ = "clear -n" then cls end if if script$ = "clear -f" then future.cls RGB2Color(0,0,0) end if if mid$(script$, 1,7) = "text -n" then print mid$(script$, 9,300) end if if mid$(script$, 1,7) = "text -f" then Future.Print x,y, mid$(script$, 9,300) end if if mid$(script$, 1,4) = "font" then Future.LoadFONT mid$(script$, 6,300) end if loop until eof(1) close #1 sleep ReSetScreen
Mutta valitettavasti kaikki ei ihan toimi ja mä kyllä tiedän mistä se johtuu, mutta nyt en ole vielä keksinyt tapaa, mutta tiedän, että Future Librarystä löytyisi tuohon resoluutiohommaan vielä sillainen komento kuin "SetScreenMode Xres, Yres, Bits"
Edit: ai niin, unohdin kertoa, että en ole vielä kuin vilkaissut muuten sitä tiedostoa, jonka lähetit hunajavohveli, mutta kaipa siitä jotain voisi saada aikaan....
lainaus:
(melkein off topikkia)
miten olisi jos ohjelmointiputkalaiset tekisivät yhdessä oman "kielen"? =)
itsekin tässä taas väksään jotain mutta olisi hienoa jos joku tekisi sen osan mitä toiset ei osaa ja toisinpäin =)
Jokuhan voisi ainakin aloittaa väsäämällä helppokäyttöisen ja monitoimisen tekstinkäsittelyohjelman, jolla koodi kirjoitettaisiin. Omassa kielessäni on vain esimerkki, eikä siinä ole mitään syntaksi-tarkistuksia tai muuta.
Tulin tuossa vain ajatelleeksi, että kielestä tulisi aika hemmetin hidas, jos ten tekisi QBasicilla. Kannattaisi varmaan kokeilla jollain C:llä.
Vaikeudet yhteisen ohjelmointikielen teossa.
1.Kaikki haluavat ohjelmoida eri kielillä.
2.Mielipitetä on toistasataa.
3.Jos ketään ei saa tehtyä jotain komentoa.
4.Millainen ulko-asu.
5.Ketä tekee minkäkin komennon tai toiminnon.
6.Mille käyttö järjestelmälle. (Linux, Windows vai DOS)
...
HUOM: Tossa ei ole läheskään kaikkia ongelmia.
petrinm, niin mutta pikkuhiljaa alkaisi kehittelemään ja heti alussa päättäisi millä kielellä sitä tekisi jne...
ja tossa kun sanoin että mielipiteitä on toistasataa niin sitä varten pidettäisiin demokraattista puolta että kaikki saa osallistuu ja heittää ideoita ja koodinpalasia ja jotkut sitten soveltaa niitä jne...
hunajavohveli, juu joku helposti ymmärrettävä nopea kirjoittaa jne...
ja eihän sitä tarvitse ehkä qbasicilla vääntää just joku c tai vastaava olisi mukava kieli tai sitten vaan pitää kattoo mihin suuntaa sen kielen ja sen mukaan valitsee kielen millä sitä alkaa rakentaa
ja tuosta tekstin käsittely ohjelmasta tuli mieleeni että sehän voisin olla joku jossa on se tekniikka et kun kirjoitat sanaa niin se itse alkaa miettiä mitä sanaa etit ja antaa vaihto-ehtoja jne ja se nopeuttaisi taas kirjoittamista (joillakin) ja jotain pientä...
itse asiassa jos alkaisi tuota tosissaan miettimään tuota idean runkoa niin entäs se että onkos se tulkattava vai käänettävä? itse en osaa tehdä kuin tulkattavia ja sekin on oman konsolin kautta jne...
mutta jos kiinnostaa niin vois alkaa pistää pientä projektii pystyyn *miettii alkaisiko jo vähäsen rakentelee jotain vanhan alustan päälle*
Osaatko C:tä, nomic? Itse olen vasta ihan alussa, mutta tarkoitus olisi kohta syvemmin paneutua kieleen.
Itse olen kehitellyt tuota kieltä lähinnä yhteen projektiini, jossa tuo on vain pieni palanen, mutta tuon avulla olisi tarkoitus saada joskus jopa kehitettyä ihan ohjelmia siihen projektiin helposti. Siinä minulla oli erittäin alkeellinen ohjelmakin, jolla ne scriptit kirjoitettiin tiedostoon....
laitanpa tähän sen sourcen
open "cshell.001" for input as #1 input #1, rootdir$ close #1 ext$ = command$ if ext$ = "" or ext$ = " " then input "Tiedosto: ", ext$ open rootdir$ + "\" + ext$ for output as #1 s: input "", teksti$ if teksti$ = "valmis" then goto nextstep print #1, teksti$ goto s nextstep: close #1
Toimi siis siten, että käyttäjä antaa WindoX:n komentokehoitteessa komennon text [tiedosto] ja sitten pääsi kirjoittamaan koodia tai ihan vain tekstiä ja, kun oli valmis niin kirjoitti vain 'valmis' tekstin, jota tuo ohjelma ei siis kirjoittanut (ainakaan mulla ei ole kirjoittanut) tiedostoon, mutta lopetti sitten tekstin kirjoitusosion ja ohjelman suoritus loppui. Tuo rootdir$ voi olla vaikka 'A:' (puutuu kenoviiva), mutta se lisää sen ja ext$:ssä voi olla sitten vaikka \etc\rc\script.psf (PSF = Pleasantware Script File), jota pystyy WindoX:ssa suorittamaan antamalla komennon exec [tiedosto] (esimerkiksi exec \etc\rc\script.psf), mutta itseasiassa exec komennolla voidaan suorittaa mitä tahansa mikä ei sijaitse \bin hakemistossa.
Edit: älkää ihmetelkö noita gotoja ja muuta tuollaista katsokaas, kun tämäkin on melkein helvetin vanhaa koodia jo mulla....
Ainakin tarvii Antin mielipiteen asiasta.
hunajavohveli, jotain osaan sählää mutta enemmän oon leikkinyt vb:llä
mutta sillain että jotain osaan säätää sillä
mut treeniä vaan lisää niin sit on jo parempi =)
ja netistä löytyy paljon tutoriaaleja joka helpottaa paljon
treenaatko nytten ihan vain C:tä vaiko C++ vaiko C#?
itellä treenissä toi C++ kun siihen on tykästynyt =)
No mulla on Turbo C, sillä vähä yritin ja sitten C++ Windows-versio. Periaattes sama kieli ku Dos-versiokin. En sitten tiedä kuinka paljon samaa C:llä ja C++:lla on.
lainaus:
(PSF = Pleasantware Script File)
Eipäs ole :P
PSF = Playstation Sound Format
http://www.neillcorlett.com/psf/
</offtopic>
No tein minäkin pelin nimeltä Planetary Assault, jonka save tiedostot oli päätteeltään pas -merkkisiä.
Pas = Planetary Assault Save
No sitten vintoosa pistä niiden eteen jonkinlaisen kuvakkeen ja kattoin, että minkä ihmeen takia, että eihän se voi tietää mitä tiedostoja ne on. Klikkasin ominaisuudet ja se väitti että tiedosto on Delphi Source File.
Johtuiskohan pääte jotenkin siitä, että Delphi on oliopascal. PAS(cal)
Laitan tähän linkin omaan scriptikieleeni:
http://koti.mbnet.fi/jsp_/script.zip
Tiedostot ovat binaryna siksi että ne eivät ole valmiita. Sorsat julkaisen ehkä, kun projekti on valmis. Jos ihmettelette xon.exea, niin run.exe on integroitu erääseen toiseen projektiin, enkä jaksanut poistaa integrointia nyt. Ohjeet testi.tpl -tiedostossa.
Ööh... eihän tuossa ollut edes kirjoitusohjelmaa, yhden rivin sai kirjoittaa jonka se sitten suoritti. Vai teinköhän nyt jotain väärin?
Olisi varmaan kannattanut kertoa, että jos haluaa suorittaa useampia rivejä, niin ohjelmalle pitää antaa parametreiksi ajettava tiedosto. Ainakin muistaakseni laitoin mukaan batin, joka suorittaa testi.tpl -tiedoston.
Huomasin yhden hassun bugin ohjelmassa: rivi ei saa olla tyhjä, muuten tulee virheitä tyyliin "Unknown command ''". Eli jos haluatte jättää tyhjän rivin, niin kommentoikaa se. Aika paha bugi, täytyykin korjata se.
Turambar, kuinka sä olet järjestänyt nuo tiedostoon kirjoittamiset tai tiedostosta lukemiset? Itse yritin kehittää omaan scriptikieleen vastaavaa, mutta jostain syystä se ei esimerkiksi näytä sitä tekstiä mikä siellä tiedostossa on, tosin mä jaottelin ne niin, että mulla ei ollut yhtä komentoa tekstin kirjoittamiseen vaan siihenkin tarvittiin kolme riviä koodia tyyliin
'myscriptlanguage write c:\teksti.txt write t tekstiä close 'se kirjoitti c-asemalla sijaitsevaan teksti.txt 'tiedostoon tekstin 'tekstiä' 'ja kolmannella rivillä sulki tiedoston 'avaaminen tapahtuu näin read c:\teksti.txt read teksti$ text teksti$ close
ja koodia nyt en muista tarkalleen enkä jaksa hakea sitä tiedostoa nyt esille, mutta jotenkin näin järjestin
if mid$(script$, 1,5) = "write" then open mid$(script$, 7,300) for output as #1 end if if mid$(script$, 1,7) = "write t" then print #1, mid$(script$, 9,300) end if if mid$(script$, 1,5) = "close" then close #1 end if
tuo on siis vasta osa koodista, mutta tuolla tavoin minä olen sen tehnyt, mutta jostain syystä se siis ei näytä tekstiä, joka on siinä tiedostossa missä sen sanotaan olevan vaikka siellä on.
Edit: ajattelin vielä kertoa, että yritän tässä vielä yhdistää future libraryn lisäksi tuohon scriptikieleen wizguin, joka mahdollistaisi sitten graafisen käyttöliittymän tekemisen.
Tietoa wizguista löytyy sen kotisivuilta osoitteesta:
http://www.hot.ee/wizgui/
Minulla ei ole tässä nyt juuri lähdekoodeja, koska olen koulun koneella. Koitan antaa vähän osviittaa, miten tiedostojen käsittely on tehty.
fopen <tiedosto>
Avaa annetun tiedoston kirjoitettavaksi ja määrittelee muuttujien avulla, että nyt on tiedosto auki ja tiedoston nimen.
fputs <teksti> ALIAS fwrite
Jos tiedosto on auki, niin siihen kirjoitetaan annettu teksti.
fclose
Jos tiedosto on auki, suljetaan ja määritellään, että nyt tiedosto ei ole enää auki.
Tiedostosta lukua en ole vielä tehnyt, mutta se tulee luultavasti olemaan jotakin tyyliin:
IF tiedosto.auki = 1 THEN CLOSE #2 OPEN tiedosto$ FOR INPUT AS #2 LINE INPUT #2, temp$ CLOSE #2 OPEN tiedosto$ FOR OUTPUT AS #2 'kuten tästä näkee, tiedosto on oletusarvoisesti kirjoitettava END IF
Aika viritys vai mitä? Täytyy kehittää systeemi, missä useita tiedostoja voi olla samaan aikaan auki. Jos saan jotakin toimivaa aikaiseksi, niin voin lähettää sen tänne tai teidän sähköposteihin. Turha odottaa mitään ennen iltaa, pääsen kotiinkin vasta klo 17.
Siinä onkin pieni pulma miten saat useita tiedostoja samaan aikaan auki. Kun tuon #-luvun tilalle ei voi laittaa muuttujaa.
Pitäisi tehdä joku
If 1 THEN OPEN tiedosto$ FOR INPUT AS #1
If 2 THEN OPEN tiedosto$ FOR INPUT AS #2
If 3 THEN OPEN tiedosto$ FOR INPUT AS #3
jne.
Olisihan se käytävää jos voisi laittaa
Open tiedosto$ FOR INPUT AS muuttuja
Vai voiko tuohon laittaa muuttujaa? Järki sanoisi että ei, kun #1 ei kai voi olla muuttuja-arvo. Jos se olisi merkkijono, siinä olisi "#1" eikä #1. Ja jos se olisi luku, ei siinä voisi olla #-merkkiä.
Hohhoh... pitäisköhän jatkaa sitä omaa scriptiä, kun kaikki nuo jutut kyllä osaisin...
pitäisi toimia jos on OPEN tiedosto$ FOR INPUT AS #muuttuja
Ai se toimii sittenkin tuolla lailla. Kävi kyllä mielessä pistää tuo #ja sitten muuttuja perään, mutta en sitten uskonut, että toimisi.
offtopic:
juhaz ja Blaze:
PSF = Chiwriter PostScript Printer Font
PSF = nsight II X-PLOR Molecular Structure File
PSF = MicroStation Plot Specification
PSF = PhotoStudio Graphic
PSF = Playstation Sound Format
PSF = PostScript Support File
PSF = PowerSoft Report File
En tiedä onko mahdollista, mutta haluaisin jonkun oikoreitin kysyä käyttäjiltä asioita (eli ei input komentoa), kun tarvitsisin sitä yhdessä projektissani.
Olen tekemässä ohjelmaa, joka ajaa muita ohjelmia ilman mitään ihmeellisempiä taukoja, mutta input valitettavasti tekee aina siihen tauon niin pitkäksi aikaa, kunnes käyttäjä klikkaa enteriä.
ohjelman sourcet:
do locate 1,1 print time$ locate 2,1 shell "user.exe" loop
ja user.exe sisältää nämä inputit ja iffit, mutta aina tuon user.exe:n aikana kello pysähtyy ja jatkuu sitten, kun käyttäjä klikkaa entteriä (syylisenä input).
Sinun täytyy tehdä oma input-systeemi. Täällä putkassa on koodivinkkeinä pari ja input-systeemin periaate on ihan yksinkertainen.
Annan tässä vähän esimerkkikoodia:
FUNCTION juhazinomainput$ (x, y) DO LOCATE 1,1: PRINT TIME$ a$ = INKEY$ SELECT CASE a$ CASE CHR$(13): juhazinomainput$ = merkit$: EXIT DO CASE ELSE merkit$ = merkit$ + a$: LOCATE y,x: PRINT merkit$ END SELECT LOOP END FUNCTION
Tuo on aikamoinen raakaversio, siinä ei ole esim. merkkien pyyhkimistä ym. Mutta tuon pohjalta on helppo rakentaa input, joka ei pysäytä kelloa. Omassa inputissa on se hyvä puoli, että saat tehtyä omia ominaisuuksia, esimerkiksi sen että kun kirjoitetaan salasanaa, niin tulee '*'-merkkejä ruudulle.
Ja kyseiset koodivinkit ovat tässä:
https://www.ohjelmointiputka.net/koodivinkit/
https://www.ohjelmointiputka.net/koodivinkit/
Jep, nuo on hyviä Inputin korvaajia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.