Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 22:23   #1
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
Вопрос Парсим текст, не могу вникнуть

Уважаемые форумчане возник вопрос, который требует срочного решения, нужна ваша помощь.
Имеется файл, который открываю в memo1 следующего содержания:
Цитата:
CCCC

ИЗ ТАЙГА
123123123123
МЕСТНЫМ ДОСТАВЛЕНО


FFFFFF


CCCC

ИЗ ТАЙГА
СОСИ НОГИ
МЕСТНЫМ ДОСТАВЛЕНО


FFFFFF

CCCC

ИЗ ТАЙГА
ВСЕ БУДЕТ ХОРОШО
МЕСТНЫМ ДОСТАВЛЕНО


FFFFFF
Назовем содержимое от СССС до FFFFFF телеграммой, грубо говоря имеется 3 телеграммы в данном случае. Количество считаю следующим образом:
Цитата:
procedure TForm1.kolzav;
var i, p, z: Integer;
begin
z:=0;

for i:=0 to memo1.Lines.Count do

begin

p:=Pos('CCCC', memo1.Lines.Strings[i]); //Если позиция в строке i <>0 то
if p<>0 then
begin
Inc(z); //увеличиваем счетчик заявок на 1
end;

end;

edt1.Text:=IntToStr(z);
end;
мне требуется каждую телеграмму распарсить, придать божеский вид так сказать:

Цитата:
ИЗ ТАЙГА
123123123123
МЕСТНЫМ ДОСТАВЛЕНО

ИЗ ТАЙГА
СОСИ НОГИ
МЕСТНЫМ ДОСТАВЛЕНО

ИЗ ТАЙГА
ВСЕ БУДЕТ ХОРОШО
МЕСТНЫМ ДОСТАВЛЕНО
собственно как сделать не соображу. подскажите пожалуйста...
antoxamad вне форума Ответить с цитированием
Старый 20.02.2012, 23:01   #2
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Код:
var i,p, z: Integer;
 begin
 z:=0;
 for i:=Memo1.Lines.Count downto 1 do
   if (trim(memo1.Lines.Strings[i])='') or (memo1.Lines.Strings[i]='FFFFFF')
    then Memo1.Lines.Delete(i)
    else
     if memo1.Lines.Strings[i]='CCCC'
      then begin
       memo1.Lines.Strings[i]:='';
       inc(z)
      end;
 edit1.Text:=IntToStr(z);
 end;
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 21.02.2012, 04:37   #3
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Step_UA Посмотреть сообщение
Код:
var i,p, z: Integer;
 begin
 z:=0;
 for i:=Memo1.Lines.Count downto 1 do
   if (trim(memo1.Lines.Strings[i])='') or (memo1.Lines.Strings[i]='FFFFFF')
    then Memo1.Lines.Delete(i)
    else
     if memo1.Lines.Strings[i]='CCCC'
      then begin
       memo1.Lines.Strings[i]:='';
       inc(z)
      end;
 edit1.Text:=IntToStr(z);
 end;
ну это путь через удаление строк, а мне бы хотелось чтобы программа брала все содержимое от "CCCC" до "FFFFFF" и так ровно столько раз сколько у нас "CCCC" "FFFFFF". Вот как то так думаю
antoxamad вне форума Ответить с цитированием
Старый 21.02.2012, 09:43   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

посмотрите на функцию PosEx


примерно так:
Код:
var
  PosBegin, PosEnd : integer;
  str1, sOne : string;
begin
  { str1 := StringReplace( Memo1.Text, #13#10, '', [rfReplaceAll]); }
  str1 := Memo1.Text;
  PosBegin := PosEx('CCCC',str1,1);
  PosEnd := PosEx('FFFFFF',str1,PosBegin);

  while (PosBegin>0) and (PosEnd>PosBegin) do begin
    sOne := copy(str1, PosBegin+4{length('CCCC')}, PosEnd-PosBegin-4{length('CCCC')}); {тут в строку не включаются CCCC и не включается FFFFFF}
    ShowMessage('Телеграмма: '+sOne);

    PosBegin := PosEx('CCCC',str1,PosBegin+4);
    PosEnd := PosEx('FFFFFF',str1,PosBegin);
  end;
end;
p.s. код не проверял. просто как концепция...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.02.2012, 09:53   #5
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

в моей сборке delphi 7 не было "Function PosEx"

комментарии к функции

Новая функция PosEx, позволяет указать начальную позицию поиска внутри строки, что избавит вас от необходимости изменения исходной строки. Незабудьте указать модуль StrUtils.
Offset - позиция с которой производить поиск (по умолчанию =1 как стандартная pos)
Код:
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;

var
I,X: Integer;
Len, LenSubStr: Integer;
begin
If Offset = 1 Then
   Result := Pos(SubStr, S)
Else
begin
   I := Offset;
   LenSubStr := Length(SubStr);
   Len := Length(S) - LenSubStr + 1;
   While I <= Len Do
   begin
     If S[I] = SubStr[1] Then
     begin
       X := 1;
       While (X < LenSubStr) And (S[I + X] = SubStr[X + 1]) Do
         Inc(X);
       If (X = LenSubStr) Then
       begin
         Result := I;
         Exit;
       End;
     End;
     Inc(I);
   End;
   Result := 0;
End;

End;
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 21.02.2012 в 09:57.
denisbrain вне форума Ответить с цитированием
Старый 21.02.2012, 10:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
в моей сборке delphi 7 не было "Function PosEx"
...
Не забудьте указать модуль StrUtils.

А Вы не забыли указать в uses модуль StrUtils ?!
Или и этот модуль целиком в вашей сборке не представлен?! (тогда в топку такую борку! )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.02.2012, 11:28   #7
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А Вы не забыли указать в uses модуль StrUtils ?!
Или и этот модуль целиком в вашей сборке не представлен?! (тогда в топку такую борку! )
блин попутал

SysUtils
StrUtils
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 23.02.2012, 10:02   #8
antoxamad
Пользователь
 
Регистрация: 04.02.2012
Сообщений: 32
По умолчанию

Всем огромное спс, тема закрыта.
antoxamad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу сделать текст по центру pahanzona Общие вопросы Delphi 3 05.02.2011 12:37
c++,класс вектор вникнуть в задание ahab Помощь студентам 5 26.12.2009 13:52
Не могу переслать текст... prod87 Работа с сетью в Delphi 4 30.10.2009 16:33
Парсим bash.org.ru Merkator Работа с сетью в Delphi 1 21.04.2009 21:21
Помогите вникнуть в условие задачи. Что нужно сделать garald50 Паскаль, Turbo Pascal, PascalABC.NET 3 04.06.2008 19:42