Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Вниз

RichEdit взять кусок текста.   Найти похожие ветки 

 
SSSs   (2008-08-06 11:45) [0]

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


 
SSSs   (2008-08-06 11:47) [1]

извинябсь за повтор просто в 1 посте не очень понятно какой текст..
ниже
">
<a tabindex="5" onclick="w(th


 
brother ©   (2008-08-06 11:59) [2]

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


 
brother ©   (2008-08-06 12:16) [3]

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

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


 
a.a.j. ©   (2008-08-06 12:17) [4]

TRegExpr


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

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


 
brother ©   (2008-08-06 12:31) [6]

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

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


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

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


 
brother ©   (2008-08-06 13:01) [8]

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


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

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


 
brother ©   (2008-08-06 14:58) [10]

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


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

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

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


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

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


 
brother ©   (2008-08-06 15:11) [13]

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


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

<i style="background-image:url(http://favicon.yandex.net/favicon/www.1gb.ru)">
<a tabindex="9"
код хтмл, т.е уникальное слово 1gb.ru перед тегом нужным мне <a tabindex="9" на всяк пожарррный кидаю ссылку http://yandex.ru/yandsearch?text=%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81&stpar1=%2Fon1%2Ft6%2Fk0%2Fs125
Спасибо большое.....))))

З.Ы. не рекламлю ни 1 сайт....не сочтите за рекламу)


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

....
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 18:44) [16]

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


 
alex-drob ©   (2008-08-06 19:10) [17]

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 появиться число которое в кавычках


 
{RASkov} ©   (2008-08-06 19:47) [18]

Примерно так можно, если я верно понял вопрос:
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:53) [19]

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


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

Ответ на [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;

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


 
{RASkov} ©   (2008-08-06 20:47) [21]

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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.006 c
3-1206358955
Альберт
2008-03-24 14:42
2008.09.21
Как сформировать запрос с апострофом


2-1218109791
Ябеда
2008-08-07 15:49
2008.09.21
Снова потоки


2-1218013540
witaly
2008-08-06 13:05
2008.09.21
узлы в TreeView


15-1217245659
brother
2008-07-28 15:47
2008.09.21
слетел raid5 массив


2-1218186434
ProgRAMmer Dimonych
2008-08-08 13:07
2008.09.21
OnIdle в приложении на чистом WinAPI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский