Avatar billede dp2001 Juniormester
29. september 2003 - 11:39 Der er 14 kommentarer og
2 løsninger

Readline - 4.sidste linje

Hvordan læser jeg indholdet af 4.sidste linje fra en given txt-fil?

Eksempel?
Avatar billede martin_moth Mester
29. september 2003 - 13:54 #1
Åben filen
Indlæs linie for linie, mens en counter tæller op
Luk filen
Åben filen
læs linie for linie til counter - 4
gem den aktuelle inien
Luk filen


Eller

Åbn filen
Læs filen linie for linie, og smid hver linie ind i en plads i et array
Luk filen
4. sidste linie ligger i ArrayNavn(Ubound-4)
Avatar billede martin_moth Mester
29. september 2003 - 14:18 #2
Ad 1)

Dim Linie as String
Dim Tæller as Long
Dim i as Long
Open "C:\test.txt" For Input As #1
While not EOF(#1)
  Line Input #1, Linie
Wend
Close #1

Open "C:\test.txt" For Input As #1
For i = 1 to Tæller-4
  Line Input #1, Linie
  i = i+1
Next i
Close #1
MsgBox "4. sidste linie er " & Linie






Ad 2

Dim MitArray() As String
Dim i as Long
Open "C:\test.txt" For Input As #1
While not EOF(#1)
  Line Input #1, MitArray(i)
  i= i+1
Wend
Close #1
MsgBox "4. sidste linie er " & MitArray(UBound(Mitarray)-4)
Avatar billede martin_moth Mester
29. september 2003 - 14:28 #3
Måske mere elegant:

Erstat

  MsgBox "4. sidste linie er " & MitArray(UBound(Mitarray)-4)

med

  MsgBox "4. sidste linie er " & MitArray(i-4)

Gider ikke lige lure om der skal stå -4 eller -5 eller -3 - prøv selv :o)
Avatar billede sjh Nybegynder
30. september 2003 - 03:02 #4
Du kan også gøre sådan:


Private Sub Form_Load()
Dim ArrTmp(4) As String  'Array fra 0 til 4 (5) da sidste linje kan være tom
Dim ArrLine(3) As String 'Array fra 0 til 3 (4) til de 4 linjer
Dim strLine As String
Dim intFree As Integer
Dim i As Long
Dim j As Long

  intFree = FreeFile
  Open "C:\Test.txt" For Input As #intFree
    While Not EOF(intFree)
      Line Input #intFree, ArrTmp(i Mod 4): i = i + 1
    Wend
  Close #intFree

  For j = 3 To 0 Step -1
    ArrLine(j) = ArrTmp((j + i) Mod 4)
  Next j

  'Her kommer de 4 linjer ud.. "0 er linje 1" og "3 er linje 4"
  For i = 0 To 3
    strLine = ArrLine(i)
    'Hvis der kun er 2 linjer i din file, så må der være 2 linjer som er tomme
    If strLine <> "" Then
      'Her skriver den linje "i" ud..
      MsgBox strLine
    End If
  Next i
End Sub
Avatar billede dp2001 Juniormester
30. september 2003 - 08:51 #5
Jeg skylder måske at sige, at det er ifb. med noget WSH, at jeg vil bruge det. Ved ikke om ovenstående (fra martin_moth) kan lade sig gøre der?

Hvis jeg bruger 2) får jeg følgende fejl:

linje 3, tegn 16: slut på sætning var ventet.
Avatar billede dp2001 Juniormester
30. september 2003 - 08:52 #6
linje 3 er: Dim MitArray() As String
Avatar billede martin_moth Mester
30. september 2003 - 10:02 #7
WSH..?
Avatar billede dp2001 Juniormester
30. september 2003 - 10:35 #8
Windows-script. Dvs. en .vbs-fil som jeg afvikler i Windows vha. cscript.exe
Avatar billede martin_moth Mester
30. september 2003 - 10:52 #9
Så drop arrayløsningen hvis man ikke kan erklære et dynamsik array i VBS (som jeg ikke lige har rodet med)

Og ja, det er altid en god ide at skrive hvad ens spørgsmål går ud på nogenlunde fyldestgørende - det gør det jo lidt lettere at hjælpe (selvom jeg nu havde gives samme svar alligevel ;o)
Avatar billede martin_moth Mester
30. september 2003 - 10:53 #10
Eller brug løsningen fra shj - han bruger statiske arrays, måske går det bedre. Løsning 1 (den helt uden arrays) er jeg dog ret sikker på virker :o)
Avatar billede dp2001 Juniormester
30. september 2003 - 11:13 #11
Det kan godt være, at alle 3 løsninger virker. Men lige nu har jeg generelt problemer ifb. med Dim-linjerne.

Jeg får konsekvent fejlen: 'Slut på sætning var ventet' hver gang der dimmes noget.
Avatar billede martin_moth Mester
30. september 2003 - 11:26 #12
Skal der ; efter hver linie i vbs?
Avatar billede martin_moth Mester
30. september 2003 - 11:28 #13
Eller kan vbs ikke håndterer typebestemte variabler (prøv at drop " As ..." )
Avatar billede martin_moth Mester
30. september 2003 - 11:30 #14
En anden gang skal du nok prøve i www.eksperten.dk/kat/297
Avatar billede sjh Nybegynder
30. september 2003 - 11:51 #15
'------------------------ Test.vbs ------------------------
Dim ArrTmp(4), ArrLine(3), objFSO, objFile, strPath, strLine, i, j

  strPath = "D:\SYSTEM\Skrivebord\Dato_2000_2030.txt"

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objFile = objFSO.OpenTextFile(strPath, 1)
 
    Do While Not objFile.AtEndOfStream
      ArrTmp(i Mod 4) = objFile.ReadLine: i = i + 1
    Loop
    objFile.Close

  Set objFile = Nothing
  Set objFSO = Nothing

  For j = 3 To 0 Step -1
    ArrLine(j) = ArrTmp((j + i) Mod 4)
  Next

  For i = 0 To 3
    strLine = ArrLine(i)
    If strLine <> "" Then
      MsgBox strLine
    End If
  Next
'------------------------ Test.vbs ------------------------
Avatar billede dp2001 Juniormester
30. september 2003 - 13:54 #16
Virker! Takker begge for hjælpen og spreder point lidt.
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