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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2011, 13:40   #1
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
Восклицание Поиск символа в Memo с N-ой позиции

Всем добрый день.
Не знаю,как подступить к решению проблемы.
Есть много-много текста в Memo,где есть строка вида "streamUrl":"http://.../.../wcKZEjLjIJmo?stream_token=dXO4w"
Мне нужно прогаммно запомнить в string переменную только эту часть http://.../.../wcKZEjLjIJmo?stream_token=dXO4w,т.е. ссылку.Ссылка каждый раз разная!
Как я делаю:
1.Вначале ищу часть строки "streamUrl":" таким образом
Код:
procedure TForm1.sButton5Click(Sender: TObject);
var i:integer;
begin
//получаю код страницы
Memo1.Lines.Text:=IdHTTP1.Get(sEdit1.Text);
//запускаем цикл поиска слова
for i:=0 to Memo1.Lines.Count-1 do
if Pos(stream,Memo1.Lines.Text)<>0 then
 begin
 //тут выделяем найденное слово
 Memo1.SetFocus();
 Memo1.SelStart:=Pos(stream,Memo1.Lines.Text)-1;
 Memo1.SelLength:=Length(stream);
 end;
end;
2.Тут мне как-то нужно выделить ту часть,о которой говорилось выше.
Какие есть у меня идеи:искать символ ",которым оканчивается ссылка,находить его позицию в строке,выделять с позиции,которой оканчивался первый поиск,до позиции символа ".
Но я не знаю какими методами можно это реализовать.И я чувствую,что можно сделать проще,но как.

Буду благодарен любым советам и ссылками на методы и функции.Просто подскажите пожалуйста куда нужно "копать".
Dj_SheLL вне форума Ответить с цитированием
Старый 14.06.2011, 13:46   #2
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Яб работал с Memo1.Text.
Для начала бы удалил все 13 и 10 символы ибо служебные.
Затем нашёл бы номер где сидит "streamUrl":" и нашёл завершающую ".
Найти завершающую можно просто в цикле While до тех пор пока номер найденой " не будет превышать номер "streamUrl":" как только превысили, значит это закрывающая.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 14.06.2011, 14:49   #3
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

А функция поиска остаётся та же?
Dj_SheLL вне форума Ответить с цитированием
Старый 14.06.2011, 15:19   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Всмсысле функций? Функция Pos.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 15.06.2011, 13:20   #5
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Ну сделал вот так,но что-то он не хочет выделять до ковычек текст
Код:
procedure TForm1.sButton5Click(Sender: TObject);
var i:integer;
begin
Memo1.Clear;
//получаю код страницы
Memo1.Lines.Text:=IdHTTP1.Get(sEdit1.Text);
//очищаю от #13#10 и пробелов
Memo1.Text:=StringReplace(Memo1.Text,' ','',[rfReplaceAll]);
Memo1.Text:=StringReplace(Memo1.Text,#13#10,'',[rfReplaceAll]);
//запускаем цикл поиска слова
for i:=0 to Memo1.Lines.Count-1 do
if Pos(stream,Memo1.Lines.Text)<>0 then
 begin
 Memo1.SetFocus();
 Memo1.SelStart:=(Pos(stream,Memo1.Lines.Text)-1)+Length(stream);
 Memo1.SelLength:=Pos('"',Memo1.Lines.Text);
 end;
end;
Подозрение,что я не так делаю что-то...
Как через While сделать затрудняюсь понять...
Dj_SheLL вне форума Ответить с цитированием
Старый 15.06.2011, 18:54   #6
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Собственно вот набросал пример поиска с заданной позиции.
Что касается про выделение, то текст выделяется, но визуально это никак не отображается. Но это не помешает тебе: запомнить в string переменную только эту часть.

Код:

Procedure TForm1.Button1Click(Sender: TObject);
// Нажата кнопка
Var S, X : String; // Строка и что ищем
    k : Integer; // Искать с этого символа
    i : Integer;
Begin
// Присвоим переменной S значение Memo1.Text
S := Memo1.Text;
// Будем искать с k символа
k := 25;
// Будем искать ...
X := 'символ';
// Очистим S от служебных символов
While Pos(Chr(13),S) > 0 Do Delete(S,Pos(Chr(13),S),1);
While Pos(Chr(10),S) > 0 Do Delete(S,Pos(Chr(10),S),1);
// =====================
// Ищем ....
i := Pos(X, S);
// Если мы не нашли то сразу скажем об этом
If i = 0 Then ShowMessage('Строка [' + X + '] не найдена в тексте.');
// А если нашли то начнём искать
While i > 0 Do // Если нашли
  Begin // While Begin 1
    If i < k Then
      Begin // если мы нашли чтото до символа k, то
        Delete(S,1, i); // Удалим с 1-ого по i символы
        i := Pos(X, S); // Снова поищем
        // если с позиции k нам ничего найти не удалось
        If i = 0 Then ShowMessage('Строка [' + X + '] не найдена с позиции [' + IntToStr(k) + ']');
      End
    Else // Мы нашли нужный нам кусок
      Begin
        ShowMessage('Строка [' + X + '] была найдена в позицие [' + IntToStr(i) + ']');
        Break; // Прервём поиск
      End;
  End; // While End 1
// ======================
// Что касается выделения, то ...
Memo1.SelStart := 10;
Memo1.SelLength := 5;
// На самом деле текст выделен, но визуально это никак неотображается
Showmessage(Memo1.SelText); // Покажем это
// End;
End;
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 15.06.2011 в 19:14.
Valio вне форума Ответить с цитированием
Старый 15.06.2011, 19:24   #7
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Спасибо огромное!!!Твой пример дал мне много "пищи" для мозгов и для размышлений!
Я просто сделал,как ты мне посоветовал ранее:
1.Убил везде пробелы
2.Нашёл в какой строке находится нужное "streamUrl":"
3.Убил весь текст,который находится выше и оканчивается "streamUrl":"
4.С помощью pos нашёл закрывающий символ "
5.И скопировал ссылку
Dj_SheLL вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
memo, позиции курсора на нем BloodMaX Общие вопросы Delphi 3 08.07.2010 15:59
Взять два предпоследних символа строки Memo Marsel737 Общие вопросы Delphi 2 08.01.2010 19:18
Поиск позиции комбинации vv66 Microsoft Office Excel 10 03.11.2009 17:59
Записать код символа из Edit в Memo rainbow Общие вопросы Delphi 3 27.10.2009 06:56
Поиск позиции элемента несортированного массива gdneon Microsoft Office Excel 4 16.04.2007 08:08