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-
Mitä kaikkia merkkejä A, B ja C voivat sisältää? Mitä tarkoitat syntaksilla? Ja voitko kirjoittaa vähän koodia tähän?
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..
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%
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-
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-
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.