Avatar billede clausnilsson Mester
27. august 2007 - 23:06 Der er 7 kommentarer og
1 løsning

input fra textfil giver error 6

Hejsa der,

Hvorfor får jeg fejl 6 på:

Open "c:\data.txt" For Input As #1
   
    i = 0
    While Not EOF(1)
    Input #1, stdato(i), sttid(i), proj(i), sldato(i), sltid(i)
    Debug.Print stdato(i), sttid(i), proj(i), sldato(i), sltid(i)
    i = i + 1
    Wend
    Close #1

Filen består af linier med en dato, en tid, en string, en dato og en tid i hver.

Forud for ovenstående har dimmed alle variablerne som date, undtagen proj, som er string.

Hvad er det jeg misser?
Avatar billede kabbak Professor
27. august 2007 - 23:09 #1
Hvordan er data separeret ??
Avatar billede kabbak Professor
27. august 2007 - 23:19 #2
har du dimmet dine variabler, med en kendt antal data, f.eks.
Dim stdato(100)
hvis ikke, skal du re dimme

således:


Open "c:\data.txt" For Input As #1
i = 0
    While Not EOF(1)
ReDim Preserve stdato(i)
ReDim Preserve sttid(i)
ReDim Preserve proj(i)
ReDim Preserve sldato(i
ReDim Preserve sltid(i)
    Input #1, stdato(i), sttid(i), proj(i), sldato(i), sltid(i)
    Debug.Print stdato(i), sttid(i), proj(i), sldato(i), sltid(i)
    i = i + 1
    Wend
    Close #1
Avatar billede clausnilsson Mester
27. august 2007 - 23:43 #3
Ja, jeg har dimmet dem med et kendt antal. Men jeg prøvede alligevel din redim preserve, det gav en ny fejl at jeg allerede havde dimmet.

Data er separeret med en række mellemrum. Ikke sk.smart, men åbenbart standard med

Open "c:\data.txt" For Append As #1
        Print #1, StartDato, StartTid, AktivtProj, StopDato, StopTid
        Close #1

Men det er måske her problemet ligger, kan gøres smartere?
Avatar billede kabbak Professor
27. august 2007 - 23:53 #4
jeg prøver et skud, hvis der altid er data i de 5 felter, burde denne virke.

Dim stdato() As Variant
    Dim sttid() As Variant
    Dim proj() As Variant
    Dim sldato() As Variant
    Dim sltid() As Variant
    Dim strdata As String
    Data As Variant
    Open "c:\data.txt" For Input As #1
    i = 0
    While Not EOF(1)
        ReDim Preserve stdato(i)
        ReDim Preserve sttid(i)
        ReDim Preserve proj(i)
        ReDim Preserve sldato(i)
        ReDim Preserve sltid(i)
        Line Input #1, strdata
        Data = Split(Trim(strdata), " ")
        stdato(i) = Data(0)
        sttid(i) = Data(1)
        proj(i) = Data(2)
        sldato(i) = Data(3)
        sltid(i) = Data(4)
        Debug.Print stdato(i), sttid(i), proj(i), sldato(i), sltid(i)
        i = i + 1
    Wend
    Close #1
Avatar billede kabbak Professor
27. august 2007 - 23:58 #5
Jeg ville nok gemme med et ; imellem

Open "c:\data.txt" For Append As #1
        Print #1, StartDato & ";" & StartTid & ";" & AktivtProj & ";" & StopDato & ";" & StopTid
        Close #1
Avatar billede clausnilsson Mester
28. august 2007 - 21:33 #6
Så lærte jeg nok en masse her. Jeg bruger dit forslag vedr. &";"& istedet for , når jeg gemmer data. Men jeg kan ikke bruge split, for jeg har glemt at nævne at jeg kører på 5.0 :-( Jeg har nu knoklet i timevis med InStr og mid/left/right, men det vil bare ikke. Har du en løsning i 5.0? Men send et svar, du har fortjent pointene, så må jeg knokle videre med InStr.
Avatar billede kabbak Professor
28. august 2007 - 22:31 #7
Ok, jeg bygger lige en ny op ud fra din første kode.


Public Sub UD()
Dim StartDato As Date, StartTid As Date, Stopdato As Date, StopTid As Date
Dim AktivtProj As String
    StartDato = #1/1/2007#
    StartTid = #10:20:00 AM#
    Stopdato = #2/3/2007#
    StopTid = #12:20:00 AM#
    AktivtProj = "Peter Hansen"

    Open "c:\data.txt" For Append As #1
    Print #1, StartDato & Chr(44) & StartTid & Chr(44) & AktivtProj & Chr(44) & Stopdato & Chr(44) & StopTid
    Close #1
End Sub

Public Sub IND()
    Dim stDato() As String
    Dim Proj() As String
    Dim stTid() As String
    Dim slDato() As String
    Dim slTid() As String
    Open "c:\data.txt" For Input As #1
    i = 0
    While Not EOF(1)
        ReDim Preserve stDato(i)
        ReDim Preserve stTid(i)
        ReDim Preserve Proj(i)
        ReDim Preserve slDato(i)
        ReDim Preserve slTid(i)
        Input #1, stDato(i), stTid(i), Proj(i), slDato(i), slTid(i)
        Debug.Print stDato(i), stTid(i), Proj(i), slDato(i), slTid(i)
        i = i + 1
    Wend
    Close #1
End Sub
Avatar billede kabbak Professor
28. august 2007 - 22:31 #8
fjern lige

StartDato = #1/1/2007#
    StartTid = #10:20:00 AM#
    Stopdato = #2/3/2007#
    StopTid = #12:20:00 AM#
    AktivtProj = "Peter Hansen"

det var til test
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