Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA OpenFile ja tiedostonluku (VB.NET)

Sivun loppuun

Hoover [11.01.2007 15:01:17]

#

Mitenkäs sitä VBA:lla voi Word 2003:ssa lukea jonkin .txt -tiedoston (valitaan open file dialogin kautta) ja sitten ottaa muuttujiin tietoja?

Tällä komennolla ilmeisesti saa polun selville, mutta mitä sitä?
tiedostonimi = Application.FileDialog(msoFileDialogOpen).Show

Määritellään esimerkin vuoksi testi.txt, jossa on seuraavat tiedot:
ukkeli|kukkeli|

Nämä kaksi tietoa pitäisi saada luettua omiin muuttujiinsa. Tuosta varmaan pääsisin kärryille aika mukavasti jos joku voisi neuvoa. :)

Hoover [11.01.2007 18:25:12]

#

Ei kyllä onnistu millään tämä tiedoston luku... koko päivän säätänyt ja yrittänyt googlettaa..

Application.FileDialog(msoFileDialogOpen).Show tunnostaa palauttavan vain jonkin numeron. -1 jos ei valittu mitään ja positiivisen jos valittiin jokin. Pitäisi saada vain ronskisti kaikki teksti testi.txt -tiedostosta vaikka johonkin stringiin.

Antti Laaksonen [11.01.2007 18:36:10]

#

Jos tiedoston nimi on selvillä, niin loppu hoituu näin:

Dim rivi As String, tiedot() As String
Open "c:\omat\testi.txt" For Input As #1
Line Input #1, rivi
Close #1
tiedot = Split(rivi, "|")
MsgBox tiedot(0)
MsgBox tiedot(1)

Komento Open avaa tiedoston, Line Input lukee rivin ja Close sulkee tiedoston. Funktio Split muuttaa merkkijonon taulukoksi annettujen erottimien kohdalta.

Hoover [11.01.2007 18:45:54]

#

Ok. Näyttää toimivan. Kiitti!

Hoover [11.01.2007 20:16:01]

#

Hmm.. Entäpä kun on stringi jossa on paljon tekstiä ja haluaisin pistää stringin poikki siitä, missä rivi vaihtuu? Split vissiin osaa, mutta näin ei onnistunut ainakaan: test = Split(sText, Chr(13))

Antti Laaksonen [11.01.2007 20:48:31]

#

Tuon koodin pitäisi kyllä toimia, jos Chr(13) erottaa rivit merkkijonossa.

Tällä koodilla voit tutkia, mitä merkkejä merkkijonossa on:

Dim teksti As String, merkit As String
Dim i As Integer
' tutkittava merkkijono
teksti = "abc" + vbCrLf + "def" + vbCrLf + "ghi"
For i = 1 To Len(teksti)
    merkit = merkit & Asc(Mid(teksti, i, 1)) & " "
Next
MsgBox merkit

Merkintä vbCrLf tarkoittaa samaa kuin Chr(13) + Chr(10).

Hoover [11.01.2007 21:01:09]

#

Näkyy olevan 10 ja 13 lopussa aina. Merkillinen kun tuo Split(sText, chr(13)) ei natsaa. :o

Lisäys:
Tulee muuten errori siinä kun pistän Splittiä "Type mismatch (Error 13)". Tässä on vielä koodit, jos auttaisi vianselvityksessä.

Dim sText As String ' Tässä on sitä tekstiä ladattuna melko paljon
Open "testi.txt" For Input As nLahdetiedosto
sText = Input$(LOF(1), 1)

Dim test As String
test = Split(sText, Chr(13))

Antti Laaksonen [11.01.2007 21:06:01]

#

Mitä sitten tapahtuu? Tuleeko taulukkoon mitään?

Voit tutkia taulukon merkkijonoja samalla tavalla.

Hoover [11.01.2007 21:55:12]

#

Tuohon test -muuttujaan ei tule mitään jos yritän messageboxissa sen näyttää splitin jälkeen. Mutta jos ei splittaa test -muuttujaa ja pistää sTextin arvon messageboxiin niin siinä on kyllä tavaraa.

Antti Laaksonen [11.01.2007 22:01:35]

#

Muuttuja test on taulukko, kirjoita siis määrittely näin:

Dim test() As String

Auttaako tämä muutos?

Hoover [11.01.2007 22:19:04]

#

Autto. Kiitti taas. :)

Jotenkin tunnostaa nämä vba funktiot sekoilta kun on tottunut vb.net ja c# koodeihin... Ei olisi tuostakaan tullut mieleen, että taulu tulisi takaisin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta