Tiedostonimi ja komentoparametri

Olen tekemässä VB:llä yhtä ohjelmaa, mutta en onnistu millään tekemään hyvin yksinkertaista juttua jossa tiedostonimi erotetaan hakemistopolusta jos tiedostonimen perässä on komentoparametri esim.
"C:\Program Files\Internet Explorer\iexplore.exe" -123
Tällöin ohjelmani kyllä erottaa polun tuosta pois, mutta se tunnistaa samalla tuon kyseisen ohjelman tiedostonimeksi iexplore.exe" -123
Eli siihen jää tuo sitaatti merkki ja perään parametri -123 eli kuinka saisin ohjelmani poistamaan tiedostonimen jälkeen mahdollisesti olevat parametrit ja nuo sitaatti merkit alusta ja lopusta?
Ohjelmani osaa siis jo hakea tiedostonimen koko tiedoston polusta.
6503
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

... siis tätä?

sText arvo siis on iexplore.exe" -123.

lPos = InStr(1, sText, Chr(34))
sResult = Mid$(sText, 1, lPos - 1)

Äänestä
  • Selostin hieman hankalasti yksinkertaisen asian mutta yritän uudelleen :)
    Muuten kirjoittamasi koodi toimi kylläkin mutta jos otan tuosta tuon sitaatti merkin pois niin ei toimikaan enää.
    esim. iexplore.exe -123

    "C:\Program Files\Internet Explorer\iexplore.exe" -123

    Koodini hakee koko tiedostopolusta vain tiedostonimen eli erottaa sen polusta:
    iexplore.exe" -123
    Jos käytäjä on syöttänyt tiedostonimen perään joitain komentoparametreja niin niistä pitäisi päästä eroon eli tässä tapauksessa -123.

    Tämän jälkeen koodini tulisi poistaa kaikki komentoparametrit tiedostonimen perästä eli ohjelmani palauttaisi arvoksi vain pelkästään exe tiedoston nimen (joka voi myöskin olla eri joka kerta):
    iexplore.exe

    --------------------

    "C:\Program Files\Internet Explorer\iexplore.exe" -123

    Kaikissa tapauksissa näitä sitaatti merkkejä ei ole tiedostopolun alussa ja lopussa esim. välillä se voi olla vaikkapa:
    C:\Program Files\Internet Explorer\iexplore.exe /blaahblaah /12345
    tai:
    "C:\Program Files\Internet Explorer\iexplore.exe" /blaahblaah /12345

    Jolloin toinen koodini joka erottaa taas polun tuosta eikä tiedostonimeä niin siinä polun edessä ei taas saisi olla tuota sitaatti merkkiä eli se koodi taas palauttaisi arvon:
    C:\Program Files\Internet Explorer\
    Eikä näin:
    "C:\Program Files\Internet Explorer\

    ------

    Vielä jotta edes joku tajuaisi niin ohjelmani erottaa koko tiedostopolusta sen tiedostonimen ja polun erilleen.
    Välillä tiedostopolun alussa ja lopussa on sitatti merkit jotka pitäisi saada pois jos ne ovat siellä.
    Sitten taas välillä jos käyttäjä on syöttänyt komentoparametrejä niin ne pitäisi saada tiedostonimen lopusta pois ja tietysti se sitatti merkki siitä kanssa.
    argh! alankin kirjoittamaan kirjaa tästä samantien... puuh...

    Äänestä

  • 0123456789... kirjoitti:

    Selostin hieman hankalasti yksinkertaisen asian mutta yritän uudelleen :)
    Muuten kirjoittamasi koodi toimi kylläkin mutta jos otan tuosta tuon sitaatti merkin pois niin ei toimikaan enää.
    esim. iexplore.exe -123

    "C:\Program Files\Internet Explorer\iexplore.exe" -123

    Koodini hakee koko tiedostopolusta vain tiedostonimen eli erottaa sen polusta:
    iexplore.exe" -123
    Jos käytäjä on syöttänyt tiedostonimen perään joitain komentoparametreja niin niistä pitäisi päästä eroon eli tässä tapauksessa -123.

    Tämän jälkeen koodini tulisi poistaa kaikki komentoparametrit tiedostonimen perästä eli ohjelmani palauttaisi arvoksi vain pelkästään exe tiedoston nimen (joka voi myöskin olla eri joka kerta):
    iexplore.exe

    --------------------

    "C:\Program Files\Internet Explorer\iexplore.exe" -123

    Kaikissa tapauksissa näitä sitaatti merkkejä ei ole tiedostopolun alussa ja lopussa esim. välillä se voi olla vaikkapa:
    C:\Program Files\Internet Explorer\iexplore.exe /blaahblaah /12345
    tai:
    "C:\Program Files\Internet Explorer\iexplore.exe" /blaahblaah /12345

    Jolloin toinen koodini joka erottaa taas polun tuosta eikä tiedostonimeä niin siinä polun edessä ei taas saisi olla tuota sitaatti merkkiä eli se koodi taas palauttaisi arvon:
    C:\Program Files\Internet Explorer\
    Eikä näin:
    "C:\Program Files\Internet Explorer\

    ------

    Vielä jotta edes joku tajuaisi niin ohjelmani erottaa koko tiedostopolusta sen tiedostonimen ja polun erilleen.
    Välillä tiedostopolun alussa ja lopussa on sitatti merkit jotka pitäisi saada pois jos ne ovat siellä.
    Sitten taas välillä jos käyttäjä on syöttänyt komentoparametrejä niin ne pitäisi saada tiedostonimen lopusta pois ja tietysti se sitatti merkki siitä kanssa.
    argh! alankin kirjoittamaan kirjaa tästä samantien... puuh...

    oletetaan ,että teksti on koodisi palauttama merkkijono

    Dim i As Integer
    Dim Paikka As Integer
    Dim Jälkeen As String
    dim Teksti as string
    For i = Len(Tteksti) To 1 Step -1
    If Mid(Teksti, 1) = "\" Then
    Jälkeen = Mid(Teksti 1, 256)
    Paikka = InStr(1, Jälkeen, ".")
    Jälkeen = Mid(Jälkeen, 1, Paikka 3)
    Exit Sub
    End If
    Next i

    Äänestä

  • Kunde kirjoitti:

    oletetaan ,että teksti on koodisi palauttama merkkijono

    Dim i As Integer
    Dim Paikka As Integer
    Dim Jälkeen As String
    dim Teksti as string
    For i = Len(Tteksti) To 1 Step -1
    If Mid(Teksti, 1) = "\" Then
    Jälkeen = Mid(Teksti 1, 256)
    Paikka = InStr(1, Jälkeen, ".")
    Jälkeen = Mid(Jälkeen, 1, Paikka 3)
    Exit Sub
    End If
    Next i

    ...vieläkään :(

    Äänestä

  • 0123456789... kirjoitti:

    ...vieläkään :(

    Mikset poista "-merkkiä? Tuossa on kaksi esim. muuttujaa... Toisessa on ympärillä "-merkki toisessa ei. Koodin pätkän pitäisi palauttaa kummallakin kerralla sama lopputulos. Replace-funktiota ei muistaakseni ole vielä VB5:ssa, joten toivon, että käytät VB6:sta...

    MS1 = "C:\Program Files\Internet Explorer\iexplore.exe /blaahblaah /12345"
    MS2 = Chr(34) & "C:\Program Files\Internet Explorer\iexplore.exe" & Chr(34) & " /blaahblaah /12345"

    Dim sTmp As String
    Dim lPos As Long

    lPos = InStrRev(MS1, "\")
    sTmp = Mid$(MS1, lPos 1)

    sTmp = Replace(sTmp, Chr(34), vbNullString)

    lPos = InStr(1, sTmp, Space(1))
    sTmp = Mid$(sTmp, 1, lPos - 1)

    Äänestä

  • Tällä pitäisi onnistua kirjoitti:

    Mikset poista "-merkkiä? Tuossa on kaksi esim. muuttujaa... Toisessa on ympärillä "-merkki toisessa ei. Koodin pätkän pitäisi palauttaa kummallakin kerralla sama lopputulos. Replace-funktiota ei muistaakseni ole vielä VB5:ssa, joten toivon, että käytät VB6:sta...

    MS1 = "C:\Program Files\Internet Explorer\iexplore.exe /blaahblaah /12345"
    MS2 = Chr(34) & "C:\Program Files\Internet Explorer\iexplore.exe" & Chr(34) & " /blaahblaah /12345"

    Dim sTmp As String
    Dim lPos As Long

    lPos = InStrRev(MS1, "\")
    sTmp = Mid$(MS1, lPos 1)

    sTmp = Replace(sTmp, Chr(34), vbNullString)

    lPos = InStr(1, sTmp, Space(1))
    sTmp = Mid$(sTmp, 1, lPos - 1)

    Kyllä käytän VB6:sta ja koodisi toimi erinomaisesti, kiitos paljon kaikille avuista!

    Äänestä

Kommentoi aloitusta


0123456789... kirjoitti:

Olen tekemässä VB:llä yhtä ohjelmaa, mutta en onnistu millään tekemään hyvin yksinkertaista juttua jossa tiedostonimi erotetaan hakemistopolusta jos tiedostonimen perässä on komentoparametri esim.
"C:\Program Files\Internet Explorer\iexplore.exe" -123
Tällöin ohjelmani kyllä erottaa polun tuosta pois, mutta se tunnistaa samalla tuon kyseisen ohjelman tiedostonimeksi iexplore.exe" -123
Eli siihen jää tuo sitaatti merkki ja perään parametri -123 eli kuinka saisin ohjelmani poistamaan tiedostonimen jälkeen mahdollisesti olevat parametrit ja nuo sitaatti merkit alusta ja lopusta?
Ohjelmani osaa siis jo hakea tiedostonimen koko tiedoston polusta.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu