Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB, VB6: scriptikieli

Sivun loppuun

juhaz [27.12.2003 09:37:27]

#

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!!!!

kaviaari [27.12.2003 11:07:25]

#

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.

tejeez [27.12.2003 12:17:03]

#

if mid$(script$, 1,1) = "'" then
end if

mitähän järkeä tuossa on? :)

juhaz [27.12.2003 14:16:09]

#

No kato jos mulla on kommentteja scriptitiedostossa ja jos mulla ei ole tota niin ainakin quickbasic on tähän mennessä aina valittanut siitä...

sooda [27.12.2003 14:31:03]

#

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... :)

Turambar [27.12.2003 14:32:05]

#

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/23422-qb-komentoriviparametrit pienellä muokkauksella tuosta saa ihan kätevän. Tuon lisäksi käytin vielä tarkempaan lajitteluun right$, left$ ja mid$ -funktioita.

hunajavohveli [27.12.2003 18:14:12]

#

Kokeilin tehdä kerran kans itte ja sain toimimaan, niin että tekstipelin pystyy jo tekemään.

juhaz [27.12.2003 22:39:54]

#

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.

Turambar [28.12.2003 12:31:24]

#

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.

petrinm [28.12.2003 22:59:50]

#

Hei Hunajavohveli !
Voisitko lahettää sen N.S. ohjelmointi ohjelmas

hunajavohveli [29.12.2003 12:19:28]

#

Jep, lähetetty on!

edit: bugeja saattaa sitten löytyä, ohjeet pistin kyllä mukaan, toivottavasti riittävän selkeät.

juhaz [29.12.2003 21:11:37]

#

Pystyisitkö lähettämään mullekkin sen?

hunajavohveli [30.12.2003 16:11:45]

#

Jep, lähetetty.

Turambar [30.12.2003 20:46:26]

#

Pistä nyt mullekin niin on jotain tekemistä, kun tutkii sitä.

hunajavohveli [31.12.2003 12:29:54]

#

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.

nomic [03.01.2004 01:04:58]

#

(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 =)

juhaz [03.01.2004 01:17:16]

#

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....

hunajavohveli [03.01.2004 12:09:53]

#

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ä.

petrinm [03.01.2004 13:07:11]

#

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.

nomic [03.01.2004 16:52:40]

#

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*

hunajavohveli [03.01.2004 17:06:17]

#

Osaatko C:tä, nomic? Itse olen vasta ihan alussa, mutta tarkoitus olisi kohta syvemmin paneutua kieleen.

juhaz [03.01.2004 17:13:48]

#

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....

petrinm [03.01.2004 17:31:11]

#

Ainakin tarvii Antin mielipiteen asiasta.

nomic [03.01.2004 21:39:29]

#

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 =)

hunajavohveli [03.01.2004 22:20:58]

#

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.

Blaze [03.01.2004 22:54:39]

#

lainaus:

(PSF = Pleasantware Script File)

Eipäs ole :P
PSF = Playstation Sound Format
http://www.neillcorlett.com/psf/

</offtopic>

hunajavohveli [04.01.2004 11:54:51]

#

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)

Turambar [04.01.2004 20:02:46]

#

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.

hunajavohveli [04.01.2004 22:16:57]

#

Ööh... eihän tuossa ollut edes kirjoitusohjelmaa, yhden rivin sai kirjoittaa jonka se sitten suoritti. Vai teinköhän nyt jotain väärin?

Turambar [05.01.2004 13:14:11]

#

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.

juhaz [07.01.2004 07:15:07]

#

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/

Turambar [07.01.2004 09:07:34]

#

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.

hunajavohveli [07.01.2004 16:38:13]

#

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...

sooda [08.01.2004 17:16:36]

#

pitäisi toimia jos on OPEN tiedosto$ FOR INPUT AS #muuttuja

hunajavohveli [08.01.2004 21:19:24]

#

Ai se toimii sittenkin tuolla lailla. Kävi kyllä mielessä pistää tuo #ja sitten muuttuja perään, mutta en sitten uskonut, että toimisi.

Quiz [08.01.2004 22:36:14]

#

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

http://filext.com/detaillist.php?extdetail=psf

juhaz [09.01.2004 06:41:38]

#

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).

Turambar [09.01.2004 16:05:40]

#

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.

Antti Laaksonen [09.01.2004 17:40:06]

#

Ja kyseiset koodivinkit ovat tässä:
https://www.ohjelmointiputka.net/koodivinkit/23397-qb-haastaja-input-käskylle
https://www.ohjelmointiputka.net/koodivinkit/23611-qb-kehittyneempi-input-funktio

hunajavohveli [09.01.2004 18:59:40]

#

Jep, nuo on hyviä Inputin korvaajia.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta