Withaar
Verenigingslid
- Lid geworden
- 8 apr 2001
- Berichten
- 3.551
Dit is niet echt een vraag, maar ik wil mijn oplossing graag met jullie delen aangezien ik geen goede (volledige) oplossingen tegen kwam bij het zoeken naar een oplossing.
Probleem: De applicatie die ik beheer maakt logfiles aan die 2GB per dag groot kunnen worden.
Het aantal regel loopt met gemak op tot over de 2 miljoen. Openen in Excel is dus geen optie, maar eigelijk ook niet iets dat ik wil aangezien het me alleen om specifieke regels in de logfile gaat, im mijn geval de regels met daarin 'Used Client Licenses'.
Ik heb dit met onderstaan de marco voor me zelf opgelost.
Je kunt een default string opgeven maar ook zoeken op een een andere string.
Er wordt een nieuw bestand aangemaakt met alleen de gevonden regels.
Wat nog issue is, is dat Excel nog bezig kan zijn met het aanmaken/wegschrijven van het nieuwe bestand als je de vraag krijgt het te openen.
Dit lukt dan wel, maar in een read-only versie wat als je er op let wel kunt zien, maar als je direct verder werken in het nieuwe bestand is dat niet handig.
Als iemand weet hoe ik dit nog kan afvangen en de vraag pas gesteld wordt nadat de hele file is aangemaakt zou dat nog een mooie aanvulling zijn.
Probleem: De applicatie die ik beheer maakt logfiles aan die 2GB per dag groot kunnen worden.
Het aantal regel loopt met gemak op tot over de 2 miljoen. Openen in Excel is dus geen optie, maar eigelijk ook niet iets dat ik wil aangezien het me alleen om specifieke regels in de logfile gaat, im mijn geval de regels met daarin 'Used Client Licenses'.
Ik heb dit met onderstaan de marco voor me zelf opgelost.
Je kunt een default string opgeven maar ook zoeken op een een andere string.
Er wordt een nieuw bestand aangemaakt met alleen de gevonden regels.
Wat nog issue is, is dat Excel nog bezig kan zijn met het aanmaken/wegschrijven van het nieuwe bestand als je de vraag krijgt het te openen.
Dit lukt dan wel, maar in een read-only versie wat als je er op let wel kunt zien, maar als je direct verder werken in het nieuwe bestand is dat niet handig.
Als iemand weet hoe ik dit nog kan afvangen en de vraag pas gesteld wordt nadat de hele file is aangemaakt zou dat nog een mooie aanvulling zijn.
Code:
Sub Read_and_write_selective_from_files()
'A new file is writen with only the matched rows
'At the end there is a option to auto-open the new file
Dim ws As Worksheet
Dim strFile As String
Dim strFile2 As String
Dim strFile3 As String
Dim strZoekstring As String
Dim strDefault As String
'Default search string
strDefault = "Used Client Licenses"
Dim blMSG1 As String
Dim blMSG2 As String
Dim strDefault2
'Deafult new extention to new file
strDefault2 = "_new.csv"
'Select file
strFile = Application.GetOpenFilename("Text Files (*.*),*.*", , "Please select file...")
'search string, empty = use default string, easy if youre search text is always the same
strZoekstring = InputBox(Prompt:="Search string, (empty = " & strDefault & ")")
If strZoekstring = "" Then strZoekstring = strDefault
'
'get only the filename from path&filename string strFile
'msgbox (strFile) 'show input
strFile2 = StrReverse(strFile) 'reverse string
strFile2 = Split(strFile2, "\")(0) ' break at first \ in string
strFile2 = StrReverse(strFile2) 'reverse string
'msgbox (strFile2) 'show output
blMSG1 = MsgBox("Add filename in frond of each (new) row?", vbYesNo, "Source ref")
If blMSG1 = vbYes Then
strFile3 = strFile2
Else
strFile3 = ""
End If
' Read
Open strFile For Input As #1
' Write
Open strFile & strDefault2 For Output As #2
'Core loop
Line Input #1, Z
Do While Not EOF(1)
Line Input #1, Z
If InStr(1, Z, strZoekstring, 1) Then
If strFile2 <> "" Then Z = strFile3 & " " & Z
Print #2, Z
End If
Loop
blMSG2 = MsgBox("Open the new file?", vbYesNo, "Open?")
If blMSG2 = vbYes Then
strFile3 = strFile2 & strDefault2
strFile = Replace(strFile, strFile2, strFile3)
Workbooks.Open Filename:=strFile
End If
On Error Resume Next
Close 1
Close 2
End Sub