faststring auch unter Lazarus ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

faststring auch unter Lazarus ?

Beitrag von pluto »

Hallo,
unter http://www.delphiforum.de habe ich einen Fertigen HTML Paser gefunden den ich gerne für meine zweck nutzen bzw. ausprobieren möchte. Dort sind zwei weitere units dabei:
FastStringFuncs und FastStrings

Die kann Lazarus nicht Komplieren. weil es ASM noch nicht gibt anscheind spiele ich mir den
FastStrings.pas(276,3) Fatal: Selected assembler reader not supported

Die Meldung kommt immer,

Einstellungen rum komme ich ein stück weiter:
(wenn ich Den Delphi Mouds einschalte kommt diese Meldung)
FastStrings.pas(292,26) Error: Invalid operand type


Da ich kein ASM kann:
mov AL, [ESI]
lea ESI, ESI + 1 // hier kommt die Meldung
mov [EDI + EAX * 4], ECX
dec ECX
jg @@loop

pop ESI
pop EDI

Der Code ist noch um einiges Länder. Ich weiß nicht ob ich die units einfach hier hochladen darf... Wenn keiner was dagegen hat kann ich es ja machen....

Weil für mein Vorhaben währe diese HTMlPaser units nicht schlecht. oder kennt ihr noch vergleichbare units die es schon in Lazarus Gibt ?

Mir geht es darum Optimal HTML code zu Pasen.
das mache ich im Moment so:

Code: Alles auswählen

function NextHtml(var FirstIndex, LastIndex: Integer;
  var aCommand:widestring; const asoruce: widestring): String;
begin
  lastindex:=PosExt('<',asoruce,FirstIndex);
 
//  writeln(Firstindex,'\',Length(asoruce));
 
  if LastIndex > 0 then begin
    result:=Copy(asoruce,FirstIndex,abs(LastIndex-FirstIndex)-1);
    FirstIndex:=PosExt('>',asoruce,LastIndex);
    aCommand:=Copy(asoruce,LastIndex,abs(LastIndex-(FirstIndex-1)));
  end
  else begin
    aCommand:='';
    result:=Copy(asoruce,FirstIndex,Length(asoruce));
  end;
 
 
end// NextHtml
  l:=1; p:=1; pw:=0;   ph:=ph+2;
  repeat
    str1:=NextHtml(l,p,str2,aText2);
until p = 0;


Ich hoffe euch ist mein Prinzip klar. Meiner Meinung nach ist das besser als meine anderen versuche wie z.b. das jeder Buchstabe ein Objeckt ist...

Diese Daten lese ich im Moment in eine Strucktur ein:
Jeder Zeile besteht aus Blöcken jeder Block kann leicht Formatiert werden.
mit folgenden Zeilen z.b.

dieser Text wird in rot angezeigt

die " sind wichtig.... das abschließende /fg auch damit wird gezielt die vorherige Farbe wiederhergestellt.

Dank der Liste kann ich leicht scrollen: Ich habe ein Buffer von typ TBitmap der ist so groß wie der Anzeige Bildschrim und jetzt verwende ich zum erstenmal selber zwei Scrollbars
eine Für Vertikal eine für Horizontal. Das Scrollen Klappt Prima: bei Vertikal greife ich auf die interne Liste zurück und zeichne nur so viel wie ich auch sehe.
Bei Horizontal nehme ich die Breite des Buffers der wird in der Breite angepasst.
Dort verschiebe ich ein TRECT....

Der Vorteil ist das es jetzt nicht mehr Flimmert wenn der Scrollbalken mit der Maus Verschoben wird.

Entwerder ich mache mein Vorhaben so weitere in dieser Form aber mir währe es lieber wenn ich hier was Fertiges nehmen könnte. Das währe dann sichere und evlt. auch einfacher.

Ich hoffe ihr habt mein Ziel verstanden. Das ist im Moment nur ein Prototyp mit dem Ziel meine Möglichkeiten zu erkunden die ich habe.
MFG
Michael Springwald

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Beitrag von creed steiger »


pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Danke für den Link. Ich werde mir das mal genauer ansehen.

Sieht aber schon Intressant aus.
MFG
Michael Springwald

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: faststring auch unter Lazarus ?

Beitrag von charlytango »

Hallo!

du hast 2008 ein Frage zum Thema Faststrings gestellt
http://www.lazarusforum.de/viewtopic.php?f=10&t=1297&p=16074&hilit=faststring#p16074
konntest du das letztlich lösen ?

In FPC 3.0 und Lazarus 1.6 habe ich die gleichen Fehlermeldungen bei dem Versuch FastStrings zu benutzen.

Aktuell habe ich eine ähnliche Aufgabe und in Delphi 7 klappte das mit FastStrings hervorragend.
Nun sind wieder große HTML Files zu parsen und das auch noch in sehr großer Anzahl - da kommt es wesentlich auf das Tempo an.

Hättest du da einen Hinweis auf eine ultraschnelle Stringverarbeitung ?

Die Frage auch ans Forum: welche Komponenten zur Stringverarbeitung benutzt ihr wenn es sehr schnell gehen muss ?

LG

EDIT:
Leider kenne ich mich mit Assembler absolut nicht aus, aber ein anderer Code brachte mich auf die Idee an den neuralgischen Stellen etwas auszuprobieren.
Ich habe die Fehlerstelle

Code: Alles auswählen

[ESI]
lea ESI, ESI + 1 // hier kommt die Meldung
 

in eckige Klammern gesetzt:

Code: Alles auswählen

[ESI]
lea [ESI, ESI + 1]
 


und siehe da, es ließ sich kompilieren. Der Kompiler meckerte noch einige andere Stellen an, die ich ebenfalls mit eckigen Klammern versorgt habe.
Ich habe erstmal nur die Replace-Funktion getestet, aber die hat geklappt, also liegt die Hoffnung nahe dass die Faststrings Library sich in Lazarus verwenden lässt.

Trotzdem wäre ich durchaus zu einer offenen Diskussion über schnelle Stringverarbeitung bereit.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: faststring auch unter Lazarus ?

Beitrag von marcov »

charlytango hat geschrieben:
Nun sind wieder große HTML Files zu parsen und das auch noch in sehr großer Anzahl - da kommt es wesentlich auf das Tempo an.


Und wie viel ist es schneller mit über default mit resp D7, DXE 10 und Lazarus? Ist es unicode tauglich?

Es ist ja assembler Kode für antike Processoren, und Delphi Versionen ohne inline und unicode

Antworten