Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: Tähänkin asti päästy, että...

Grey [07.08.2003 01:03:11]

#

Teen tässä ohjelmaa QB:lla, jossa käyttäjä pystyy kirjoittamaan komentoja, ja olenpa siinä törmännyt erääseen ongelmaan. Komennot kun on muotoa A/B C, ja tuosta sitten pitäisi ensin erottaa komento, sitten syntaksi ja mahdollinen kohde.

Se homma kyllä luonnistuu, mutta aina ei esim. ole ole B:ta ja C:ta (taikka on B, mutta Ei C:ta). Pelkkä A vain. En ole keksinyt miten systeemi voisi sen huomata. Ja joskus tuota C:ta voi olla kaksi tai useampia. Monta viikkoa olen koettanut saada aikaan koodia joka olisi voinut homman hoitaa, vaan eipähän se ole onnistunut, vaikka tiedän millä käskyillä sen hoidan, mutta eipä riitä enää taidot niiden hyödyntämiseen. Kaikki muu kyllä menee rutiinilla.

-Grey-

Antti Laaksonen [07.08.2003 22:05:00]

#

Mitä kaikkia merkkejä A, B ja C voivat sisältää? Mitä tarkoitat syntaksilla? Ja voitko kirjoittaa vähän koodia tähän?

Grey [07.08.2003 22:29:45]

#

Merkit \/:*?"<>| ovat A:ssa, eli komennossa rajoitettuja. B, eli valitsin (muistinpas nimen!) voi sisältää merkin / tai vastaavasti -. Eli esim DIR/W. C eli kohde voi sisältää mitä merkkejä vain, mutta eri asia että hyväksyykö systeemi sen.

Mitään koodia minulla ei ole valmiina. Ei lainkaan. Vain muuttuja, jossa on esim. DELTREE /Y WINDOWS, joka pitäisi erotella kolmeen muuttujaan, joihin tulee arvot DELTREE, /Y ja WINDOWS. Tiedän kyllä INSTR, RIGHT$, LEFT$, MID$ ym. vastaavat, mutta taitoni ei tosiaan riitä. Saan kyllä aikaan systeemin, joka ymmärtää tuon, mutta vain jos komento on aina tuollainen. Jos jää esim. valitsin tai kohde, homma bugittaa. Ja kun niitä voi olla useampia niin ai-jai..

-Grey-

PS. Ja tuo komento on vain esimerkki. Ohjelmassa on aivan toisenlaiset komennot sitten..

tn [08.08.2003 22:41:33]

#

Tällaistakohan systeemiä tarkoitit, vai ymmärsinkö ihan väärin?

DIM c(10) AS STRING
a$ = ""
b$ = ""

INPUT ">", komento$
o% = 1

'poistetaan turhat v?lily?nnit
DO WHILE LEN(komento$) >= o%
 IF MID$(komento$, o%, 1) = " " THEN
  IF o% = 1 OR o% = LEN(komento$) THEN
   komento$ = LEFT$(komento$, o% - 1) + RIGHT$(komento$, LEN(komento$) - o%)
  ELSEIF MID$(komento$, o% + 1, 1) = "/" OR MID$(komento$, o% + 1, 1) = " " THEN
   komento$ = LEFT$(komento$, o% - 1) + RIGHT$(komento$, LEN(komento$) - o%)
  ELSE
   o% = o% + 1
  END IF
 ELSE
  o% = o% + 1
 END IF
LOOP

'luetaan komento
i% = INSTR(komento$, "/")
IF i% = 0 THEN
 a$ = komento$
ELSE
 a$ = LEFT$(komento$, i% - 1)
 ii% = INSTR(i%, komento$, " ")
 IF ii% = 0 THEN
  b$ = RIGHT$(komento$, LEN(komento$) - i%)
 ELSE
  b$ = MID$(komento$, i% + 1, ii% - i% - 1)
  i% = ii% + 1
  ii% = INSTR(i%, komento$, " ")
  e% = 1
  DO WHILE ii% <> 0
   c(e%) = MID$(komento$, i%, ii% - i%)
   i% = ii% + 1
   ii% = INSTR(i%, komento$, " ")
   e% = e% + 1
  LOOP
  c(e%) = RIGHT$(komento$, LEN(komento$) - i% + 1)
 END IF
END IF

PRINT "A="; a$
PRINT "B="; b$
FOR i% = 1 TO e%
 PRINT "C("; i%; ")="; c(i%)
NEXT i%

Grey [09.08.2003 00:42:16]

#

Kyllä, tn, jotakin tuollaista haen. Joskin tuossakin oli ilmeisemmin sellainen juttu että jos esim. joku COPY FILE1.TXT FILE2.TXT ei toimi ihan noin, mutta ehkei se haittaa. Käyttämistä komennoistani kun tulee vähän eri luontoisia mitä on DOSsissa, tai muissa sen kaltaisissa jutuissa.

-Grey-

Grey [13.08.2003 06:28:34]

#

Sainpa tässä äsken sovitettua tuon koodin vihdoinkin siihen ohjelmaani. Toimii melko hyvin, vaikka en keksinyt miten tehdä systeemi joka ottaa useampia parametreja vastaan, vaan teinpä jotakin sellaista mihin ei DOS enää kykene. Vai ottaisiko DOS tämän tyyppisen komennon vastaan?: MK kansio1 kansio2 kansio3 kansio4 kansio5 jne..

Täytynee muuten varmaan jossain välissä viritellä sellainen homma että jos esim. ei valitsinta anna, niin silti se kohteen nimi menee oikeaan muuttujaan.. kunhan jaksan sen tehdä.. joskus..

-Grey-

thefox [13.08.2003 09:58:09]

#

lainaus:

Vai ottaisiko DOS tämän tyyppisen komennon vastaan?: MK kansio1 kansio2 kansio3 kansio4 kansio5 jne..

Kyllä ottaisi (sinulla MK = MD / MKDIR?). Son muuten hakemisto.

Vastaus

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

Tietoa sivustosta