Dear all,
This is part of the code for my Masters project which I wrote. I am using this code to run in VB to read data from approximately huge text files which contain raw data. Approximately 300 files each 6-7 MB; total 2.26GB text file data (each text file has like 30,000+ lines). The problem is using this code my data reads very slowly (30 days approximately to read all text files into excel worksheet), and I need to speed up the process. I was thinking if I convert to VB.NET 2005 it will execute faster.
Can anyone give me pointers on how to convert this into VB.NET, or if anyone of you can assist me, that would be a big help. I have no idea about VB.NET programming and am new, since I know most of the VB functions are obsolete in .NET 2005.
regards,
awyeah
This is part of the code for my Masters project which I wrote. I am using this code to run in VB to read data from approximately huge text files which contain raw data. Approximately 300 files each 6-7 MB; total 2.26GB text file data (each text file has like 30,000+ lines). The problem is using this code my data reads very slowly (30 days approximately to read all text files into excel worksheet), and I need to speed up the process. I was thinking if I convert to VB.NET 2005 it will execute faster.
Code:
Option Explicit
Dim rmr_files() As String Array containing directories and rmr data file names
Dim rmr_folder_name As String Name of first folder of RMR data
Dim rmr_file_list As String RMR data file names text file
Dim rmr_data_file As String RMR excel data file name
Dim sheet_names() As String Sheet names in excel RMR Data file
Dim sheet_index() As Long Index number of excel sheets
Dim found_sheet_index As Long Index number of found sheet
Public Sub ReadFirstRMRDataFileIntoExcel()
Dim filenum As Long
Dim filenum2 As Long
Dim str As String
Dim str2 As String
Dim sJoin As String
Dim row As Long
Dim remove_quotes As String
Dim customer_name As String
Dim line As Long
Dim line2 As Long
Dim count As Long
Dim fileno As Long
Dim filechange As Boolean
Dim customersheet As Boolean
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim xlWs As Excel.Worksheet
Set excel objects
Set xlApp = CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Open(rmr_data_file)
xlApp.Visible = False
xlApp.DisplayAlerts = False
Change file indication
fileno = 1
filechange = False
Read only the files in the first folder of the RMR data
For count = LBound(rmr_files) To UBound(rmr_files)
If the rmr data folder is the first folder then proceed only
If InStr(rmr_files(count), rmr_folder_name) <> 0 Then
Open rmr data file and begin to read
filenum = FreeFile
Open "" & rmr_files(count) & "" For Input As filenum
row = 1
line = 1
Do While Not EOF(filenum)
Line Input #filenum, str
str = Trim(Pack(StripOut(str, """")))
Split string into separate words and characters
Dim i As Long
Dim sArray As Variant
sArray = Split(str, " ")
For i = LBound(sArray) To UBound(sArray)
sArray(i) = """" & sArray(i) & """"
Next
Join back array to convert into csv format
sJoin = Join(sArray, ",")
If UCase(Mid(sJoin, 2, 8)) = "RECORDER" Then
sJoin = Replace(sJoin, "RECORDER"",""ID", "RECORDER ID")
End If
New customer found
If InStr(sJoin, "RECORDER") <> 0 Then
row = 1
End If
Open new file
Get the name of the customer from second line after the "RECORDER" line
If row = 1 Then
filenum2 = FreeFile
Open "" & rmr_files(count) & "" For Input As filenum2
line2 = 1
Do While Not EOF(filenum2)
Line Input #filenum2, str2
str2 = Trim(Pack(StripOut(str2, """")))
If line2 = line + 1 Then
Split string into separate words and characters
Dim custArray As Variant
custArray = Split(str2, " ")
Get the name of customer
customer_name = custArray(0)
Exit Do
End If
line2 = line2 + 1
Loop
Close #filenum2
End If
Check if customer sheet already added or not in excel file
customersheet = False
For Each xlWs In xlWb.Worksheets
If Trim(customer_name) = Trim(xlWs.Name) Then
customersheet = True
Exit For
End If
Next
IF CUSTOMER DOES NOT EXIST IN EXCEL WORKBOOK THEN ONLY WRITE TO EXCEL SHEET
If customersheet = False Then
If it is the first customer in first file then
If line = 1 And xlWb.Worksheets(1).Name <> customer_name And fileno = 1 Then
xlWb.Worksheets(1).Name = customer_name
Set xlWs = xlWb.Sheets(1)
End If
If new customer create new worksheet and write to it
If row = 1 And line <> 1 And filechange = False Then
Add new sheet for customers in the same txt file
xlWb.Worksheets.Add
xlWb.Worksheets(1).Name = customer_name
Set xlWs = xlWb.Sheets(1)
ElseIf row = 1 And line = 1 And filechange = True Then
For new text files add new sheet for new customers
xlWb.Worksheets.Add
xlWb.Worksheets(1).Name = customer_name
Set xlWs = xlWb.Sheets(1)
File not going to change to the next until for loop increments
filechange = False
End If
End If
Write data into excel row
Dim col As Long
Dim tempArray As Variant
tempArray = Split(sJoin, ",")
For col = LBound(tempArray) To UBound(tempArray)
remove_quotes = Trim(Pack(Replace(tempArray(col), """", "")))
Splitting date into proper format
If col = 1 And row <> 1 Then
Dim dateleft As String
Dim datemid As String
Dim dateright As String
Splitting date into: dd/mm/yy
dateleft = Left(remove_quotes, 2)
datemid = Mid(remove_quotes, 3, 2)
dateright = Right(remove_quotes, 2)
Adjust dd/mm/yy to dd/mm/yyyy
If Left(dateright, 1) = 7 Or Left(dateright, 1) = 8 Or Left(dateright, 1) = 9 Then
dateright = "19" & dateright & ""
ElseIf Left(dateright, 1) = 0 Or Left(dateright, 1) = 1 Or Left(dateright, 1) = 2 Then
dateright = "20" & dateright & ""
End If
Set format: dd/mm/yyyy
xlWs.Cells(row, col + 1).Value = "" & dateleft & "/" & datemid & "/" & dateright & ""
Else
Add entry without splitting
xlWs.Cells(row, col + 1).Value = remove_quotes
End If
Next
Increment the row
row = row + 1
line = line + 1
DoEvents
Loop
Close #filenum
Save workbook before opening new data file
xlWb.SaveAs rmr_data_file
End If
Increase the file number read
fileno = fileno + 1
Check if file changed or not (new file or reading old file still)
filechange = True
DoEvents
Next
Save workbook and close excel
xlWb.SaveAs rmr_data_file
xlApp.Quit
Set xlWs = Nothing
Set xlWb = Nothing
Set xlApp = Nothing
End Sub
Can anyone give me pointers on how to convert this into VB.NET, or if anyone of you can assist me, that would be a big help. I have no idea about VB.NET programming and am new, since I know most of the VB functions are obsolete in .NET 2005.
regards,
awyeah