![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Добрый день, или утро, ну или что у вас сейчас)) 
		
	
		
		
		
		
		
		
			Пытаюсь спарсить погоду с gismeteo md Получаю html, удаляю всё не нужное с начала и конца, оставив только то, что нужно парсить Парсю ) Код такой: Код: 
	var
i : integer;
s : string;
begin
  For i := 0 to smemo1.Lines.Count - 1 do
  begin
   s  := smemo1.Lines.Strings[i];
    if pos('<td class="cltext">',s) <> 0 then
    begin
      s  := copy(s,pos('<td class="cltext">',s)+19,length(s));
      s  := copy(s,0,pos('</td>',s)-1);
      smemo2.Lines.Add(s);
    end;
  end;
end;в мемо 2, попадает сама погода, но только (ясно, облачно). Почему не вырезается:   Малооблачно, небольшой дождь Малооблачно, дождь, гроза Вместо этих строк в мемо2 добавляется пустая строчка.. ![]() Код HTML: 
	
 В коде что-то не учел или что? Последний раз редактировалось Tech N9ne, 25.06.2018 в 05:20.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 На в скидку - вы построчно ответ обрабатываете,а его надо как строчку единую парсить, в смысле smemo1.text, переводы строк парсингу плохо поддаются 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Tech N9ne (25.06.2018)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Попробовал так Код: 
	smemo2.Lines.Text := sMemo2.Lines.Text +' '+ s; ![]() Получаю тоже самое.. Такое ощущение, как будто из-за запятых или пробелов не вырезает. Так выглядит отрывок HTML . Код HTML: 
	
 Последний раз редактировалось Tech N9ne, 25.06.2018 в 16:43.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У вас четкие теги в ответе, можно парсингом их раскрыть, можно стандартными методами (json), если это не подходит, покажите пжлст, что приходит (без чистки) и что должно отобразиться (что оставить), мож обычным поиском в тексте можно обойтись 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 | 
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
 
Tech N9ne (25.06.2018)
  | ||
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 После долгих мучений с гуглом, нашёл процедурку) Код: 
	uses
  StrUtils;
 
//Поиск подстрок, расположенных между шаблонами aSub1 и aSub2.
//Найденные подстроки добавляются в список aSl.
procedure ParseStr(const aStr, aSub1, aSub2 : string; aSl : TStrings);
const
  SelfName = 'ParseStr()';
var
  L1, L2, P1, P2 : Integer;
begin
  if aSl = nil then
    raise Exception.Create(SelfName + '. ГЋГёГЁГЎГЄГ*! Ñïèñîê Г*ГҐ ñîçäГ*Г*.');
  L1 := Length(aSub1);
  L2 := Length(aSub2);
  P1 := 1;
  P2 := 0;
  repeat
    //Ищем первый тег, начиная с позиции P1.
    P1 := PosEx(aSub1, aStr, P1);
    //Если нашли первый тег.
    if P1 > 0 then begin
      //Справа от первого тега ищем второй тег.
      P2 := PosEx(aSub2, aStr, P1 + L1);
      //Если нашли второй тег.
      if P2 > 0 then begin
        //Подстроку, которая расположена между тегами, добавляем в aSl.
        aSl.Add( Copy(aStr, P1 + L1, P2 - P1 - L1) );
        //Начальную позицию поиска располагаем справа от второго тега.
        P1 := P2 + L2;
      end;
    end;
  //Если первый или второй тег оказался не найденным, то выходим из цикла.
  until (P1 = 0) or (P2 = 0);
end;
 
//Пример использования.
//В Memo1 - исходный текст, в Memo2 выводятся результаты поиска.
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Clear;
  ParseStr(Memo1.Text, '<artist>', '</artist>', Memo2.Lines);
end;![]()  |