AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Problem mit Zeichen im RichEdit
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Zeichen im RichEdit

Ein Thema von dor557 · begonnen am 26. Jan 2011 · letzter Beitrag vom 31. Jan 2011
Antwort Antwort
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 13:49
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
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#2

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 13:57
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
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 13:59
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>
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.

Geändert von dor557 (26. Jan 2011 um 14:02 Uhr) Grund: Etwas hinzufügen
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 20:42
Die Daten sind nun ausgelesen. Funktioniert auch super.

Aber das Problem mit den Zeichen besteht weiterhin.

Hat keiner eine Idee ????
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 21:09
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
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 21:16
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 ?
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Problem mit Zeichen im RichEdit

  Alt 26. Jan 2011, 21:33
Glaube irgendwas mit AnsiToUtf8 und Utf8ToAnsi,
RichEdit1.Text := GetHtmlText(utf8toansi(tmpfile), 'roster', checkbox1.Checked); wenn es die Stelle ist wo Du die Zeilen ausliest?

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

AW: Problem mit Zeichen im RichEdit

  Alt 31. Jan 2011, 15:21
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
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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