Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как можно подправить теги в Html


Автор: Simchik 18.4.2006, 22:52
Уважаемые программисты окажите пожалуйста помощь!!!
Получаю Html с интернета, нужно изменитьтег который выглядит так: <img  src=/i/14.gif> 
На тег который будет выглядеть вот так:<img src=  i/14.gif> .
Заранее огромное спасибо!!!
 

Автор: Marlin 19.4.2006, 06:09
Работай с html как с обычным текстовым документом. Находи свой тег и меняй его. 

Автор: x77 19.4.2006, 14:31
Цитата(F1)

Unit

SysUtils

Category

string handling routines

Delphi syntax:

function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;

C++ syntax:

extern PACKAGE AnsiString __fastcall StringReplace(const AnsiString S, const AnsiString OldPattern, const AnsiString NewPattern, TReplaceFlags Flags);

Description

StringReplace replaces occurrences of the substring specified by OldPattern with the substring specified by NewPattern. StringReplace assumes that the source string may contain Multibyte characters.

S is the source string, whose substrings are changed.

OldPattern is the substring to locate and replace with NewPattern.

NewPattern is the substring to substitute for occurrences of OldPattern.

Flags is a set of flags that govern how StringReplace locates and replaces occurrences of OldPattern. If Flags does not include rfReplaceAll, StringReplace only replaces the first occurrence of OldPattern in S. Otherwise, StringReplace replaces all instances of OldPattern with NewPattern. If the Flags parameter includes rfIgnoreCase, The comparison operation is case insensitive.


соответственно, требуется:

Код

var
  s: TStrings;
begin
  s := TStringList.Create;
  try
    s.LoadFromFile (...);
    s.Text := ReplaceString (s.Text, '<img  src=/', '<img  src=', rfReplaceAll);
    ...
  finally
    s.Free;
  end;
end;
  

Автор: Simchik 19.4.2006, 22:08
x77, Почему прога ругается на следующее предложение:
Код

ss.Text :=StringReplace (ss.Text, '<img  src=/', '<img  src=', rfReplaceAll);

Ругается следующим образом:
[Error] Unit1.pas(141): Incompatible types: 'TReplaceFlags' and 'Enumeration'
Т.е. Несовмистимые типы. 
 

Автор: Spectral 19.4.2006, 22:54
 smile 
Код

 StringReplace (ss.Text, '<img  src=/', '<img  src=', [rfReplaceAll]);
 

Автор: Simchik 20.4.2006, 23:12
Код

StringReplace (ss.Text, '<img  src=/', '<img  src=', [rfReplaceAll]);


Spectral, Так тоже пробовал, РУГАЕТСЯ!!! 
Помогите пожалуйста, я уже замучался!!! Это моя курсовая... Нужно было узнать прогноз погоды. 
Практически все работает, осталось только вот-это...  

Автор: Тьма 20.4.2006, 23:52
вот, все работает
Код

  Edit2.Text := StringReplace(Edit2.Text, 'edit', 'tide', [rfReplaceAll+rfIgnoreCase]);
  

Автор: Rouse_ 21.4.2006, 03:06
Ну к примеру вот так:

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, SHDocVw, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, mshtml, ActiveX;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    WebBrowser1: TWebBrowser;
    WebBrowser2: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  StartImg = '<img src="';
  EndImg = '>';
  LengthStart = Length(StartImg);
  LengthEnd = Length(EndImg);
  LengthSum = LengthStart + LengthEnd;
var
  InHTML, OutHTML, ImageLink: String;
  Position: Cardinal;
  Document: IHtmlDocument2;
  V: Variant;
begin
  // Загружаем оригинальную страницу (для сравнения)
  WebBrowser1.Navigate('http://www.yandex.ru');
  // Получаем код этой страницы руками
  InHTML := IdHTTP1.Get('http://www.yandex.ru');
  // Начинаем парсить
  while Length(InHTML) > 0 do
  begin
    // Ищем начало рисунка
    Position := Pos(StartImg, InHTML);
    // Если нашли
    if Position > 0 then
    begin
      // Все что до него - помещаем в выходной буффер
      OutHTML := OutHTML + Copy(InHTML, 1, Position - 1);
      // Удаляем ненужное из входного буффера
      Delete(InHTML, 1, Position - 1);
      // Ищем конец картинки
      Position := Pos(EndImg, InHTML);
      // Запоминаем картинку
      ImageLink := Copy(InHTML, LengthStart, Position - LengthSum);
      // Если эта картинка грузится не с узла img.yandex.ru - добавялем ее в выходной буффер
      if Pos('img.yandex.ru', ImageLink) = 0 then
        OutHTML := OutHTML + Copy(InHTML, 1, Position + LengthEnd - 1);
      // Удаляем из входного
      Delete(InHTML, 1, Position + LengthEnd - 1);
    end
    else
    begin
      // Больше картинок нет - все что осталось перекидываем в выходной буффер
      OutHTML := OutHTML + InHTML;
      InHTML := '';
    end;
  end;
  // Закидываем пропарсенный текст в бразер
  WebBrowser2.Navigate('about:blank');
  while WebBrowser2.Document = nil do
    Application.ProcessMessages;
  Document := WebBrowser2.Document as IHtmlDocument2;
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := OutHTML;
  Document.Writeln(PSafeArray(TVarData(v).VArray));
end;

end.
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)