![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка текстового файла [D7, WinXP]
Rustik © (2004-11-12 10:41:00)Привт всем!
Есть такая задача:
Есть текстовый файл с данными такого вот содержания:
----------------------------------------------------------------------
A3 CDR = Gateway
----------------------------------------------------------------------
sequenceNumber=2447495
gatewayRecordType=0 (Gate_IN)
dateForStartofCharge=2004-11-11
timeForAnswer=08:51:09
timeForRelease=09:02:16
timeForSeizeChannel=08:50:54
callDuration=00:11:07
callingNumber=1_2_951410000 (NPI_TON_ISDN)
calledNumber=1_0_8346735732 (NPI_TON_ISDN)
mSCIdentification=0_0_436069511009100 (NPI_TON_ISDN)
incomingTKGP=2_2 (Module Number_Trunk Group Number)
outgoingTKGP=2_8 (Module Number_Trunk Group Number)
causeForTermination=3 (Success Call Occure Abnormal Interrupt)
diagnostics=H'07D1
callReference=537799968
chargedParty=0 (Originator Charged)
----------------------------------------------------------------------
A3 CDR = Gateway
----------------------------------------------------------------------
sequenceNumber=2447521
gatewayRecordType=0 (Gate_IN)
dateForStartofCharge=2004-11-11
timeForAnswer=09:02:58
timeForRelease=09:03:05
timeForSeizeChannel=09:02:41
callDuration=00:00:07
callingNumber=1_2_951410000 (NPI_TON_ISDN)
calledNumber=1_0_8314122377 (NPI_TON_ISDN)
mSCIdentification=0_0_436069511009100 (NPI_TON_ISDN)
....... и так далее
мне нужно получить данные из него, тоесть создать таблицу и все что стоит до знака равно ( = ) сделать названием полей, а все что после этого знака сделать данными этих полей, получается что-то типа текстового файла базы данных только таблица перевернута.
Да и заранее предупреждаю файл редактировать не возможно.
Подскажите мне плиз с чего хотябы начинать или кто-нибудь уже пробовал это проделать?
Заранее благодарен
Vitalik (2004-11-12 14:09:00) [1]Есть ещё один вариент, основаный на использовании технологии Jet.
Кладём ваш текстовый файл (пусть будет 'text.txt') в какую-нибудь папку, например c:\111.
В общем, кладём на форму ADOConnection, строим строку соединения. На вкладке Provider выбираем Microsoft Jet x.x OLE DB Provider. На вкладке Connection указываем путь к папке - c:\111
На вкладке All в строке Extended Properties вводим 'Text'
Тестируем связь - всё нормально (должно быть :)
В этой папке создаём файл schema.ini со следующим содержанием:
[text.txt] <- это имя файла, в котором сохранены ваши данные
Format=Delimited(=)
Потом кидаем ADODataSet на форму, выбираем созданный ADOConnector. У DataSet устанавливаем свойство CommandType в cmdTableDirect, в CommandText выбираем text#txt
Далее грид добавляем...
Чего добились? Ну что у вас в одном столбце содержатся наименования колонок, а в другом - значения. Конечно не то, что вы изначально хотели, но, как говорится, чем богат :)
Rustik (2004-11-12 11:52:00) [2]Ладно не будем друг в друга камни кидать, пошутил дяденька разрядился и хватит...
Нашел я способ полегче.
Буду удалять все значения до знака равно динамически, благо дело у них длинна постоянная, и останеться у меня только то что мне нужно. Вот то что мне нужно я и заберу от туда.
> PVOzerski © (12.11.04 11:41) [8]
Огромное спасибо за помощь.
> Amoeba © (12.11.04 11:37) [7]
И вам удачи...
Romkin (2004-11-12 11:51:00) [3]PVOzerski © (12.11.04 11:41) [8] Еще один. TStrings.Names and Values, Эт во-первых. Во-вторых, файл действительно великоват, надо просто читать по секциям в TStringList скорее всего... Так и проще, и удобственнее :)
PVOzerski (2004-11-12 11:41:00) [4]Ребята, да хватит вам... Ну уйдет ветка в "Потрепаться" или вообще в никуда - лучше будет? А по сабжу... Можно бы всё в StringList загрузить, а потом по знаку равенства делить (через Pos). Правда, файл большой. Можно по readln читать строки и так же обрабатывать - но это медленно, если строк много. Идеально - через буферизацию.
Amoeba (2004-11-12 11:37:00) [5]
> файл предварительно в Tmemo загрузил
Зачем решать задачу через одно известное место?
LOL!
Rustik (2004-11-12 11:34:00) [6]
> Amoeba © (12.11.04 11:25) [5]
Кандидат биологических наук, с.н.с. Зоологического ин-та РАН. Исследование зоопланктона континентальных соленых водоемов, в первую очередт Аральского моря.</B>
Вроде такой большой мальчик, а до сих пор как ребенок, у самого дети есть скорее всего да и внуки наверное... а все в салочки да в салочи
Забыл сказать что файл предварительно в Tmemo загрузил. Вот там у меня это и получилось
Amoeba (2004-11-12 11:25:00) [7]
> Да у меня получилось скопировать данные после знака равно
> при помощи
> SelStart
> SelLength
> но вот опять проблема, длинна значения может быть разной,
> тоесть SelLengh здесь не поможет.
Все это было бы смешно, когда бы не было так грустно.
Rustik (2004-11-12 11:21:00) [8]В том то и дело файл может быть размером то 50 мегов, во вторых файл редактировать нельзя.
Да у меня получилось скопировать данные после знака равно при помощи
SelStart
SelLength
но вот опять проблема, длинна значения может быть разной, тоесть SelLengh здесь не поможет.
Как быть?
PVOzerski (2004-11-12 11:09:00) [9]TInifile не пробовал? Только секции в файл добавь - и может получиться... Конечно, если файл не слишком большой.
Igorok (2004-11-12 10:47:00) [10]переберай по строчно и используй функции Pos(), Copy(), Length()
Anatoly Podgoretsky (2004-11-12 10:44:00) [11]Начать с понимания текстовые файлы Паскаля, начальную информацию можешь найти здесь http:\\podgoretsky.com\ddp.html