|
|
|
Supreme 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 являются ключами, по которым определяется уникальность строки. Вопрос: как по значениям ключей получить искомую строку? Строки не отсортированы. Прямой перебор не подходит.
С уважением,
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
| Если записи не отсортированы, то ничего больше не остаётся, как читать всё подряд. Если читать всё подряд не хочется (или из высших соображений запрещено), то остаётся забыть про эту задачу. Вариант - соэдать индексный файл. Но это некоторым образом сортировка.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 16.04.2008 11:44
Сообщ.: 366,
Visits: 2 473
|
|
Реально, мы имеем 200 мб текстовых файлов разных типов, т.е. с разным,но заранее известным, набором ключей. Делать в лоб не вариант.
Теперь, строки отсортированы по первому полю. В связи с этим дополнительный вопрос: как это можно использовать, чтобы исключить прямой перебор?
Сейчас рассматриваю возможность попробовать поработать с ними через sql odbc драйвер. Буду благодарен за пример.
С уважением,
|
|
|
|
|
Supreme Being
      
участник
Last Login: 28.03.2008 22:19
Сообщ.: 118,
Visits: 1 025
|
|
Ну, если разделитель постоянный и файлы подобны друг другу, я бы открывал Екселем и обрабатывал бы всё это. Другое дело 200Мб. Т.е. проблема в скорости обработки. Ну я бы потом занялся бы этой проблемой, для начала попробовал бы этот вариант :-)
|
|
|
|
|
Supreme Being
      
участник
Last Login: 26.10.2007 9:10
Сообщ.: 166,
Visits: 1 538
|
|
| Если строки отсортированы (по любому полю, не обязательно по первому) и имеют одинаковую структуру (размер полей), то метод последовательного приближения - это то, что тебе надо. Если нужны детали, приведи фрагмент реального файла. По примеру из первого сообщения возникают сомнения в регулярности структуры твоих файлов. Если файлы действительно похожи на то, что я уже видел, то без предварительного их причёсывания ничего не получится. Желаю успехов.
|
|
|
|
|
Supreme 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
|
|
|
|