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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2010, 04:02   #1
Boris-Britva
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 14
Радость Поиск текста в тегах

Всем привет. Помогите с программой, она должна искать в Memo1 текст между тегами "*/" и "\*" и добавлять его в Combobox1. Косяк в том что первые 2-3 значения находятся нормально, а следующие уже не находит как надо. Заранее спасибо. Вот код:
Код:
var
  Form1: TForm1;
  a,b,z,startposA,startposB:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var s,st:string;
j:integer;
begin
for j:=0 to memo1.Lines.Count-1 do
begin
  if z=1 then z:=2;

  if z=0 then
  begin
    a:=pos('*/',memo1.Lines.Text);
    b:=pos('\*',memo1.Lines.Text);
    st:=copy(memo1.Lines.Text,a+2,abs(a-b)-2);
    combobox1.Items.Add(st);
    z:=1;
  end;

  if z=2 then
  begin
    startposA:=a+1+abs(a-b);
    showmessage(inttostr(startposA));
    s:=copy(memo1.Lines.Text,startposA,maxint);
    a:=pos('*/',s);
    b:=pos('\*',s);
    if a>0 then
    begin
      st:=copy(s,a+2,abs(a-b+2));
      combobox1.Items.Add(st);
      a:=a+startposA+1;
    end;
  end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
a:=0;
b:=0;
startposA:=0;
z:=0;
end;

end.

Последний раз редактировалось Stilet; 08.11.2010 в 09:48.
Boris-Britva вне форума Ответить с цитированием
Старый 08.11.2010, 04:40   #2
Cyn4uk
Пользователь
 
Регистрация: 25.11.2007
Сообщений: 56
По умолчанию

А что такое "z"?

Я бы все сделал проще - одним циклом:

temp:=memo1.lines.text;
while temp.length>0 then begin
\\находим позицию завершающего тега
\\через copy копируем из temp нужный нам текст, делаем с ним все что нужно
\\через delete удаляем из temp этот кусок (вместе с тегами)
end;

Гораздо меньше путаницы получается. Только нужно следить за тем, что если тегов больше нет, то temp нужно очистить.

Последний раз редактировалось Cyn4uk; 08.11.2010 в 04:44.
Cyn4uk вне форума Ответить с цитированием
Старый 08.11.2010, 22:00   #3
Boris-Britva
Пользователь
 
Регистрация: 01.11.2010
Сообщений: 14
По умолчанию

z для того чтобы в цикле сначала проходил обычный поиск, а потом шёл поиск далее.
С программой разобрался если кому интересно вот код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,strutils, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    ComboBox1: TComboBox;
    Memo2: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,a1,b1,z,startposA,startposB:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
st:string;
j,k:integer;
strlist:Tstringlist;
begin
for j:=0 to memo1.Lines.Count-1 do
begin
strlist:=Tstringlist.Create;
  if z=1 then z:=2;

  if z=0 then
  begin
    a:=pos('*/',memo1.Lines.Text);
    b:=pos('\*',memo1.Lines.Text);
    st:=copy(memo1.Lines.Text,a+2,abs(a-b)-2);
    z:=1;
    if pos(st,memo2.Lines.Text)=0 then
    begin
      combobox1.Items.Add(st);
      memo2.Lines.Add(st);
    end;
  end;

  if z=2 then
  begin
    a1:=a;
    b1:=b;
    startposA:=a+1;
    startposB:=startposA+abs(a-b);
    a:=posEx('*/',memo1.Lines.Text,startposA);
    b:=posEx('\*',memo1.Lines.Text,startposB);
    if a>0 then
    begin
      st:=copy(memo1.Lines.Text,a+2,abs(a-b)-2);
      if pos(st,memo2.Lines.Text)=0 then
      begin
        combobox1.Items.Add(st);
        strlist.add(st);
        for k:=0 to strlist.Count-1 do
        memo2.Lines.Add(strlist.Strings[k]);
        a:=a1+abs(a-a1);
        b:=b1+abs(b-b1);
      end;
    end;
  end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
a:=0;
a1:=0;
b:=0;
b1:=0;
startposA:=0;
startposB:=0;
z:=0;
end;

end.
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось Stilet; 09.11.2010 в 10:13.
Boris-Britva вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста в Listview bulldog5293 Общие вопросы Delphi 1 12.02.2011 16:58
Поиск текста в столбце alex_r Microsoft Office Excel 2 05.11.2009 10:01
Поиск текста в документе haros Общие вопросы Delphi 0 28.07.2009 18:52
Определение filter CSS в тегах HTML UNLEASHED HTML и CSS 1 16.01.2008 07:08
Поиск текста в строке CoDeR Общие вопросы Delphi 8 02.10.2007 01:01