G
Guest
Есть два файла.
В одном 172353 текстовых строк,
Во втором 13433 строки.
Нужно выделить из строки первого файла бранд и номер и определить сколько номеров (по брандам) попало во второй файл, а сколько не попало.
Я написала такую процедурку. Она работает, но медленно.
1 запись из первого файла сравнивается со всеми записями из второго за секунду примерно...
Есть ли возможность обработать эти данные быстрее?
В одном 172353 текстовых строк,
Во втором 13433 строки.
Нужно выделить из строки первого файла бранд и номер и определить сколько номеров (по брандам) попало во второй файл, а сколько не попало.
Я написала такую процедурку. Она работает, но медленно.
1 запись из первого файла сравнивается со всеми записями из второго за секунду примерно...
Есть ли возможность обработать эти данные быстрее?
Код:
Sub Click(Source As Button)
Dim text As String
Dim fileAll As Integer, fileSort As Integer
Dim PN_All As String, PN_Sort As String
Dim brand As String, rec As String
Dim PNcount As Double
Dim brandList List As Double
Dim num As Integer
fileAll% = Freefile()
Open "c:\GB_PRICE.CH2" For Input As fileAll% 'Список всех брандов и номеров
fileSort% = Freefile()
Open "c:\GB_ALL.NEW" For Input As fileSort% 'Список номеров прошедших фильтрацию
fileSortRez% = Freefile()
Open "c:\sortrez.txt" For Append As fileSortRez% 'Список брандов и кол-во номеров прошедших фильтрацию
fileNoSortRez% = Freefile()
Open "c:\nosortrez.txt" For Append As fileNoSortRez% 'Списко брандов и кол-во номеров непрошедших фильтрацию
num = 1
PNcount = 0 'Счетчик прошедших фильтрацию
PNNocount = 0 'Счетчик непрошедших фильтрацию
Do While Not Eof(fileAll%)
'Получаем из файла бранд и номер текущий
Line Input #fileAll%, text$
brand = Left$(Mid$(text$, 178, 183),5)
PN_All = Left$(text$, 7)
'Если бранд новый, то записываем полученные значения в файл и обнуляем счетчики
If (brandOld <> brand) Or (brandOld = "") Then
rec = brandold & " " & Cstr(PNcount)
if brandOld <> "" then Write #fileSortRez%, rec
rec = brandold & " " & Cstr(PNNocount)
If PNNocount <> 0 Then Write #fileNoSortRez%, rec
PNNocount = 0
PNcount = 0
PNoldcount = 0
End If
'Второй файл перематываем в начало
Seek fileSort%, 1
'Пока не конец файла сравниваем номера из него с запомненным номером
Do While Not Eof(fileSort%)
Line Input #fileSort%, text$
PN_Sort = Left$(text$, 7)
'Если находим номер в файле отфильтрованных, то увеличиваем счетчик прошедших фильтрацию
If PN_All = PN_Sort Then
PNcount = PNcount+1
End If
Loop
'Если номер не найден, то увеличиваем счетчик непрошедших фильтрацию
If PNcount = PNoldcount Then
PNNocount = PNNocount + 1
End If
'Запоминаем значение счетчика прошедших фильтрацию и название текущего бренда
PNoldcount = PNcount
brandOld = brand
'Выводим подсказку о номере строки которую сравнили
num = num +1
Print Cstr(num)
Loop
'Закрываем все файлы
Close fileAll%
Close fileSort%
Close fileSortRez%
Close fileNoSortRez%
End Sub