Avatar billede thomas_p Nybegynder
12. juni 2007 - 10:33 Der er 3 kommentarer

Syntax for at hente data fra en tabulator separeret tekstfil?

Hej

Jeg er nybegynder inden for programmering, og ønsker at lave en applikation der bl.a. kan læse data fra en tabulator separeret teksfil.
Jeg er startet med at definere en type bestående af:

Type individtype
    Iddyr as string
    Idfar as string
    Idmor as string
End type

Herefter har jeg oprettet et array og indekseret det:

Individ(5) as individtype
Dim arrayID as integer

Jeg bruger inputboxe til at komme data i mit array, og print til at skrive de indtastede data i tabulator separeret format til en tekstfil. Det fungerer fint. Mit problem er at jeg ikke kan finde ud af at få min applikation til læse tabulator separeret tekst. Jeg har eksperimenteret med både Line input og input, men kan ikke få det til at fungere.

Mvh
Thomas
Avatar billede kjulius Novice
12. juni 2007 - 22:56 #1
Du kan nok ikke bruge input, men line input burde du kunne bruge. Den vil indlæse hele linien (recorden) ind i en strengvariabel. Du skal så selv herefter opdele din streng, når du finder et tab tegn (som så vidt jeg husker er ascii 9). Så det burde kunne gøres noget ala.

Sub opdel()
Dim inpstr As String
Dim start As Integer
Dim x As Integer
Open "C:\Test.txt" For Input As #1
Do While Not EOF(1)
    Line Input #1, inpstr
    x = 0
    Do
        start = x + 1
        x = InStr(start, inpstr, vbTab)
        If x > 0 Then
            Debug.Print Mid(inpstr, start, x - start),
        Else
            Debug.Print Mid(inpstr, start, Len(inpstr) - x + 1)
        End If
    Loop Until x = 0
Loop
Close #1
End Sub
Avatar billede kjulius Novice
12. juni 2007 - 23:15 #2
Lille rettelse (forbehold: stadig ikke testet under alle forhold)

Sub opdel()
Dim inpstr As String
Dim start As Integer
Dim x As Integer
Open "C:\Test.txt" For Input As #1
Do While Not EOF(1)
    Line Input #1, inpstr
    x = 0
    Do
        start = x + 1
        x = InStr(start, inpstr, vbTab)
        If x > 0 Then
            Debug.Print Mid(inpstr, start, x - start),
        Else
            Debug.Print Mid(inpstr, start, Len(inpstr) - start + 1)
        End If
    Loop Until x = 0
Loop
Close #1
End Sub
Avatar billede bauerdata Nybegynder
12. juni 2007 - 23:19 #3
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
f = open( "file.csv", "r" )
for line in f.readlines():
    felter = line.split( "\t" )
    # nu har du dine data i arrayen felter
    print felter[0],felter[1],felter[2],felter[3],felter[4]

# python er nemt :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester