Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit Zeichen im RichEdit (https://www.delphipraxis.net/157831-problem-mit-zeichen-im-richedit.html)

dor557 26. Jan 2011 13:49

Problem mit Zeichen im RichEdit
 
hallo zusammen.

ich möchte aus einer HTML seite daten lesen.

ich habe mir eine unit geschrieben :

Delphi-Quellcode:
unit htmlFuncts;
interface
uses MSHTML, ActiveX, Dialogs, windows, sysutils, stdctrls, forms, classes, comCtrls, commctrl;
function GetDocumentFromFile(const markup: WideString): IDispatch;
function GetHtmlText(const markup : widestring; ElementName: string = ''; HTMLText : boolean = false): string;
procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView);

implementation

procedure LadeHTMltoTable(memo : TRichEdit; Liste : TListView);
var ProcessForm : TForm;
    Label1 : TProgressBar;
  i,j: Integer;
begin
  ProcessForm := Tform.Create(nil);
  ProcessForm.Height := 80;
  ProcessForm.Width := 250;
  ProcessForm.FormStyle := fsStayOnTop;
  ProcessForm.Caption := 'Vortschritt';
  Label1 := TProgressBar.Create(ProcessForm);
  Label1.Min := 0;
  Label1.max := Memo.lines.Count;
  Label1.Top := 12;
  Label1.Left := 12;
  Label1.Width := 220;
  Label1.height := 15;
  ProcessForm.Position := poMainFormCenter;
  ProcessForm.Show;
  Label1.Parent := ProcessForm;
  label1.show;
  j := 0;
  for i := 0 to Memo.lines.Count - 1 do
  begin
    Label1.stepby(1);
    ProcessForm.Update;
    Label1.refresh;
    sleep(5);
  end;
  ProcessForm.Release;
end;

function GetDocumentFromFile(const markup: WideString): IDispatch;
var
  doc: OleVariant;
  f : TextFile;
  TextString : Widestring;
begin
  AssignFile(f, Markup);
  Reset(f);
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  while not eof(f) do
  begin
    readln(f, textstring);

    doc.write(textstring);
  end;
  doc.Close;
  CloseFile(f);
end;


function GetHtmlText(const markup: widestring; ElementName: string = ''; HTMLText : boolean = false): string;
var
 m_pHtmlDoc2 : IHTMLDocument2;
 HTMLElement : IHTMLElement;
 HTMLTxtRange : IHTMLTxtRange;
begin
 result := '';
 try
     m_pHtmlDoc2 := GetDocumentFromFile(Markup) as IHTMLDocument2; // document get
     if assigned(m_pHtmlDoc2) then begin
       if ElementName = '' then
         HTMLElement := m_pHtmlDoc2.body as IHTMLElement // select body for all text
       else
         HTMLElement := m_pHtmlDoc2.all.item(ElementName,0) as IHTMLElement;

       if assigned(HTMLElement) then begin // check
         m_pHtmlDoc2.selection.empty; // clear old selection
         HTMLTxtRange := IHTMLTxtRange(m_pHtmlDoc2.selection.createRange);
         if assigned(HTMLTxtRange) then begin
           HTMLTxtRange.moveToElementText(HTMLElement); // move selection to Element
           HTMLTxtRange.select; // select
           if HTMLText then
             result := HTMLTxtRange.htmltext // get the TEXT
           else
             result := HTMLTxtRange.text; // get the PLAIN TEXT
           m_pHtmlDoc2.selection.empty; // remove selection
         end;
       end;
     end;
 except
  on E : Exception do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
 end;
end;

end.
aufgerufen wird folgendes :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   old_size := 0;
  New_size := 0;
  old_File := ExtractFilePath(ParamStr(0)) + 'akt.xml';
  new_file := ExtractFilePath(ParamStr(0)) + 'akt_old.xml';
  tmpfile := new_File;
  GetInetFile('http://eu.battle.net/wow/de/guild/die-todeskrallen/legenden%20der%20horde/roster', tmpFile,NIL);
  RichEdit1.Text := GetHtmlText(tmpfile, 'roster', checkbox1.Checked);
end;
Memo heissen die Variablen da es ursprünglich ein Memo war und ich dachte das ein RichEdit das problem evtl lösen kann :)

Problem ist das sonderzeichen wie Ö, oder anderen zeichen hinterher im RichEdit als hieroglyphen angezeigt.
bsp : aus Wöchentlich macht es im RichEdit dann Wöchentlich.

ich weiss nich an welcher stelle ich dieses Problem lösen kann.

Denn nachher soll dann aus dem Gelesenen Text weitere details ausgelesen werden und da muss der richtige zeichensatz stimmen.

Kann es sein das bei der Function GetHtmlText etwas angepasst werden kann bzw muss um dieses Problem zu lösen ?

Bin für Jeden rat dankbar.

gruss Sascha

Memnarch 26. Jan 2011 13:57

AW: Problem mit Zeichen im RichEdit
 
GetHTMLText?
HAbe ich das richtig verstanden, dass du eigentlich nur diesen Text anzeigen möchtest?(Also als planetext) im Richedit?

EDIT: oder filtesrt du da oben nur Bestimmte sektionen heraus o.O

MFG
Memnarch

dor557 26. Jan 2011 13:59

AW: Problem mit Zeichen im RichEdit
 
der HTMLCode soll für den gewählten teil angezeigt werden, damit ich dann hinterher weiter durchsuchen kann.

so das ich nicht die Ganze datei durchsuchen muss.

Ich möchte hinterher aus der HTML datei eine Tabelle mit den Daten erstellen.

Muss das aber von hand durchsuchen da die datei sehr Komplex ist.

gruss Sascha

das ist der Teil der hinterher weiter durchsucht werden muss :

HTML-Code:

        <div id="roster" class="table">
                <table>
                        <thead>
                                <tr>
                                                        <th class="name">
                                                                <a href="javascript:;" class="sort-link">

                                                                        <span class="arrow">Name</span>
                                                                </a>
                                                        </th>
                                                        <th class="race">
                                                                <a href="javascript:;" class="sort-link">
                                                                        <span class="arrow">Volk</span>
                                                                </a>
                                                        </th>

                                                        <th class="cls">
                                                                <a href="javascript:;" class="sort-link">
                                                                        <span class="arrow">Klasse</span>
                                                                </a>
                                                        </th>
                                                        <th class="lvl">
                                                                <a href="javascript:;" class="sort-link numeric">
                                                                        <span class="arrow">Stufe</span>

                                                                </a>
                                                        </th>
                                                        <th class="rank">
                                                                <a href="javascript:;" class="sort-link numeric">
                                                                        <span class="arrow">Gildenbank</span>
                                                                </a>
                                                        </th>
                                                        <th class="ach-points">

                                                                <a href="javascript:;" class="sort-link numeric">
                                                                        <span class="arrow">Erfolgspunkte</span>
                                                                </a>
                                                        </th>
                                                        <th class="lifetime">
                                                                <a href="javascript:;" class="sort-link numeric">
                                                                        <span class="arrow">Gesamt</span>
                                                                </a>

                                                        </th>
                                                        <th class="weekly">
                                                                <a href="javascript:;" class="sort-link numeric">
                                                                        <span class="arrow">Wöchentlich</span>
                                                                </a>
                                                        </th>
                                </tr>
                        </thead>

                        <tbody>

                        <tr class="row1"
                                data-level="84">

                                <td class="name"><a href="/wow/de/character/die-todeskrallen/wirgo/" class="color-c5">Wirgo</a></td>
                                <td class="race" data-raw="untote">
                                        <img src="/wow/static/images/icons/race/5-0.gif" class="img" alt="" data-tooltip="Untote" />
                                </td>
                                <td class="cls" data-raw="priester">
                                        <img src="/wow/static/images/icons/class/5.gif" class="img" alt="" data-tooltip="Priester" />

                                </td>
                                <td class="lvl">84</td>
                                <td class="rank" data-raw="2">
                                        <span >
                                                        Rang 2
                                        </span>
                                </td>
                                <td class="ach-points">
                                        <span class="ach-icon">2610</span>

                                </td>
                                <td class="lifetime">1245343</td>
                                <td class="weekly">677344</td>
                        </tr>

                        <tr class="row2"
                                data-level="83">

                                <td class="name"><a href="/wow/de/character/die-todeskrallen/teglarius/" class="color-c9">Teglarius</a></td>
                                <td class="race" data-raw="untote">

                                        <img src="/wow/static/images/icons/race/5-0.gif" class="img" alt="" data-tooltip="Untote" />
                                </td>
                                <td class="cls" data-raw="hexenmeister">
                                        <img src="/wow/static/images/icons/class/9.gif" class="img" alt="" data-tooltip="Hexenmeister" />
                                </td>
                                <td class="lvl">83</td>
                                <td class="rank" data-raw="1">
                                        <span >

                                                        Rang 1
                                        </span>
                                </td>
                                <td class="ach-points">
                                        <span class="ach-icon">3780</span>
                                </td>
                                <td class="lifetime">2248698</td>
                                <td class="weekly">0</td>

                        </tr>

                        <tr class="row1"
                                data-level="85">

                                <td class="name"><a href="/wow/de/character/die-todeskrallen/star/" class="color-c8">Star</a></td>
                                <td class="race" data-raw="troll">
                                        <img src="/wow/static/images/icons/race/8-1.gif" class="img" alt="" data-tooltip="Troll" />
                                </td>
                                <td class="cls" data-raw="magier">
                                        <img src="/wow/static/images/icons/class/8.gif" class="img" alt="" data-tooltip="Magier" />

                                </td>
                                <td class="lvl">85</td>
                                <td class="rank" data-raw="1">
                                        <span >
                                                        Rang 1
                                        </span>
                                </td>
                                <td class="ach-points">
                                        <span class="ach-icon">6455</span>

                                </td>
                                <td class="lifetime">8251963</td>
                                <td class="weekly">218510</td>
                        </tr>

                        <tr class="row2"
                                data-level="85">

                                <td class="name"><a href="/wow/de/character/die-todeskrallen/a%c3%aaro/" class="color-c8">Aêro</a></td>
                                <td class="race" data-raw="untote">

                                        <img src="/wow/static/images/icons/race/5-0.gif" class="img" alt="" data-tooltip="Untote" />
                                </td>
                                <td class="cls" data-raw="magier">
                                        <img src="/wow/static/images/icons/class/8.gif" class="img" alt="" data-tooltip="Magier" />
                                </td>
                                <td class="lvl">85</td>
                                <td class="rank" data-raw="7">
                                        <span >

                                                        Rang 7
                                        </span>
                                </td>
                                <td class="ach-points">
                                        <span class="ach-icon">4335</span>
                                </td>
                                <td class="lifetime">86750</td>
                                <td class="weekly">0</td>

                        </tr></tbody></table></div>


dor557 26. Jan 2011 20:42

AW: Problem mit Zeichen im RichEdit
 
Die Daten sind nun ausgelesen. Funktioniert auch super.

Aber das Problem mit den Zeichen besteht weiterhin. :(

Hat keiner eine Idee ????

alfold 26. Jan 2011 21:09

AW: Problem mit Zeichen im RichEdit
 
Kann es sein das die Umlaute als html zeichen so drin stehen Ö = &ouml (heute standard)
und Du das evtl erst noch Filtern musst? Irgend wo mal was gesehen darüber, weiss bloss nicht mehr wo :?

Gruss alfold

dor557 26. Jan 2011 21:16

AW: Problem mit Zeichen im RichEdit
 
eahmmm..... Gute Frage. Im quellcode stehen die im htmlumlaut code drinnen. aber wie kann ich das dann in Delphi in den richtigen Zeichensatz umwandeln ?

geht as überhaupt ?

alfold 26. Jan 2011 21:33

AW: Problem mit Zeichen im RichEdit
 
Glaube irgendwas mit AnsiToUtf8 und Utf8ToAnsi,
Delphi-Quellcode:
RichEdit1.Text := GetHtmlText(utf8toansi(tmpfile), 'roster', checkbox1.Checked);
wenn es die Stelle ist wo Du die Zeilen ausliest?

Gruss alfold

dor557 31. Jan 2011 15:21

AW: Problem mit Zeichen im RichEdit
 
die lösung mit dem utf8toansi hat mir den richtigen lösungsansatz gegeben.

Ich habe dann noch etwas weiter gesucht und habe dann einen Thread gefunden der mich dann endgültig auf die Endlösung brachte.

ich musste schon beim Laden der Datei vom PC die Daten convertieren.

nun sieht die Nötige Funktion nun wie folgt aus :
Delphi-Quellcode:
function GetDocumentFromFile(const markup: WideString): IDispatch;
var
  doc: OleVariant;
  f : TextFile;
  TextString : Widestring;
begin
  AssignFile(f, Markup);
  Reset(f);
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  while not eof(f) do
  begin
    readln(f, textstring);
    textstring := Utf8Encode(textstring);
    doc.write(Utf8ToAnsi(textstring));
  end;
  doc.Close;
  CloseFile(f);
end;
und schon ist der Rest gelöst.

gruss Sascha :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz