|
Поиск в очень большом текстовом файле (1,2 Гб) | ☑ | ||
---|---|---|---|---|
0
Бархат
02.11.16
✎
16:00
|
Всем привет.
Подскажите, может мысли есть у кого появятся. Как поискать в таком текстовом монстре строки. Это перечень недействительных паспортов с РосФинМониторинга. серия и номер. только цифры. Среди них нужно запустить поиск номеров паспортов людей из базы. При использовании любого объекта, что ТекстовыйДокумент, что ЧтениеФайла увы "Недостаточно памяти". Заносить данные в регистр - гиблое дело, там 2 миллиона строк вроде. Причем файл периодически обновляется на РосФинМоне. Как в файле строки найти? Кто что подскажет? |
|||
1
CodeFinder
02.11.16
✎
16:00
|
cat
|
|||
2
CodeFinder
02.11.16
✎
16:01
|
cat | grep
|
|||
3
ptiz
02.11.16
✎
16:03
|
(0) ЧтениеТекста тебя спасет
|
|||
4
Бархат
02.11.16
✎
16:05
|
ЧтениеТекста, пардон, выше неправильно написал ЧтениеФайла. Оно тоже "Недостаточно памяти"
|
|||
5
Бархат
02.11.16
✎
16:06
|
что за "cat | grep"?
|
|||
6
Lexey_
02.11.16
✎
16:07
|
(4) на ЧтениеТекста.ПрочитатьСтроку() недостаточно памяти?
|
|||
7
ShAV
02.11.16
✎
16:07
|
(0) имхо лучше какую-то бд создать, а уже в ней искать. Периодически в нее доливать новые данные. Всяко лучше чем по тексту елозить
|
|||
8
МихаилМ
02.11.16
✎
16:07
|
этот файл 1,2г , записи одинаковой длинны. текстовый драйвер oledb (ado) kturj легко с ним справится.
если нужно глазиками найти - используйте notepad++ |
|||
9
Shur1cIT
02.11.16
✎
16:09
|
(0) вот пример посмотри какие условия вожможны наложить, в моём случае просто все выгребал
Функция ПрочитатьCSV(Папка, ИмяФайла, КолПолей) // Параметры: // "Папка" - путь к файлу без имени файла с завершающим слешем, // "ИмяФайла" - имя файла, // "КолПолей" - количество колонок (число). Текст = "[" + ИмяФайла + "] |ColNameHeader=False |Format=TabDelimited |TextDelimiter ="+Символы.Таб +" |CharacterSet=ANSI |"; Для ы = 1 По КолПолей Цикл Текст = Текст + "Col" + ы + "=Field" + ы + " Text" + Символы.ПС; КонецЦикла; ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст(Текст); ТекстДок.Записать(Папка + "Schema.ini"); objRec = Новый COMОбъект("ADODB.Recordset"); strQuery = "SELECT * FROM [" + ИмяФайла + "]"; strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Папка + ";Extended Properties=""text;"""; adOpenStatic = 3; adLockOptimistic = 3; adCmdText = 1; ТаблЗнач = Новый ТаблицаЗначений; Для ы = 1 По КолПолей Цикл ТаблЗнач.Колонки.Добавить(); КонецЦикла; objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText); КолСтрок = objRec.RecordCount; Ном = 1; Пока Не objRec.EOF Цикл Если Ном % 500 = 0 Тогда Состояние(ИмяФайла + " " + Ном + " из " + КолСтрок); КонецЕсли; НовСтр = ТаблЗнач.Добавить(); Для i=0 По objRec.Fields.Count-1 Цикл НовСтр[i] = Строка(objRec.Fields(i).Value); КонецЦикла; objRec.MoveNext(); Ном = Ном + 1; КонецЦикла; objRec.Close(); Возврат ТаблЗнач; |
|||
10
МихаилМ
02.11.16
✎
16:09
|
+ тас 110 M строк
|
|||
11
Gary417
02.11.16
✎
16:09
|
(5) cat и grep это консольные утилиты
|
|||
12
ptiz
02.11.16
✎
16:10
|
(4) Дело не в ЧтенииТекста. Может ты всё прочитанное в таблицу значений сохраняешь?
|
|||
13
Shur1cIT
02.11.16
✎
16:12
|
(9) в strQuery = "SELECT * FROM [" + ИмяФайла + "]";
наложи условия и функция вернет талицу значения с результатом |
|||
14
Shur1cIT
02.11.16
✎
16:19
|
(0) а вообще проще в SQL грузануть средствами скуля, а потом от туда запросом так быстрее...
|
|||
15
Garykom
гуру
02.11.16
✎
16:23
|
Речь про "list_of_expired_passports.csv.bz2" ? Грузить его в свою базу (любую), проиндексировать и как сервис юзать.
|
|||
16
Pav2016
02.11.16
✎
16:24
|
Любым средством, которое не грузит весь файл в память, а умеет читать потоком.
|
|||
17
Garykom
гуру
02.11.16
✎
16:25
|
||||
18
Pav2016
02.11.16
✎
16:26
|
Если это регулярная процедура, то конечно надо написать скриптик ее загрузки в SQL. И последующего обновления.
|
|||
19
Бархат
02.11.16
✎
16:54
|
(13) Р А Б О Т А Е Т !!!! :)))) Саш, ЧЕЛОВЕЧЕСКОЕ СПАСИБО! (15) прав, о нём. Грузить его в базу? как то тестил, подождал пару часов, в РС прогрузил тысяч 200-300, а их пару лямов.
(18) не у всех база на скуле. У некоторых файловая. Контор много. (14) файл периодически перевыпускается РосФинМоном, бабушек учить его в скуль подгружать не резон. 13-й работает и я счастлив. Еще раз спасибо! |
|||
20
vis_tmp
02.11.16
✎
17:43
|
(15)А что это за файл?
|
|||
21
Garykom
гуру
02.11.16
✎
17:45
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |