Avatar billede tolveren Nybegynder
08. oktober 2007 - 16:36 Der er 24 kommentarer og
1 løsning

Line tæller

God ide til en line tæller. Har et problem med at udtrække nogle linjer fra en stor txt fil: Jeg mangler en forløkke eller noget andet så jeg kan udtrækker linje nr 158888 til linje nr 200000.
Har prøvet med i = 0 og derefter For Index = 158888 To 200000, men udtrækket sker fra filstart ???

Function Hent_linjer_freeware()

        Dim starttid2, i2, j2, Finish2, sekunder2, ss2
        starttid2 = Timer 'tidsmåling i sekunder starter
  'Dim linie, ord1, ord2, ord3, ord4, ord5, ord6, ord7, ord8 As String
    Dim linier, fillx, filly As String
   
    fillx = fill1.Text
   
    ord1 = ord1.Text
    ord2 = ord2.Text
    ord3 = ord3.Text
    ord4 = ord4.Text
    ord5 = ord5.Text
    ord6 = ord6.Text
    ord7 = ord7.Text
    ord8 = ord8.Text
   
    filly = fill2.Text
   
    Open fillx For Input As #1
    Open filly For Output As #2
    Do While Not EOF(1)
        Line Input #1, linier
If InStr(linier, ord1) > 0 Or InStr(linier, ord2) > 0 Or InStr(linier, ord3) > 0 Or InStr(linier, ord4) > 0 Or InStr(linier, ord5) > 0 Or InStr(linier, ord6) > 0 Or InStr(linier, ord7) > 0 Or InStr(linier, ord8) > 0 Then
          Print #2, linier
        End If
    Loop
    Close #1
    Close #2
            ' tidsmåling - start ligger i toppen
            For i2 = 1 To 1000
            j2 = i2 * i2
            Next i2
            Finish2 = Timer
            sekunder2 = Finish2 - starttid2
            MsgBox "Det tog " & sekunder2 & " sekunder at gennemføre programmet"
            ' tidsmåling slut
           
    MsgBox "Programmet er afsluttet og filen er gemt på: " & fill2 & ""
    ss2 = "explorer C:\acces_databaser"
    'Dim ie As SHDocVw.InternetExplorer ' husk references Microsoft internet controls
    'Set ie = CreateObject("InternetExplorer.application")
    'ie.Visible = True
    ss2 = "explorer " & fill2 & ""  ' åbner kataloget og filen i fil2
    Shell ss2, vbNormalFocus 'sætter den åbne fil forrest i applicationen
            '  skriv evt  vbMaximizedFocus
End Function
Avatar billede sjh Nybegynder
08. oktober 2007 - 17:10 #1
Ja hvis det er en tekst-fil så må du jo selv finde ud af hvor mange linjer der er i den, det står der nemlig ikke noget om i en tekst-filer..

Det kan du gøres fx.

' -------------------------------- Form1 --------------------------------
Option Explicit

Private Sub Form_Load()
  MsgBox CountLines("C:\test.txt")
End Sub

Public Function CountLines(strFilename As String) As Long
Dim i As Long
Dim nFree As Long
Dim nCount As Long
Dim bData() As Byte

  nFree = FreeFile
  Open strFilename For Binary Access Read As #nFree
    ReDim bData(LOF(nFree)) As Byte
    Get #nFree, 1, bData
  Close #nFree

  For i = LBound(bData) To UBound(bData)
    Select Case bData(i)
          Case 13, 10 ' ny linje er 2 tegn CRLF
            nCount = (nCount + 1)
    End Select
  Next

  CountLines = Int(nCount \ 2)
End Function
' -------------------------------- Form1 --------------------------------
Avatar billede tolveren Nybegynder
08. oktober 2007 - 17:29 #2
Jeg ved godt hvor mange linjer der er, men jeg har behov for at kunne udvælge et interval af linjer, som ligger midt i filen.
Avatar billede nielle Nybegynder
08. oktober 2007 - 21:20 #3
Noget i denne stil?

    Open fillx For Input As #1
    Open filly For Output As #2

    For skipLinje = 1 To 158888-1
        Line Input #1, linier
    Next

    interesanteLinjer = 200000 - 158888

    Do While Not EOF(1) And interesanteLinjer > 0
        interesanteLinjer = interesanteLinjer - 1

        Line Input #1, linier
        If InStr(linier, ord1) > 0 Or InStr(linier, ord2) > 0 Or InStr(linier, ord3) > 0 Or InStr(linier, ord4) > 0 Or InStr(linier, ord5) > 0 Or InStr(linier, ord6) > 0 Or InStr(linier, ord7) > 0 Or InStr(linier, ord8) > 0 Then
            Print #2, linier
        End If
    Loop

    Close #1
    Close #2
Avatar billede kabbak Professor
08. oktober 2007 - 23:10 #4
jeg modificerede lige din kode nielle

Open fillx For Input As #1
Open filly For Output As #2

For I = 1 To 200000    ' sidste tal er den sidste linie, som skal med i udtrækket
    Line Input #1, linier

    Select Case I
    Case 158888 To 200000
        If InStr(linier, ord1) > 0 Or InStr(linier, ord2) > 0 Or InStr(linier, ord3) > 0 Or InStr(linier, ord4) > 0 Or InStr(linier, ord5) > 0 Or InStr(linier, ord6) > 0 Or InStr(linier, ord7) > 0 Or InStr(linier, ord8) > 0 Then
            Print #2, linier
        End If
    End Select
Next
Close #1
Close #2
Avatar billede nielle Nybegynder
08. oktober 2007 - 23:31 #5
Også en mulighed, selvom jeg nok selv ville lave det med en If-Then i stedet for en Select-Case i lige dette tilfælde. :^)
Avatar billede nielle Nybegynder
09. oktober 2007 - 06:50 #6
Sådan:

Open fillx For Input As #1
Open filly For Output As #2

For I = 1 To 200000    ' sidste tal er den sidste linie, som skal med i udtrækket
    Line Input #1, linier

    If 158888 =< I Then
        If InStr(linier, ord1) > 0 Or InStr(linier, ord2) > 0 Or InStr(linier, ord3) > 0 Or InStr(linier, ord4) > 0 Or InStr(linier, ord5) > 0 Or InStr(linier, ord6) > 0 Or InStr(linier, ord7) > 0 Or InStr(linier, ord8) > 0 Then
            Print #2, linier
        End If
    End If
Next

Close #1
Close #2
Avatar billede tolveren Nybegynder
09. oktober 2007 - 12:39 #7
Til sjh. Kan ikke få din tæller til at virke. Til Kabbak og nielle. Ser ud til at virke. Kan dog ikke udtrække linje nr 1. F eks  Linjenr 1 - 5.
Avatar billede nielle Nybegynder
09. oktober 2007 - 15:11 #8
Burde da ikke være et problem:

Open fillx For Input As #1
Open filly For Output As #2

For I = 1 To 5    ' sidste tal er den sidste linie, som skal med i udtrækket
    Line Input #1, linier

    If 1 =< I Then
        If InStr(linier, ord1) > 0 Or InStr(linier, ord2) > 0 Or InStr(linier, ord3) > 0 Or InStr(linier, ord4) > 0 Or InStr(linier, ord5) > 0 Or InStr(linier, ord6) > 0 Or InStr(linier, ord7) > 0 Or InStr(linier, ord8) > 0 Then
            Print #2, linier
        End If
    End If
Next

Close #1
Close #2


Hvad sker der da i stedet, hvis dette ikke virker?
Avatar billede tolveren Nybegynder
09. oktober 2007 - 16:18 #9
Der kommer noget kineser-tegn ud i outputfilen !!!
Avatar billede nielle Nybegynder
09. oktober 2007 - 16:22 #10
Det må da på en eller anden måde stamme fra input-filen?

Der er i hvert fald intet i koden som ændre på det der indlæses inden at det udskrives igen.
Avatar billede nielle Nybegynder
16. oktober 2007 - 08:40 #11
Er du kommet vidre med denne her?
Avatar billede tolveren Nybegynder
16. oktober 2007 - 16:22 #12
Tjekker det lige i morgen. Undskyld forsinkelsen. Du skal også have point.
Avatar billede nielle Nybegynder
16. oktober 2007 - 19:19 #13
Vi venter med point til at du har fået løst dit problem :^)
Avatar billede tolveren Nybegynder
17. oktober 2007 - 15:53 #14
Hvis jeg kører nedenstående, så får jeg noget volapyk i min fil:
&#12851;&#14385;&#14134;&#65332;&#27507;&#26485;&#27749;&#25954;&#26482;&#13055;&#14386;&#13880;&#13365;&#65330;&#58445;&#27506;&#26988;&#8302;&#8227;&#12339;&#12339;&#21280;&#17750;&#21326;&#8267;&#50766;&#21586;&#16722;&#18758;&#21579;&#18255;&#11552;

Option Explicit
Private Sub CommandButton1_Click()
Call Hent_linjer_freeware
End Sub
Function Hent_linjer_freeware()

        Dim starttid2, i2, j2, Finish2, sekunder2, ss2
        starttid2 = Timer 'tidsmåling i sekunder starter
    Dim linie As String
    Dim ord1, ord2, ord3, ord4, ord5, ord6, ord7, ord8  As String
    Dim linier, fillx, filly, i, skipLinje, interesanteLinjer
   
   
    fillx = fill1.Text
   
       
    filly = fill2.Text
   
    Open fillx For Input As #1
    Open filly For Output As #2
       
  For i = 1 To 5    ' sidste tal er den sidste linie i udtrækket
    Line Input #1, linier

                       
    If 1 <= i Then
       
        Print #2, linier
       
    End If
Next
           
    Close #1
    Close #2
            ' tidsmåling - start ligger i toppen
            For i2 = 1 To 1000
            j2 = i2 * i2
            Next i2
            Finish2 = Timer
            sekunder2 = Finish2 - starttid2
            MsgBox "Det tog " & sekunder2 & " sekunder at gennemføre programmet"
            ' tidsmåling slut
           
    ''MsgBox "Programmet er afsluttet og filen er gemt på: " & fill2 & ""
    ''ss2 = "explorer C:\acces_databaser"
    'Dim ie As SHDocVw.InternetExplorer ' husk references Microsoft internet controls
    'Set ie = CreateObject("InternetExplorer.application")
    'ie.Visible = True
    ''ss2 = "explorer " & fill2 & ""  ' åbner kataloget og filen i fil2
    ''Shell ss2, vbNormalFocus 'sætter den åbne fil forrest i applicationen
            '  skriv evt  vbMaximizedFocus
End Function
Avatar billede nielle Nybegynder
19. oktober 2007 - 13:08 #15
Det burde give akkurat det samme som denne stump kode:

    For i = 1 To 5
        Line Input #1, linier
        Print #2, linier
    Next
Avatar billede nielle Nybegynder
19. oktober 2007 - 13:11 #16
Skal det forresten ikke være:

Input #1, linier

i stedet for:

Line Input #1, linier
Avatar billede fizz Nybegynder
25. oktober 2007 - 23:50 #17
det er måske ikke den helt politisk korrekte måde at gøre det på men det virker og er nemt:

Function Hent_linjer_freeware()
    Dim Indhold As String
    Dim linier() As String
    Indhold = Space(FileLen("c:\testfil.txt"))
    Open "c:\testfil.txt" For Binary As #1
        Get #1, , Indhold
    Close
    linier = Split(Indhold, vbCrLf)
    For i = 158888 To 200000
        'et eller andet = linier(i)
    Next i
End Function
Avatar billede tolveren Nybegynder
26. oktober 2007 - 11:02 #18
skal lige tjekke Jer begges ideer. Kan ikke i denne uge da jeg er på ferie. I skal nok høre om det dur.
Avatar billede nielle Nybegynder
06. november 2007 - 17:29 #19
Er du kommet vidre med denne her?
Avatar billede nielle Nybegynder
12. november 2007 - 18:52 #20
??
Avatar billede tolveren Nybegynder
15. november 2007 - 16:17 #21
Nielle, sjh, kabbak læg et svar så lukker jeg.
Avatar billede kabbak Professor
16. november 2007 - 09:24 #22
.
Avatar billede tolveren Nybegynder
16. november 2007 - 16:18 #23
gav kabbak 30 point men den åd det hele. Beklager til nielle, men tak.
Avatar billede fizz Nybegynder
16. november 2007 - 19:13 #24
hva med mig ??!?
Avatar billede nielle Nybegynder
16. november 2007 - 21:01 #25
Du skal vente med at acceptere svar før alle har svaret.
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