Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Дельфи+IB+TXT


Автор: molchaliviy 7.5.2009, 21:25
Смысл в чем - есть куча текстовиков от 1Мб до 450Мб размера (файлы с логами) от 1 до 600000 тысяч строк и их нужно обработать 
как и чем обрабатывать уже загруженные данные в таблицу я разберусь а вот как все это сырое закинуть в базу для обработки и хранения не наю

на форуме искал но чет ни чего подобного не нашел все только для экселя 
да чуть не забыл разделитель в файлах разный в одних таб в других запятая(буду переделыывать на таб но позже)

все мозги сломал - помогите !!!!


Автор: Данкинг 7.5.2009, 22:25
А в чём проблема- открывай файл, считывай построчно, парси строку согласно столбцам таблицы БД, и заноси эту таблицу.

Автор: Akella 7.5.2009, 22:52
Цитата(molchaliviy @  7.5.2009,  21:25 Найти цитируемый пост)
(буду переделыывать на таб но позже

вот когда переделаешь, тогда приходи
а так... может при импорте получится полная каша. 
Нужно чётко быть уверенным, какой используется разделитель.

Ну так, по теме. Загоняешь всё в TStringList. Делаешь цикл по TStringList`у, по строкам. Внутри этого цикла по строкам организовываешь цикл по полям (столбцам).

Это элементарно. Но я уже баиньки хочу, если тебе не помогут то, утром постараюсь показать. Но 2 цикла - это же просто.
Может тебе даже до утра дадут готовый код, там не много. Не я бы готовый код не давал.
Ты лучше покажи, как делаешь и что не получается, а тебя здесь подправят smile

Добавлено @ 22:53
Цитата(molchaliviy @  7.5.2009,  21:25 Найти цитируемый пост)
450Мб размера

весьма большой размер, может придётся хитрить.

Автор: Deniz 8.5.2009, 05:47
molchaliviy, предлагаю посмотреть в сторону внешних таблиц.

Автор: Akella 8.5.2009, 08:49
Что-то вроде такого. Дальше сам додумай
Код

Var
 s, g : TStringList;
 i, t:integer;
 d: TDataSet;
begin
//здесь создаём стринглисты (код я опустил)


//загружаем
 s.LoadFromFile('file_name');

 for I := 0 to s.Count - 1 do begin
   //добавляем запись в таблицу
   d.Append;
   //запихиваем все поля в другой стринглист
   //в этом стринглисте будут поля только текущей записи
   g.Text := StringReplace(s[i], #9, #13, [rfReplaceAll, rfIgnoreCase]);
   //в цикле по стринглисту присваиваем поляем значения
   for t := 0 to g.Count - 1 do
    d.FieldByName('pole1').Value := g[t];


   d.Post;
 end;



Если данных очень много, то можно через ReadLn

Код

      AssignFile(t, PChar(od1.FileName));
      Reset(t);


в цикле
          Readln(t, s);
         ShowMessage(s);//здесь одна строка файла


Автор: lukash256 8.5.2009, 12:44
имхо через стринглист нестоит. ибо загружать 450мб в стринлист - многовато. читаешь по записи (от таба до таба или запятой) и записываешь в базу типо 2 вариант от Акеллы.
как парсить - другов вопрос. в VB есть специальный толи класс толи функция, есть ли оналог в дельфях хочу спросить у вас, товарищи.

Автор: Akella 8.5.2009, 13:17
Цитата(lukash256 @  8.5.2009,  12:44 Найти цитируемый пост)
как парсить

я уже написал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)