![]() |
AW: ScriptEngine II (v. 0.5.5.0)
Neue Version :arrow: Version 0.5.5.0
Ich habe diesmal wieder einige Änderungen am Script-Code in der Script-System-Unit vorgenommen. Genauer gesagt habe ich die Convert-Klasse komplett neu geschrieben. Die Routinen "IntToStr", "IntToStrDef", usw. haben jetzt einen anderen Namen. Daher kann es zu notwendigen Anpassungen am Script-Quelltext kommen. Die Benutzung der Convert-Klasse ist nun komplett an .NET angelehnt. Um einen String z.B. in einen Integer umzuwandeln, schreibt man nun
Delphi-Quellcode:
. Die "ToInt32" gibt es dabei in sehr vielen überladenen Varianten, also z.B. für floats, strings mit Default-Wert, usw. Allgemein funktioniert die Konvert-Klasse wie folgt:
System.Convert.ToInt32('12345');
System.Convert.[Optional: Try]To[Ziel-Typ]([Quell-Typ]) wobei Ziel-Typ z.B. Int32, Int64, Single, Double, String, usw. ist. Als positiven Ausgleich dafür habe ich die Performance der RunTime nochmal verbessert. Dadurch konnte die Auführungszeit von Scripten um bis zu 30% gesenkt werden.
Download-Link ist im ersten Post. Grüße |
AW: ScriptEngine II (v. 0.5.5.0)
Im Indy+Thread Demo erhalte ich eine Fehlermeldung Could not add the unit "System.Xml" (Linie 5)
|
AW: ScriptEngine II (v. 0.5.5.0)
Du musst in der IDE die Packages "installieren". In den Packages sind die jeweiligen Units. Um das zu machen, musst du in der IDE im linken PageControl die Seite "Packages" öffnen. Dort sind alle "Package-DLLs" aufgelistet, die im Moment geladen sind. Einfach einen Rechtsklick und man kann weitere DLLs hinzufügen oder vorhandene entfernen. Um zu sehen, welche Unit in welchen Package ist, gibt es unten im PageControl mit den Seiten "Messages", "Debug Output", etc. einen weiteren Tab: "Registered Packages". Dort kann man sich dann alle Units der Packages anschauen.
Lange Rede, kurzer Sinn: füge im "Packages"-Tab die DLLs "libXML.dll" und "libIndy.dll" hinzu und schon sollte es gehen. :-) |
AW: ScriptEngine II (v. 0.5.5.0)
Zitat:
PS: ![]() |
AW: ScriptEngine II (v. 0.5.5.0)
Zitat:
Delphi-Quellcode:
program Project1;
uses System.Threading, System.Xml, Net.Indy; type { Feed Query Data } TFeedQuery = record private FURL : string; FUsesUTF8 : boolean; public class function Create(URL: string; UsesUTF8: boolean): TFeedQuery; property URL : string read FURL; property UsesUTF8 : boolean read FUsesUTF8; end; class function TFeedQuery.Create(URL: string; UsesUTF8: boolean): TFeedQuery; begin result.FURL := URL; result.FUsesUTF8 := UsesUTF8; end; type { Execution Thread } TMyExecution = class(TExecutionContext) private FData : string; FError : boolean; FQuery : TFeedQuery; protected procedure Execute; override; function ExtractTitles: string; public constructor Create(Query: TFeedQuery); virtual; end; constructor TMyExecution.Create(Query: TFeedQuery); begin inherited Create; FQuery := Query; end; function TMyExecution.ExtractTitles: string; var s: string; iStart, iStop: integer; tmp : string; begin s := Self.FData; iStart := s.IndexOf('<title>'); while iStart > 0 do begin iStop := s.IndexOf('</title>'); if iStop > 0 then begin tmp := XML.Decode(s.Copy(iStart + string('<title>').Length, iStop - iStart - string('<title>').Length)); if Self.FQuery.UsesUTF8 then result := result + StringEncoding.ToString(StringEncoding.AsUTF8(tmp)) + #13#10 else result := result + tmp + #13#10; s := s.Copy(iStop + string('</title>').Length); iStart := s.IndexOf('<title>'); end else iStart := 0; end; end; procedure TMyExecution.Execute; var http: TIdHTTP; begin http := TIdHTTP.Create; try http.HandleRedirects := True; try Self.FData := http.Get(Self.FQuery.URL); Self.FData := Self.FData .Replace(#10, #13#10); except on e: EException do begin Self.FError := True; Self.FData := e.ToString; end; end; finally http.Free; end; end; function SelectFeedSource(var Query: TFeedQuery): boolean; begin result := True; Console.WriteLine('Press [d] for Delphi, [s] for Spiegel, [h] for Heise, [esc] to cancel'); while true do begin case Console.ReadKey.ToUpper of 'D' : begin Query := TFeedQuery.Create('http://www.delphipraxis.net/external.php?type=RSS2', False); break; end; 'S' : begin Query := TFeedQuery.Create('http://www.spiegel.de/schlagzeilen/tops/index.rss', False); break; end; 'H' : begin Query := TFeedQuery.Create('http://www.heise.de/newsticker/heise.rdf', True); break; end; Strings.FromASCIIIndex(KeyCodes.Escape) : begin result := False; exit; end; end; end; end; { Main APP } var t : TThread; c : TMyExecution; Query : TFeedQuery; begin if not SelectFeedSource(Query) then exit; repeat Console.Clear; c := TMyExecution.Create(Query); try t := TThread.NewThread(c); try t.Start; Console.WriteLine('Connecting ' + Query.URL); Console.Write('Waiting '); while (t.State <> ThreadState.Finished) do begin Console.Write('.'); TThread.Sleep(100); TThread.Sleep(100); TThread.Sleep(50); end; Console.Clear; if c.FError then begin Console.ForegroundColor := Colors.Red; Console.WriteLine(c.FData); Console.ForegroundColor := Colors.White; end else Console.WriteLine(c.ExtractTitles); finally t.Free; end; finally c.Free; end; Console.WriteLine; if not SelectFeedSource(Query) then exit; until False; end. |
AW: ScriptEngine II (v. 0.5.5.0)
Wieso muss der Code so unschön sein?
Delphi-Quellcode:
{ Main APP }
: : begin while SelectFeedSource(Query) do begin : : end; end. |
AW: ScriptEngine II (v. 0.5.5.0)
Weil es meine Programmiersprache ist :mrgreen: (hast ja recht ...)
|
AW: ScriptEngine II (v. 0.6)
Neue Version :arrow: Version 0.6
Ist wurde mal wieder Zeit für einen größeren Versionssprung. Neu dabei ist unter anderem die for-in-Schleife, hier mal (wie immer) die Übersicht:
Download-Link ist im ersten Post. Grüße |
AW: ScriptEngine II (v. 0.6)
NICE (:
Freut mich zu hören, dass sich in der SE2 immer noch so viel tut. Weiter so (: wenn das hier jetzt facebook wäre, würde ich mal "gefällt mir" klicken ;) mfg Florian |
AW: ScriptEngine II (v. 0.6)
Zitat:
Oder einen Danke-Button wie in der EE. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz