With CreateObject("System.Collections.SortedList") For Each key In dict On Error Resume Next .Add key, dict(key) Next dict.RemoveAll
For i = 0 To .Keys.Count - 1 dict.Add .GetKey(i), .Item(.GetKey(i)) Next
End With End Sub Function CatchNum(s As String) As Long Dim objRegExp, SubobjMatches Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Global = True objRegExp.Pattern = "1037604" 'objRegExp.Pattern = "[^,]+,([\d]+)" Set SubobjMatches = objRegExp.Execute(s) CatchNum = SubobjMatches(0).Value End Function
[/vba]
Но это мертвая процедура Файлов бывает 300 штук, каждый по 5 кб txt Строк может быть и 20000
Есть ли возможности оптимизации?
Если раньше искал по паттерну, то теперь просто хочу найти по значению. В принципе, могу просто убрать процедуру с регулярными выражениями. Но насколько это ускорит, не знаю. Хотелось бы услышать и увидеть варианты оптимизации для этой задачи на Excel.
Неужели Excel не подходит для больших данных...
Всем привет, ищу определенный текст в большом количестве текстовых файлов, и название файла, содержащего этот текст
Ищу примерно так.
[vba]
Код
Option Explicit Dim fsoFile As file, fsoFolder As Folder Dim key As Variant Dim dict As Scripting.Dictionary
Sub You()
'Dim fsoFile As file, fsoFolder As Folder Dim ReportFile
Dim fso As New FileSystemObject Dim Spath, StrFile, lr, fj, Sal Spath = Application.ThisWorkbook.Path & "\" Set fsoFolder = fso.GetFolder(Spath)
Set dict = New Scripting.Dictionary
For Each fsoFile In fsoFolder.Files
If fsoFile Like "*.txt" Then Call sort
Next fsoFile
SortDictionary dict
With dict
For Each key In .Keys 'For key = 1 To 5 Debug.Print key, .Item(key) Next
With CreateObject("System.Collections.SortedList") For Each key In dict On Error Resume Next .Add key, dict(key) Next dict.RemoveAll
For i = 0 To .Keys.Count - 1 dict.Add .GetKey(i), .Item(.GetKey(i)) Next
End With End Sub Function CatchNum(s As String) As Long Dim objRegExp, SubobjMatches Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Global = True objRegExp.Pattern = "1037604" 'objRegExp.Pattern = "[^,]+,([\d]+)" Set SubobjMatches = objRegExp.Execute(s) CatchNum = SubobjMatches(0).Value End Function
[/vba]
Но это мертвая процедура Файлов бывает 300 штук, каждый по 5 кб txt Строк может быть и 20000
Есть ли возможности оптимизации?
Если раньше искал по паттерну, то теперь просто хочу найти по значению. В принципе, могу просто убрать процедуру с регулярными выражениями. Но насколько это ускорит, не знаю. Хотелось бы услышать и увидеть варианты оптимизации для этой задачи на Excel.
Неужели Excel не подходит для больших данных...ant6729