Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: .csv tiedoston purkaminen

DBasic [08.05.2012 10:51:34]

#

Moro

Minulla on käsiteltävänä .CSV tiedosto, jonka tiedot tulisi purkaa Exel taulukkoon. .csv sisältää tiedot malliin:

...
XX:XXX:XX XX:XX.XX YEE,XXX,XX
X:XXX:XX XX:XX:XX YEE,XX,XX
XX:XXX:XX XX:XX:XX VEEV,XX,XX
...

Eli tiedot on välimerkillä erotettu, mutta kaikki samassa sarakkeessa. Lisäksi pitäisi saada nuo YEE/VEEV kaltaiset turhakkeet poistettua sotkemasta arvotaulukkoa.
Osaako VBasic purkaa .csv tiedoston, erotella tiedot omiin sarakkeisiinsa ja vielä exportata haluaani exeliin haluamiini sarakkeisiin. Millä tavalla tuota kannattaisi lähteä purkamaan, vai onko jokin muu ohjelma/ohjelmointitapa parempi?

Lebe80 [08.05.2012 11:33:32]

#

Jos ainoa tarkotus on tuoda tuo Exceliin, niin eikös yksinkertaisin tapa ole ihan vaan avata se excelissä ja siellä siirrellä sarakkeet kohdilleen?

Excel ainakin viime näkemältä osasi muuntaa csv-tiedoston ihan älykkääseen muotoon, ja välimerkeiksi oli valmiina useampi yleisempi vaihtoehto vapaan merkin lisäksi.

DBasic [08.05.2012 11:51:53]

#

Juu osaa exel tuon tehdä, kun korvaa turhat tiedot tyhjällä ja jaottelee sarakakkeisiin toiminnolla, jossa väli on erottava tekijä. Noita tiedostoja on vain kymmeniä ja tulee koko ajan lisää. Rivejä tuhansia per tiedosto.

Tarkoitus on siis helpottaa noiden käsittelyä jatkossa, niin ei tarvitse jokaista erikseen mulkata. Sitten erotellut sarakkeet pitää vielä siirrellä kaavio exeliin ja näin aikaa kuluu koko päivä mulkatessa aina parikymmentä tuollaista.

Merri [08.05.2012 13:14:00]

#

Jos kyseessä on VB6, niin koodivinkeistä löytyy joskus kirjoittamani CSV-parseri sille.

Uudemmat VB:t taisi tukea CSV:tä aavistuksen kehittyneemmin?

neau33 [11.05.2012 13:07:19]

#

Moro DBasic!

Excel käyttää .csv tiedostoissa oletusarvoisesti sarake-erottimena puolipistettä. Elikä nyt jos lähtisit purkamaan jutskaa VBA-pohjalta olettaen, että .csv tiedostossa on käytetty sarake-erottimena pilkkua niin voisit avata .csv tiedoston VBA:lla tyyliin:

Private Sub CommandButton1_Click()

    Dim csvfile As String
    csvfile = "C:\testi.csv" 'esim.
    If Dir(csvfile) = "" Then
        MsgBox "Tiedostoa " & csvfile & " ei löydy"
        Exit Sub
    End If

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim Orginaali As Workbook
    Dim Temppi As Workbook
    Set Orginaali = ThisWorkbook

    On Error Resume Next
    Workbooks.Open csvfile, , , 2 '2 on pilkun (erotin) koodi
    Set Temppi = ActiveWorkbook

    Dim rivit As Long, solu
    rivit = Temppi.Sheets(1).UsedRange.Rows.Count

    Dim positio As Integer, merkit As Variant

    For Each solu In Temppi.Sheets(1).Range("A1:A" & CStr(rivit))
        merkit = solu.Value
        positio = InStrRev(merkit, " ") - 1
        If positio <> InStr(merkit, " ") - 1 Then
            solu.Value = Left(merkit, positio)
        End If
    Next

    rivit = Orginaali.Sheets(1).UsedRange.Rows.Count

    If rivit > 1 Or Application.CountA( _
    Orginaali.Sheets(1).Rows(1).EntireRow) <> 0 Then
        rivit = rivit + 1
    End If

    For Each solu In Temppi.Sheets(1).UsedRange
       Orginaali.Sheets(1).Cells( _
       solu.Row + rivit - 1, solu.Column).Value = solu.Value
    Next

    Orginaali.Activate: Temppi.Close
    Orginaali.Sheets(1).UsedRange.Columns.AutoFit

    Set Temppi = Nothing
    Set Orginaali = Nothing
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    If Err <> 0 Then
        MsgBox "Prosessin aikana syntyi virhe:" & _
        vbCrLf & Error$: Err.Clear
        On Error GoTo 0
    End If

End Sub

jolloin esimerkissäsi oleva jutska näyttäisi Excelissä jokseenkin seuraavalta:

            A        | B | C
1 |XX:XXX:XX XX:XX.XX|XXX|XX
2 |X:XXX:XX XX:XX:XX |XX |XX
3 |XX:XXX:XX XX:XX:XX|XX |XX

DBasic [16.05.2012 15:56:05]

#

Hei vielä kerran. Olen lueskellut tässä Visual Basic ohjeita, mutta en nyt ole vielä sisäistänyt, mihin nuo parserin/annetun koodin osat tiputetaan? Eli pitääkö luoda joku taulukko, jonka sisään nuo menee vai mihin?

neau33 [24.05.2012 14:44:22]

#

Moi taas DBasic

Aloita VBA:n opiskelu vaikka näis . Valmiin esimerkkiprojektin voit impata täältä

Vastaus

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

Tietoa sivustosta