Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RichEdit взять кусок текста.


Страницы:   1 2

SSSs ©   (2008-08-06 11:45:00) 

Добрый день!
Столкнулся с проблемой помогите пожалуйста кто знает. Есть форма на ней компонент RichEdit1 в нем содержится текст ">
<a tabindex="5" onclick="w(th
из этого текста я должен выдрать цифру пять (но на месте 5 может оказаться и 25), и занести автоматически допустим в Edit1.text. если можно покажите на примере.
заранее, благодорю.


{RASkov}   (2008-08-06 20:47:00) [1]

...и не забываем про чувствительность к регистру символов...
Можно в function GetSubStr
в начале делать так
AnsiLowerCase(AStr)
AnsiLowerCase(AFirstTag)
AnsiLowerCase(ASecondTag)
будет универсальнее, но и медленнее...
Можно и так:
Сначало один раз делаем
AnsiLowerCase(Memo.Text),
а затем как и в [18,20] т.е. в нутри GetSubStr не переводим символы в нижний регистр... но следим, чтоб Тэги передаваемые в GetSubStr были в соответствующем регистре...

В общем вариантов как обычно - куча. Осталось выбрать...


{RASkov}   (2008-08-06 20:15:00) [2]

Ответ на [19]

function GetSubStr(const AStr, AFirstTag, ASecondTag: String; var AInd: Integer; out AOutStr: String): Boolean;
var NB, NE: Integer;
begin
 AOutStr:='';
 NB:=PosEx(AFirstTag, AStr, AInd);
 Result:=NB>0; if not Result then Exit;
 INC(NB, Length(AFirstTag));
 NE:=PosEx(ASecondTag, AStr, NB);
 Result:=NE>0; if not Result then Exit;
 AOutStr:=Trim(Copy(AStr, NB, NE-NB));
 AInd:=NE+Length(ASecondTag);
end;

//Получаем весь список подстрок, например урлы...
procedure TForm1.Button1Click(Sender: TObject);
const BTag = '(<'; ETag ='>)';
var S: String; N: Integer;
begin
 N:=0;
 while GetSubStr(Memo1.Text, BTag, ETag, N, S) do ListBox1.Items.add(S);
end;

//Получить tabindex какого либо сайта....
procedure TForm1.Button2Click(Sender: TObject);
var N: Integer; S: String;
begin
 N:=Pos('favicon.yandex.net/favicon/www.1gb.ru', Memo1.Text);
 if (N>0) and GetSubStr(Memo1.Text, 'tabindex="', '"', N, S) then ListBox1.Items.add('favicon.yandex.net/favicon/www.1gb.ru №'+S)
  else ListBox1.Items.add('Error find');
end;

Примерно так....


alex-drob   (2008-08-06 19:53:00) [3]

скорей всего нужно не только по tabindex будет искать, я так понимаю на странице список найденых сайтов, и у каждого просто номер есть в списке. Чтобы сделать то что автор в [5] написал, нужно ещё определить в какой строке брать этот tabindex


{RASkov}   (2008-08-06 19:47:00) [4]

Примерно так можно, если я верно понял вопрос:
uses StrUtils;

function GetSubStr(const AStr, AFirstTag, ASecondTag: String; var AInd: Integer): String;
var NB, NE: Integer;
begin
 Result:='';
 NB:=PosEx(AFirstTag, AStr, AInd);
 if NB = 0 then Exit;
 INC(NB, Length(AFirstTag));
 NE:=PosEx(ASecondTag, AStr, NB);
 if NE = 0 then Exit;
 Result:=Trim(Copy(AStr, NB, NE-NB));
 AInd:=NE+Length(ASecondTag);
end;

procedure TForm1.Button1Click(Sender: TObject);
const BTag = 'tabindex="'; ETag ='"';
var S: String; N: Integer;
begin
 N:=0;
 S:=GetSubStr(Memo1.Text, BTag, ETag, N);
 while S<>'' do begin
  ListBox1.Items.add(S);
  S:=GetSubStr(Memo1.Text, BTag, ETag, N);
 end;
end;


alex-drob   (2008-08-06 19:10:00) [5]

procedure TForm1.Button1Click(Sender: TObject);
var _result:string;
  start:integer;
begin
_result:='';
start:=pos('tabindex="', memo1.Lines.Text)+10;
while memo1.Lines.Text[start]<>'"' do begin
_result:=_result+memo1.Lines.Text[start];
inc(start);
end;
edit1.Text:=_result
end;


есле в мемо1 текст в котором нужно искать, то в едит1 появиться число которое в кавычках


SSSs   (2008-08-06 18:44:00) [6]

ты мне написал в 15 32))сейчас 18 37....я согласен может я тупой....))и руки у мя не оттуда растут)))но к этому времени я так и не врубился...во первых утебя выходит ошибка в твоем коде во торых я понятия не имею в какой строке это будет но это решаймо..еще...
я тя прошу)))напиши рабочий код полностью))тебе будет это ничего не стоить))а мне прозрения на дельфи код)))спасибо большое ))заранее надеюсь пожалеешь мя))


brother   (2008-08-06 15:32:00) [7]

....
var _result:string;
   start:integer;
...

_result:='';
start:=pos('1gb.ru', строка_где_ищем)+24; //24 откорректируй если не попадаем на 9
while _result[start]<>'"' do
_result:=_result+строка_где_ищем[start];
inc(start);
end;
зы отлаживать будешь сам! Делфи под рукой нет)


SSSs   (2008-08-06 15:17:00) [8]



brother   (2008-08-06 15:11:00) [9]

приведи код html страницы или ссылку...


SSSs   (2008-08-06 15:10:00) [10]

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


brother   (2008-08-06 15:09:00) [11]

> 3. смещаешься (влево или вправо) до первой кавычки перед
> твоим числом.

можно просто +- сколько там будет (если документ в этом месте не изменяемый)


brother   (2008-08-06 14:58:00) [12]

даю алгоритм...
1. изучаешь структуру данной страницы и находишь 100% уникальное слово, что стоит рядом с твоей цифорй
2. по pos находишь позицию начала этого уникального слова
3. смещаешься (влево или вправо) до первойкавычки перед твоим числом.
4. смещаешься вправо до следующей кавычки, при этом записываещь результат в переменную (типа result=result+begunok[n],где n указатель текущей позиции бегунка)...
5. имя string можешь конверить в integer (или можно оставить как есть, если не нужно мат выражений)
6. все
зы реализацию уж ты сам ;)


SSSs   (2008-08-06 14:47:00) [13]

таким извращенным способ что мне стыдно говорить) может подскажешь как мне лучше искать вот этот текст в коде <a tabindex="5"и отдельно записать где нить в эдите или где нить цифру 5..... поднимешь мне опыта до предела)))а то бьюсь уже битые часы....


brother   (2008-08-06 13:01:00) [14]

сначала правильно распарсь, опыт поднимешь...
как вырывал то? ;)


SSSs   (2008-08-06 12:36:00) [15]

из кода страницы вырвал) по поиску...)


brother   (2008-08-06 12:31:00) [16]

> эту строку я получил...из сайта яндекса

чем ты ее распарсил так каряво то?


SSSs   (2008-08-06 12:30:00) [17]

что за TRegExpr?компонент?
2brother
искать по позиции ....у мя текст все время разного рзамера...но строка эта же остаеться всегда....эту строку я получил...из сайта яндекса (надеюсь не подумают что реклама), а в частности показывает какое место занимает определенный сайт по определенному запросу.и вот проблема)


a.a.j.   (2008-08-06 12:17:00) [18]

TRegExpr


brother   (2008-08-06 12:16:00) [19]

> ">
> <a tabindex="5" onclick="w(th

кстати... каким образом ты получил такую "строчку" (я про перевод строки...)


brother   (2008-08-06 11:59:00) [20]

ищи по pos =" далее парсь строчку до следующей " все что будет получено в итоге и будет твоя цифра (впрочем это только текст)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо