NewTechAudit
77

Как выгрузить информацию из текстового файла по определенному параметру?

В закладки

Иногда встречаются задачи, для решения которых необходимо использовать исходные данные, выгруженные из автоматизированных систем организации, в текстовом формате с разделителями для дальнейшей обработки в Excel. Трудности возникают, если исходные данные содержат более 500 тыс. строк, так как не каждый офисный компьютер может с легкостью обрабатывать такой объем записей в Excel. А если для решения определенной задачи необходимо всего лишь 5-10% информации из исходного текстового файла?

Большинство пользователей Excel умеют загружать данные из текстовых файлов с помощью встроенного мастера загрузки, но это только один из этапов решения задачи. Дальше необходимо отфильтровать нужные записи и вот здесь и начинаются трудности: Excel «зависает», не может справиться с большим объемом данных. Бывалые IT-спецы посоветуют использовать SQL и другие средства работы с базами данных, но… .есть другой несложный метод.

Итак, необходимо решить следующую задачу:

Исходный текстовый файл с разделителями «|» содержит данные обо всех операциях клиентов банка: в офисах банка, в банкоматах, в он-лайн сервисах, в магазинах и проч.

Необходимо выбрать операции, совершенные только в одном офисе компании. Данные операции в текстовом файле отмечены признаком «Офис компании» построчно.

Решение:

  • Создаем новый файл Excel, в нем создаем лист «Результат», сюда будут записываться строки из файла, удовлетворяющие нашему критерию.
  • Не забываем сохранить файл с поддержкой макросов.
  • Открываем редактор VBA (Alt+F11).
  • Создаем процедуру.
Sub ЗагрузкаТекста() Dim Stroka, Razdel, a() As String 'объявляем некоторые переменные Filename$ = GetFilePath() 'текстовый файл выбираем в стандартном окне Windows If Filename$ = "" Then Exit Sub 'очистка таблицы перед загрузкой last_row = Worksheets("Результат").UsedRange.Rows.Count Worksheets("результат").Activate Worksheets("результат").Rows("1:" & last_row).Delete Shift:=xlUp Razdel = "|" 'задаем формат разделителя полей в текстовом файле k = 1 'счетчик записей в результирующей таблице Open Filename$ For Input As #1 ' открываем файл для чтения строк Do While Not EOF(1) 'цикл по строкам файла Input #1, Stroka 'считывание текущей строки If InStr(Stroka, "|Офис компании|") > 0 Then 'проверяем строку на предмет вхождения подстроки "Офис компании" 'разделяем строку на поля и записываем в ячейки на листе "Результат" a = Split(Stroka, Razdel) k = k + 1 For i = 1 To UBound(a) Worksheets("Результат").Cells(k, i) = Trim(a(i)) Next i End If Loop Close #1 'закрываем текстовый файл MsgBox ("ГОТОВО!") End Sub

Ниже приведен код функции выбора файла GetFilePath

Function GetFilePath(Optional ByVal Title As String = "Выберите файл для обработки", _ Optional ByVal InitialPath As String = "c:\", _ Optional ByVal FilterDescription As String = "файлы txt", _ Optional ByVal FilterExtention As String = "*.txt") As String On Error Resume Next With Application.FileDialog(msoFileDialogOpen) .ButtonName = "Выбрать": .Title = Title: .InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath) .Filters.Clear: .Filters.Add FilterDescription, FilterExtention If .Show <> -1 Then Exit Function GetFilePath = .SelectedItems(1) folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\")) SaveSetting Application.Name, "GetFilePath", "folder", folder$ End With End Function
{ "author_name": "NewTechAudit", "author_type": "editor", "tags": ["1"], "comments": 0, "likes": 1, "favorites": 0, "is_advertisement": false, "subsite_label": "newtechaudit", "id": 114067, "is_wide": false, "is_ugc": false, "date": "Sat, 21 Mar 2020 10:22:17 +0300", "is_special": false }
0
Комментариев нет
Популярные
По порядку

Прямой эфир