Avatar billede bente_fiber Nybegynder
02. juli 2007 - 23:10 Der er 8 kommentarer og
1 løsning

Simpelt spørgsmål. venligst hjælp!

Hej

Er ved at lave et mindre program som læser seneste linier fra en TXT fil. Men den skal IKKE indlæse hele filen, da denne fil er en log som hurtigt kan fylde MANGE GB's og derved vil smadre hukommelsen.

Hvordan sørger jeg for, at den kun henter de første 50 linier?

Ligenu benytter jeg



Dim infoReader As System.IO.FileInfo
        infoReader = My.Computer.FileSystem.GetFileInfo("C:\test.txt")
        MsgBox("File is " & infoReader.Length & " bytes.")

        r = New IO.StreamReader("c:\test.txt")

        While (r.Peek() > -1)

            contentbox.Items.Add(r.ReadToEnd)

        End While
        r.Close()



TAKKER!!!
Avatar billede arne_v Ekspert
02. juli 2007 - 23:13 #1
Du kalder r.ReadLine 50 gange fremfor r.ReadToEnd 1 gang.
Avatar billede bente_fiber Nybegynder
02. juli 2007 - 23:19 #2
Ok tusind tak..

Lige nu har jeg en timer som opdaterer et felt hvert sekund, men man kan ikke markere den. Er der nogen måde jeg kan gøre sådan, at den selv tjekker om der er en ny linie og automatisk tilføjer den hvis der er en ny linie altså?

contentbox.Items.Clear()

        Dim infoReader As System.IO.FileInfo
        infoReader = My.Computer.FileSystem.GetFileInfo("C:\test.txt")
        MsgBox("File is " & infoReader.Length & " bytes.")

        r = New IO.StreamReader("c:\test.txt")

        While (r.Peek() > -1)

            contentbox.Items.Add(r.ReadToEnd)

        End While
        r.Close()
Avatar billede bente_fiber Nybegynder
02. juli 2007 - 23:28 #3
Jeg kan ikke få r.readline = 50 eller r.readline(50) til at virke. :(
Avatar billede groop Nybegynder
02. juli 2007 - 23:42 #4
Det er fordi metoden ikke modtager en INT parameter.
Du opretter en loop:

Dim line As String
For d = 0 To 50
line = line + " " + r.ReadLine();
Next d

Ps. Jeg koder ikke selv i VB.Net men ideen er god nok. Det ville nok være mere hensigtsmæssigt, at oprette en ArrayList og smide strings'ne ned i.
Avatar billede arne_v Ekspert
03. juli 2007 - 01:44 #5
Vil du læse de første 50 linier eller nye linier ?

Det er ligesom to meget forskellige ting.
Avatar billede arne_v Ekspert
03. juli 2007 - 01:45 #6
Jeg har et eksempel på at læse nye linier her:

Imports System
Imports System.IO
Imports System.Threading

Namespace E
    Public Class TailSniff
        Private filename As String
        Private pos As Long

        Public Sub New(ByVal filename As String)
            Me.filename = filename
            pos = 0
        End Sub
        Public Function Read() As StreamReader
            Dim fs As FileStream = New FileStream(filename, FileMode.Open, FileAccess.Read)
            Dim len As Long = fs.Length
            fs.Seek(pos, SeekOrigin.Begin)
            Dim b(len - pos) As Byte
            fs.Read(b, 0, b.Length)
            fs.Close
            pos = len
            Return New StreamReader(New MemoryStream(b))
        End Function
    End Class
    Public Class MainClass
        Public Shared Sub Main(ByVal args As String())
            Dim ts As TailSniff = New TailSniff("C:\z.z")
            While True
                Dim sr As StreamReader = ts.Read
                While sr.Peek > 0
                    Dim line As String = sr.ReadLine
                    Console.WriteLine(line)
                End While
                sr.Close
                Thread.Sleep(10)
            End While
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
07. august 2007 - 22:22 #7
OK ?
Avatar billede groop Nybegynder
21. august 2007 - 15:52 #8
Jeg samler ikke på point så..... :) Håber du fik løst problemstillingen.
Avatar billede arne_v Ekspert
28. oktober 2007 - 02:59 #9
Tid at få afsluttet her ?
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