Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2013, 09:50
cybermad cybermad вне форума
Прохожий
 
Регистрация: 28.12.2012
Сообщения: 5
Репутация: 10
По умолчанию Разбор текста и помещение в БД

Привет!

Есть простой текстовый файл со следующим содержимым:
Код:
Message to send  : 03/02/2013 15:47:46 03 Farrow 2 (6 )0 Not all valves fed VALVE235 (+) 1
Message to send  : 03/02/2013 15:47:46 03 Farrow 2 (6 )0 Not all valves fed VALVE235 (+) 1
Message to send  : 03/02/2013 15:58:03 05 Fattering 1 (6 )0 Not all valves fed VALVE523 (+) 21
Message to send  : 03/02/2013 15:58:03 05 Fattering 1 (6 )0 Not all valves fed VALVE523 (+) 21
Message to send  : 03/02/2013 16:32:56 02 Farrow 1 (10)1 No room in WEIGH 1 
Message to send  : 03/02/2013 16:32:56 02 Farrow 1 (10)1 No room in WEIGH 1 
Message to send  : 03/02/2013 16:50:12 06 Fattering 2 (6 )0 Not all valves fed VALVE241 (+) 12
Message to send  : 03/02/2013 16:50:12 06 Fattering 2 (6 )0 Not all valves fed VALVE241 (+) 12
Message to send  : 03/02/2013 18:04:56 03 Farrow 2 (6 )0 Not all valves fed VALVE244 
Message to send  : 03/02/2013 18:04:56 03 Farrow 2 (6 )0 Not all valves fed VALVE244 
Message to send  : 03/16/2013 09:05:39 01 Breeding (6 )0 Not all valves fed VALVE 26 (+) 550
Message to send  : 03/16/2013 09:05:39 01 Breeding (6 )0 Not all valves fed VALVE 26 (+) 550
Message to send  : 03/26/2013 11:53:47 04 Weaners (6 )0 Not all valves fed VALVE 1 (+) 22
Message to send  : 03/26/2013 11:53:47 04 Weaners (6 )0 Not all valves fed VALVE 1 (+) 22

Файл периодически дописывается. Нужно парсить его и загонять данные в таблицу (DB), то есть в столбец 1 пишем Message to send, во второй 03/26/2013 и т.д.

Подскажите, как реализовать, пожалуйста.
Ответить с цитированием
  #2  
Старый 12.04.2013, 09:55
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

функции Pos, PosEx, Copy помогут тебе в парсинге)
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 12.04.2013, 10:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Используй регэкспы (с).

Я задолбался уже писать эту фразу.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 12.04.2013, 12:37
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Ссылка на адекватную статью по теме.
Ответить с цитированием
Этот пользователь сказал Спасибо Uniq! за это полезное сообщение:
cybermad (14.04.2013)
  #5  
Старый 12.04.2013, 12:40
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Используй регэкспы (с).

Я задолбался уже писать эту фразу.
Я понимаю, что это хорошая вещь, но не панацея от всего.

Вот вариант без Pos и регулярок, который все это дело обрабатывает и помещает в таблицу. Есть только одна проблемка. В ваших данных в строка 11-14 исчез один из параметров. Это видимо надо дополнительно обрабатывать.

Код:
procedure TForm8.Button1Click(Sender: TObject);
Var
  S: String;
  Row,Col: Integer;
  SL: TStringList;
begin
 StringGrid1.RowCount := Memo1.Lines.Count + 1;
 for Row := 0 to Memo1.Lines.Count - 1
 do begin
    S := Memo1.Lines.Strings[Row];
    S := StringReplace(S, 'Message to send  :', 'Message_to_send:', [rfReplaceAll]);
    S := StringReplace(S, ')', ') ', [rfReplaceAll]);
    S := StringReplace(S, ' )', ')', [rfReplaceAll]);
    S := StringReplace(S, 'Not all valves fed', 'Not_all_valves_fed', [rfReplaceAll]);
    S := StringReplace(S, 'No room in', 'No_room_in', [rfReplaceAll]);
    SL := TStringList.Create;
    SL.DelimitedText := S;
    StringGrid1.ColCount := SL.Count + 1;
    for Col := 0 to SL.Count - 1
    do StringGrid1.Cells[Col+1,Row+1] := SL.Strings[Col];
    SL.Free;
    end;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
cybermad (14.04.2013)
  #6  
Старый 14.04.2013, 19:42
cybermad cybermad вне форума
Прохожий
 
Регистрация: 28.12.2012
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Используй регэкспы (с).

Я задолбался уже писать эту фразу.

ок! спасибо за наводки! но... подскажите, пожалуйста, регулярку для моего случая...


пример от Страдальца работает, но... хочу попробовать на регулярных выражениях.

Заранее спасибо!!!
Ответить с цитированием
  #7  
Старый 14.04.2013, 20:35
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Хотите?) пробуйте! я классную статью подкинул.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter