Dienstag, 24. Mai 2011

FPC: Auffüllen einer Zahl mit Nullen

Bei der Umwandlung von Ganzzahlen in Zeichenketten wird manchmal gewünscht, dass nach links bis zu einer bestimmten Länge mit Nullen aufgefüllt wird. Das lässt sich in Free Pascal mit der Funktion AddChar aus den StrUtils lösen. Ein Beispiel:

AddChar('0', IntToStr(123), 12)

Dieser Aufruf hätte die Zeichenkette »000000000123« zum Ergebnis. Man gibt also das Zeichen, mit dem aufgefüllt werden soll, an, dann die Zeichenkette, dann die gewünschte Länge.

Mittwoch, 11. Mai 2011

FPC: Ungenauigkeiten bei MinutesBetween

MinutesBetween (aus DateUtils) liefert manchmal ein Ergebnis, das um 1 vom erwarteten Ergebnis abweicht. So kann der Unterschied zwischen zwei TDateTime-Werten, die genau eine Minute auseinanderliegen, von der Funktion auch mal mit 0 angegeben werden. Der Grund dafür liegt in der üblichen Ungenauigkeit von Fließkommaoperationen.

Genauer ist nach meinen Erfahrungen in der Regel folgende Konstruktion:

Round(MinuteSpan(t1, t2))

Dabei sind t1 und t2 eben zwei TDateTime-Werte. Hier ist allerdings der aktuelle Rundungsmodus zu beachten, der von Round benutzt wird.

Mittwoch, 6. April 2011

Formatierung von Fließkommazahlen

Allgemein bekannt dürfte sein, dass Fließkommazahlen bei der Ausgabe mit Write(Ln) durch Angabe von Feldbreite und Anzahl der Nachkommastellen formatiert werden können. Diese Angaben werden mit Doppelpunkten an den auszugebenden Wert angehängt. Zum Beispiel liefert

WriteLn(1.234:4:2);

die Ausgabe 1.23. Das Ausgabefeld ist dabei vier Zeichen breit, die Anzahl der Nachkommastellen 2.
Möchte man den gleichen Mechanismus nun nicht direkt für die Ausgabe verwenden, sondern das Ergebnis als Zeichenkette haben, so lässt sich das auch bewerkstelligen. Hierzu verwendet man die Str-Prozedur. Wenn s eine String-Variable ist, so lässt sich darin die formatierte Zahl so abspeichern:

Str(1.234:4:2, s);

Samstag, 13. November 2010

MD5-Summen in Free Pascal

Free Pascal bringt eine Bibliothek mit, die das Erstellen von MD5-Summen sehr einfach macht. Man bindet die Unit MD5 ein und kann dann folgendes schreiben:

s := MD5Print(MD5String('Hallo, Welt!'));

s ist dabei ein String. MD5String erzeugt aus einem Eingabe-String (hier »Hallo, Welt!«) einen Wert vom Typ TMD5Digest. Dieser wird dann von MD5Print in den Ausgabe-String umgewandelt. Möchte man die MD5-Summe über eine ganze Datei bilden, so steht statt MD5String auch MD5File zur Verfügung.

Samstag, 30. Oktober 2010

Viele Fenster in der Lazarus-IDE

Unter Ubuntu (und vermutlich auch anderen Linux-Distributionen) öffnet Lazarus viele eigenständige Fenster. Jedes hat einen Eintrag in der Leiste am unteren Bildschirmrand, das die laufenden Applikationen listet. Da kann es dann schon mal eng werden. Abhilfe schafft es hier, Lazarus einfach auf einer eigenen Arbeitsfläche (Desktop) zu starten. Standardmäßig öffnet Ubuntu ja gleich zwei davon – einen, auf dem ich normalerweise arbeite, und einen zweiten, den ich für Lazarus nutzen kann.

Dienstag, 13. Juli 2010

wxRuby unter Ubuntu 10.04

Unter Ubuntu 10.04 funktioniert das normale wxRuby-Gem in der Version 2.0.1 leider nicht. Es lässt sich zwar installieren, aber es lässt sich dann nicht laden. Man kann aber hier eine Version herunterladen, die für Ubuntu kompiliert wurde. Man wechselt dann in das Verzeichnis, in dem man die gem-Datei abgespeichert hat, und gibt ein:

sudo gem install wxruby-2.0.1-x86-linux -l

Auf diese Weise erreicht man die Installation der lokal vorgehaltenen gem-Datei.

Freitag, 25. Juni 2010

ocra statt rubyscript2exe

Ein weiteres Problem ist mir im Zusammenhang mit dem neuen RubyInstaller für Windows und rubyscript2exe aufgefallen. rubyscript2exe kann keine Module einbinden, die per rubygems geladen werden, da die mit dem neuen RubyInstaller ausgelieferte Version von rubygems nicht mit rubyscript2exe kompatibel ist.

Eine Lösung für rubyscript2exe habe ich diesmal nicht gefunden. Empfohlen wird der Umstieg auf zum Beispiel ocra. Das ist nicht schwer:

gem install ocra

Danach kann man folgendermaßen sein Programm packen:

ocra myscript.rb

Um eine Anwendung ohne Kommandofenster zu erzeugen (also eine, die über rubyw läuft), lautet das Kommando so:

ocra --windows myscript.rb

Von der oben verlinkten Seite aus gelangt man auch zur Dokumentation von ocra, die weitere Optionen erklärt.

Anzumerken ist, dass Programme, die auf wxRuby basieren, mit ocra sehr viel kleinere EXE-Dateien ergeben als mit rubyscript2exe. Schön!