08. oktober 2007 - 16:36Der 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
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
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
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
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
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?
Hvis jeg kører nedenstående, så får jeg noget volapyk i min fil: ㈳㠱㜶T歳杵汥敢杲㋿㠲㘸㐵R歲楬‣〳〳匠䕖华⁋왎呒䅒䥆呋䝏ⴠ
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
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
Du skal vente med at acceptere svar før alle har svaret.
Synes godt om
Ny brugerNybegynder
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.