Поиска строки в текстовом файле по составному ключу
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Поиска строки в текстовом файле по составному... Expand / Collapse
Автор
Сообщение
09.08.2007 12:55
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 16.04.2008 11:44
Сообщ.: 366, Visits: 2 473
Имеется текстовый файл с разделителями типа:
1232;abc;sbvas;olf;
231;dfg;kll;flo;
674;ssg;ipo;drp;
Некоторые из столбцов файла, допустим 1 и 3 являются ключами, по которым определяется уникальность строки. Вопрос: как по значениям ключей получить искомую строку? Строки не отсортированы. Прямой перебор не подходит.

С уважением,

Сообщ. #915243
09.08.2007 13:34
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 26.10.2007 9:10
Сообщ.: 166, Visits: 1 538
Если записи не отсортированы, то ничего больше не остаётся, как читать всё подряд. Если читать всё подряд не хочется (или из высших соображений запрещено), то остаётся забыть про эту задачу. Вариант - соэдать индексный файл. Но это некоторым образом сортировка.
Сообщ. #915245
09.08.2007 14:52
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 16.04.2008 11:44
Сообщ.: 366, Visits: 2 473
Реально, мы имеем 200 мб текстовых файлов разных типов, т.е. с разным,но заранее известным, набором ключей. Делать в лоб не вариант.

Теперь, строки отсортированы по первому полю. В связи с этим дополнительный вопрос: как это можно использовать, чтобы исключить прямой перебор?

Сейчас рассматриваю возможность попробовать поработать с ними через sql odbc драйвер. Буду благодарен за пример.

С уважением,
Сообщ. #915249
09.08.2007 22:58
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 28.03.2008 22:19
Сообщ.: 118, Visits: 1 025
Ну, если разделитель постоянный и файлы подобны друг другу, я бы открывал Екселем и обрабатывал бы всё это.
Другое дело 200Мб. Т.е. проблема в скорости обработки. Ну я бы потом занялся бы этой проблемой, для начала попробовал бы этот вариант :-)
Сообщ. #915266
10.08.2007 9:30
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 26.10.2007 9:10
Сообщ.: 166, Visits: 1 538
Если строки отсортированы (по любому полю, не обязательно по первому) и имеют одинаковую структуру (размер полей), то метод последовательного приближения - это то, что тебе надо. Если нужны детали, приведи фрагмент реального файла. По примеру из первого сообщения возникают сомнения в регулярности структуры твоих файлов. Если файлы действительно похожи на то, что я уже видел, то без предварительного их причёсывания ничего не получится.

Желаю успехов.

Сообщ. #915269
13.08.2007 16:50
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 21.01.2008 22:06
Сообщ.: 729, Visits: 7 700
Сейчас рассматриваю возможность попробовать поработать с ними через sql odbc драйвер. Буду благодарен за пример.

Для начала присваиваем во всех файлах, с которыми будем, имена полям (например, Pole1, Pole2 и т.д.)

Добавляем в проект ссылку на Microsoft ActiveX Data Objects Library 2.x

Dim cnTXT As New ADODB.Connection, rsTXT As ADODB.Recordset
With cnTXT
    .IsolationLevel = adXactRepeatableRead
    .Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\temp\;Extended Properties='text;FMT=Delimeted'"
    Set rsTXT = .Execute("SELECT * FROM MyFile.txt WHERE Pole1=1232 AND Pole3='sbvas'")
    Cells(1, 1).CopyFromRecordset rsTXT 'скидываем отфильтрованные данные в ячейку Excel (для примера)
    .Close
End With
Сообщ. #915300
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, VladConn

Время GMT +3:00, Сейчас 3:46