Вход | Регистрация



Поиск в очень большом текстовом файле (1,2 Гб)

Поиск в очень большом текстовом файле (1,2 Гб)
Я
   Бархат
 
02.11.16 - 16:00
Всем привет.

Подскажите, может мысли есть у кого появятся.
Как поискать в таком текстовом монстре строки. Это перечень недействительных паспортов с РосФинМониторинга. серия и номер. только цифры. Среди них нужно запустить поиск номеров паспортов людей из базы.

При использовании любого объекта, что ТекстовыйДокумент, что ЧтениеФайла увы "Недостаточно памяти". Заносить данные в регистр - гиблое дело, там 2 миллиона строк вроде. Причем файл периодически обновляется на РосФинМоне.

Как в файле строки найти? Кто что подскажет?
 
 
   CodeFinder
 
1 - 02.11.16 - 16:00
cat
   CodeFinder
 
2 - 02.11.16 - 16:01
cat | grep
   ptiz
 
3 - 02.11.16 - 16:03
(0) ЧтениеТекста тебя спасет
   Бархат
 
4 - 02.11.16 - 16:05
ЧтениеТекста, пардон, выше неправильно написал ЧтениеФайла. Оно тоже "Недостаточно памяти"
   Бархат
 
5 - 02.11.16 - 16:06
что за "cat | grep"?
   Lexey_
 
6 - 02.11.16 - 16:07
(4) на ЧтениеТекста.ПрочитатьСтроку() недостаточно памяти?
   ShAV
 
7 - 02.11.16 - 16:07
(0) имхо лучше какую-то бд создать, а уже в ней искать.  Периодически в нее доливать новые данные. Всяко лучше чем по тексту елозить
   МихаилМ
 
8 - 02.11.16 - 16:07
этот файл 1,2г  , записи одинаковой длинны. текстовый драйвер oledb (ado) kturj легко с ним справится.

если нужно глазиками найти - используйте notepad++
   Shur1cIT
 
9 - 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 строк
 
 Рекламное место пустует
   Gary417
 
11 - 02.11.16 - 16:09
(5) cat и grep это консольные утилиты
   ptiz
 
12 - 02.11.16 - 16:10
(4) Дело не в ЧтенииТекста. Может ты всё прочитанное в таблицу значений сохраняешь?
   Shur1cIT
 
13 - 02.11.16 - 16:12
(9) в  strQuery = "SELECT * FROM [" + ИмяФайла + "]";
наложи условия и функция вернет  талицу значения с результатом
   Shur1cIT
 
14 - 02.11.16 - 16:19
(0) а вообще проще в SQL грузануть средствами скуля, а потом от туда запросом так быстрее...
   Garykom
 
15 - 02.11.16 - 16:23
Речь про "list_of_expired_passports.csv.bz2" ? Грузить его в свою базу (любую), проиндексировать и как сервис юзать.
   Pav2016
 
16 - 02.11.16 - 16:24
Любым средством, которое не грузит весь файл в память, а умеет читать потоком.
   Garykom
 
17 - 02.11.16 - 16:25
   Pav2016
 
18 - 02.11.16 - 16:26
Если это регулярная процедура, то конечно надо написать скриптик ее загрузки  в SQL. И последующего обновления.
   Бархат
 
19 - 02.11.16 - 16:54
(13) Р А Б О Т А Е Т !!!! :))))  Саш, ЧЕЛОВЕЧЕСКОЕ СПАСИБО! (15) прав, о нём. Грузить его в базу? как то тестил, подождал пару часов, в РС прогрузил тысяч 200-300, а их пару лямов.
(18) не у всех база на скуле. У некоторых файловая. Контор много.

(14) файл периодически перевыпускается РосФинМоном, бабушек учить его в скуль подгружать не резон. 13-й работает и я счастлив.

Еще раз спасибо!
   vis_tmp
 
20 - 02.11.16 - 17:43
(15)А что это за файл?
   Garykom
 
21 - 02.11.16 - 17:45


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует