크기가 5MB에서 1GB 크기의 공간 구분 로그 파일을 읽은 다음이 정보를 MySQL 데이터베이스에 저장하여 나중에 보고서를 인쇄 할 때 사용할 수 있습니다 파일에 포함 된 정보에 따라 시도한 방법/발견 한 방법은 매우 느립니다.VB.net에서 큰 구분 된 텍스트 파일 읽기 및 구문 분석
내가 잘못 했나요? 또는 매우 큰 텍스트 파일을 처리하는 더 좋은 방법이 있습니까? 나는 다음과 같이 textfieldparser를 사용하려고했습니다
:
이 작동하지만 큰 파일을 매우 느립니다Using parser As New TextFieldParser("C:\logfiles\testfile.txt")
parser.TextFieldType = FieldType.Delimited
parser.CommentTokens = New String() {"#"}
parser.Delimiters = New String() {" "}
parser.HasFieldsEnclosedInQuotes = False
parser.TrimWhiteSpace = True
While Not parser.EndOfData
Dim input As String() = parser.ReadFields()
If input.Length = 10 Then
'add this to a datatable
End If
End While
End Using
.
Function GetSquidData(ByVal logfile_path As String) As System.Data.DataTable
Dim myData As New DataSet
Dim strFilePath As String = ""
If logfile_path.EndsWith("\") Then
strFilePath = logfile_path
Else
strFilePath = logfile_path & "\"
End If
Dim mySelectQry As String = "SELECT * FROM testfile.txt WHERE Client_IP <> """""
Dim myConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFilePath & ";Extended Properties=""text;HDR=NO;""")
Dim dsCmd As New System.Data.OleDb.OleDbDataAdapter(mySelectQry, myConnection)
dsCmd.Fill(myData, "logdata")
If Not myConnection.State = ConnectionState.Closed Then
myConnection.Close()
End If
Return myData.Tables("logdata")
End Function
있는 schema.ini 파일 :
나는 그때 미리 디렉터리에 쓰기있는 schema.ini 파일과 함께 다음과 같은 기능에 따라 텍스트 파일에 인 OleDB 연결을 사용하여 시도[testfile.txt]
Format=Delimited()
ColNameHeader=False
Col1=Timestamp text
Col2=Elapsed text
Col3=Client_IP text
Col4=Action_Code text
Col5=Size double
Col6=Method text
Col7=URI text
Col8=Ident text
Col9=Hierarchy_From text
Col10=Content text
누구나 이러한 파일을 더 빨리 읽을 수있는 방법이 있습니까?
-edit-
은 작업 부하를 확산 스레딩 어떤 종류의 impelement하려고 말 내 머리 ID의 정상에서
입니다 (http://en.wikipedia.org/wiki/Logparser) 오히려 스스로를 구현하는 것보다. – AakashM
이 방법들은 전체 파일에서 동시에 읽습니까? 프로그램의 메모리를 보면, 읽고있는 파일의 크기 (500MB-1GB)를 초과하여 촬영하고 있습니까? 그렇다면 아마 한 번에 한 줄씩 파일을 읽을 수있는 파일을 읽는 방법을 사용해야합니다. –
@AakashM 감사합니다. –