AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ersetzen von Dezimalwerten

Ein Thema von Jan · begonnen am 4. Nov 2003 · letzter Beitrag vom 6. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Ersetzen von Dezimalwerten

  Alt 4. Nov 2003, 20:05
Moin Jan,

nein, Zeichen für Zeichen.
Ist Deine Basis jetzt schon der extrahierte Text, oder noch die HTML Datei?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Ersetzen von Dezimalwerten

  Alt 5. Nov 2003, 12:37
Hallo Christian,
ich habe bereits alles extrahiert was ich haben will, das einzige was halt noch stört sind die Sonderzeichen.
Am besten mache ich das doch so, dass ich jedes Wort checke, ob es in einem Satz von Werten, die ich vorher deklariere enthalten ist, oder nicht?
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Ersetzen von Dezimalwerten

  Alt 5. Nov 2003, 21:22
Moin Jan,

ich denke mal, Du könntest "einfach" Zeichen für Zeichen durchgehen.
Ist es ein Zeichen <> &, wird es direkt in den Zielbuffer übernommen, ansonsten suchst Du Dir ab dieser Stelle alle Zeichen bis zum nächsten ; raus.
Als Ergebnis für diesen Teilstring müsste jetzt (jeweils ohne Blank nach dem & versteht sich) & amp; / & lt; / & gt; / & quot; / & nbsp; oder & #nnn; rauskommen, da ja auch die Zeichen & / < / > / " und non breaking Space als Sonderzeichen kodiert sind (mehr als diese fünf fallen mir jetzt nicht ein). Den numerischen Wert könntest Du dabei einfach als chr(nnn) in den Zielbuffer schreiben, und die anderen durch eine Abfrage welcher String es ist, und dann das jeweilige Zeichen. Anschliessend steht der Quellindex hinter dem ; und das übersetzte Zeichen im Zielbuffer.
Geht allemal schneller als ein wiederholtes StringReplace, was auch zu Übersetzungsfehlern führen kann, weil dann umgewandelte Zeichen wiederrum Umwandelbare Zeichenkombinationen bilden können, was je eindeutig falsch wäre.
Du müsstest jetzt nur noch Fehler abfangen, denn es könnten ja auch Fehler in der Datei enthalten sein, z.B. ein einzelnes & was eigentlich als & amp; hätte enthalten sein müssen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Jan
Jan

Registriert seit: 24. Sep 2002
Ort: Magdeburg
491 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Ersetzen von Dezimalwerten

  Alt 6. Nov 2003, 20:03
Hi Christian,
ich hab da mal was gebastelt, was auch funktioniert.
Für die Nachwelt:


Delphi-Quellcode:
function Specialchars(intext:string):string;
var
    i, p: integer;
begin
  i:=1;
  while (not (i>length(intext))) do
  begin
    if intext[i]='&then
    begin
      if intext[i+1]='#then
      begin
        p:=pos(';', intext);
        if p<i+8 then
        intext:=copy(intext,1,i-1)+char(strtoint(copy(intext,i+2,p-(i+2))))+copy(intext,p+1,length(intext)-p);
      end;
    end;
    inc(i);
  end;
  result:=intext;
end;
Ist das so in ordnung, oder kann man das noch irgendwie gewinnbringend optimieren?
Gruß
Jan
Jan
Wenn die Sonne der Kultur tief steht, werfen auch kleine Gestalten lange Schatten.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Ersetzen von Dezimalwerten

  Alt 6. Nov 2003, 20:12
Moin Jan,

ich würde mal behaupten, dass das unter Umständen schief geht.
Wer sagt denn, dass ein ; nur als Kennzeichen für das Ende einer & #nnn; Darstellung dient?
Noch gemeiner: Wenn der numerische Code = 59 ist, wird ein ; in den Text eingefügt, und schon stimmt das mit dem Pos auch nicht mehr.

Initialisiere lieber Result auf einen String mit der Länge des Eingabestrings (z.B. auf Blank), und füge Zeichen für Zeichen dort ein. Triffst Du auf ein & im Quellstring, merk Dir dessen Position und suche nach dem nächsten ;
Dann kannst Du den Wert dazwischen auswerten, und ins Ziel übertragen.
Der Wert muss ja nicht zwingend numerisch sein & amp; könnte z.B. auch vorkommen, und müsste entsprechend übersetzt werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:29 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