Sqlite: Numerische Prüfungen

Schön in Sqlite ist, dass Typkonvertierungen/Casting relativ selbstständig und automatisch abgehandelt wird. Es gibt jedoch Situationen, in denen es notwendig ist, festzustellen, ob z.B. die Werte in einer Textspalte numerisch sind. Eine „IsNumber“ oder „TO_NUMBER“ Funktion zum Überprüfen auf einen Zahlenwert fehlt. Wenn es um Zahlen in Textfragmenten geht kann diese Funktion „Prüfen ob Zahl“ einfach nachgebildet werden: lower(spalte) = upper(spalte). Eine weitere Prüfung kann mit abs(x) oder round(x,y) durchgeführt werden.

Die Resultate anhand von einigen Beispielen. Zugrundegelegt wird die Tabelle „table1“ mit einem Feld „f1“  (char[99]).

Der Tabelleninhalt (select * from table1):

NoNumber
1
55
66,123
66.123
01.12.2011
BitBumper123
123BitBumper
0
?

Ein Select liefert die möglichen Funktionen zur Nullbestimmung in dieser Übersicht:

select  round(f1),  round(f1,99), abs(f1),  abs(f1)<>0,   f1=0, upper(f1)=lower(f1), * from table1

RecNo

round(f1)

round(f1,99)

abs(f1)

abs(f1)<>0

f1=0

upper(f1)=lower(f1)

f1

1

0

0

0

0

0

0

NoNumber

2

1

1

1

1

0

1

1

3

55

55

55

1

0

1

55

4

66

66

66

1

0

1

66,12

5

66

66.123

66.123

1

0

1

66.123

6

1

01.12.11

01.12.11

1

0

1

01.12.11

7

0

0

0

0

0

0

BitBumper123

8

123

123

123

1

0

0

123BitBumper

9

0

0

0

0

1

1

0

10

0

0

0

0

0

1

?

Eine nicht perfekte aber immerhin für viele Fälle hinreichende Variante liefert also die Kombination von upper/lower mit abs:

select f1 from table1 where (abs(f1)<>0 or f1=0) and (upper(f1)=lower(f1))

 

f1

1

55

66,12

66123

01.12.11

0

Der Datumseintrag wird als Zahl erkannt, was nicht in jedem Fall gewünscht sein dürfte.

 

Vervollständigung des Compiler-Portfolios

Mit ersten Referenzprojekten können wir nun auch Projekte basierend auf dem GNU C++ Compiler anbieten.
Als Zielplattformen kommen Windows, Linux oder auch Systeme mobiler Plattformen wie iPhone/iOS oder Android in Betracht: Speziell in Fällen, in denen eine sehr hohe Performance gefragt ist. Als IDE verwenden wir Eclipse und Code::Blocks.

Lazarus unter Ubuntu in VMWare

Sammlung zu Informationen zum Betrieb von Lazarus auf Ubuntu 11.04 in VMWare.

Anmerkung:

Direkt nach der Installation von Ubuntu wird darauf hingewiesen, dass Unity auf diesem System nicht läuft und beim Anmelden „Classic“ (=Gnome) gewählt werden soll. Gerne.

Tätigkeiten nach dem ersten Start

Über die Taskleiste wird angeboten die VMWare Client Tools zu installieren. Dies wird ausgeführt.

Der Update-Manager wird automatisch gestartet: Es werden eine Reihe von Updates installiert.

Über „System|Administration|Language“ Support wird die Deutsche Lokalisierung geladen.

Anschließend ist das System installiert und der erste Snapshot wird erstellt – sicher ist sicher.

Über „Anwendungen|Ubuntu Software Center -> Integrierte Entwicklungsumgebung -> Lazarus“ wird die IDE installiert.

Beim ersten Start:

„Das aktuelle Free Pascal-Quelltextverzeichnis „/usr/share/fpcsrc/2.4.0/“ sieht nicht richtig aus.
Mit „OK“ wählen Sie die Voreinstellung „“.
Sonst überprüfen Sie Einstellungen -> Umgebungseinstellungen -> Dateien“

Beim ersten Versuch wurde mit „OK“ das Verzeichnis auf „“ gesetzt: Keine gute Idee: Nach der anschliessenden manuellen Neuinstallation des FPC und der FPC-Sourcen hat gar nichts mehr gepasst.

Nun wird also „Übergehen“ gewählt.

Es soll zunächst versucht werden, ob zumindest der Compiler läuft und die Grundeinstellungen passen: Also direkt „F9“ zum Starten des (leeren) Default-Projektes.

Meldung erscheint: „Debugger. Initialization output: =thread-group-added,id=“i1“.

Anwendung läuft. Alles ok.

Beim ersten Editierversuch durch Doppelklick auf das Formular dann jedoch eine Fehlermeldung:

„Fehler in TDefaultComponentEditor“:

„Der Komponenteneditor hat einen Fehler erzeugt: „Kann die Methode nicht finden. Bitte beheben Sie den im Meldugnsfenster gezeigten Fehler.“

Dieser wird als „Quelltext nicht gefunden: Unit /usr/lib/fpc/2.4.0/units/i386-linux/fcl-base/gettext.ppu“ angezeigt.

Interessanterweise ist diese Datei vorhanden.

Beim Überprüfen der allgemeinen Pfadangaben wird jedoch festgestellt, dass der oben schon genannte Pfad nicht existiert:  /usr/share/fpcsrc/$(FPCVER)/

Die Eintragung innerhalb der Programmeinstellungen unter FPC-Quelltextverzeichnis sind also richtig und gut gemeint – aber die Quellen sind dort schlicht noch nicht vorhanden.

Über den Konsolenbefehl

sudo apt-get install fpc-source

werden die Quellen installiert.

Da die   /usr/lib/fpc/2.4.0/units/i386-linux/fcl-base/gettext.ppu Datei trotzdem nicht gefunden wird, wird einfach dieses Pakte erneut installiert:

sudo apt-get install fp-units-i386

Anschließend läuft alles perfekt.

 

Zusammenfassung:

Lazarus ist unter /usr/lib/lazarus/0.9.28.2/ installiert.

Der Compiler liegt in /usr/bin/fpc.

Die Quellen liegen unter /usr/share/fpcsrc/2.4.0/

 

 

 

Windows 7 Umstieg: Startmenü

Nach dem Umstieg auf Windows 7 gefällt einiges – einiges wird jedoch schmerzlich vermisst:

Das Startmenü ist nun wohl eher für „Einfache“ Benutzer konzipiert. Wirkliche „Profis“ verzweifeln, vor allem wenn man sehr viele Programme installiert hat:

  • Shortcuts nur für Programme, nicht jedoch für Elemente im Startmenü. Überhaupt keine optimierte Tastaturbedienung.
  • Keine eigenen Menüeinträge in Ordnerform, welche sich direkt im Startmenü in Unterordner expandieren lassen.
  • Keine elegante Gruppierungsmöglichkeiten von Programmgruppen.
  • Suchergebnisse bei direkter Programmnamenseingabe stimmt oft erst, nachdem der Programmname komplett eingegeben wurde.

Es scheint schon vielen intensiven Nutzern so gegangen zu sein: Inzwischen tummeln sich einige Programme, welche das Windows Startmenü oder die Toolbar durch innovativere Programme ersetzten.

Die ersten getesteten Programme…

…konnten leider nicht überzeugen:

Entweder keine vernünftige Bedienung per Tastatur, keine gute Konfigurationsmöglichkeit, oder einfach nicht ausgereift.

Eine wirklich gute Alternative zum Startmenü wurde dann auf Sourceforge gefunden:

Das Projekt Classic Shell ist wirklich gelungen: Einfache Bedienung, hohe Konfigurationsmöglichkeit und eine stabile Anwendung.

Auch auf der Seite zu finden: Eine große Übersicht anderer, ähnlicher Projekte.

Nur schade, dass Google bei der Eingabe entsprechender Begriffe erstmal zig andere, wesentlich ungeeignetere Links zum Thema liefert und die Classic Shell nicht wirklich gleich gefunden wird.

 

Delphi Compiler zeigt falsche Zeilen an

Beim Compilieren alter Delphi Quellen ist ein eigenartiges Problem aufgetaucht:  

Der Compiler zeigt Compilierungsfehler in der Quelldatei nicht in der Zeile mit dem Fehler an, sondern um einige Zeilen versetzt in einer syntaktisch korrekten Zeile. Die Compilerfehlermeldung kann dann mit der falschen Zeilennummer nicht korrekt zugeordnet werden.

Ursache des Problems: Die Quelldatei wurde vermutlich zwischenzeitlich auf Linux editiert: Die Zeilenumbruchsequenzen entsprechen nicht mehr CR/LR sondern vermutlich CR oder LF/CR: Der Compiler scheint mit dieser Eigenheit nicht klar zu kommen.

Lösung des Problems:

Wir haben einen kleinen Dateiparser/Konverter entwickelt: Mit diesem können uneinheitliche Sequenzen bereinigt werden.

Bei Interesse kann das Programm weitergegeben werden.

 

PlusTek DI Capture

Infos zum Dokumentenmanagementsystem "DI Capture", welches mit den PlusTek Dokumentenscannern ausgeliefert wird:

Es liegt keine wirkliche Datenbank unter dem System – die Daten werden wie folgt gespeichert:

Baumstruktur in der Registry: 

HKEY_CURRENT_USER\Software\DI Capture

(HKEY_CURRENT_USER\Software\DI Capture\DB_DICapture enthält die Daten des Baums)

HKEY_LOCAL_MACHINE\SOFTWARE\DI Capture

Die Scan-Daten selbst sind dann unter 

C:\Dokumente und Einstellungen\All Users\Dokumente\DI Capture

gespeichert.

Ein Backup/Restore über verschiedene Rechner hinweg hat meisst zu einem Programmabsturz geführt: Einfacher ist es daher, einfach die Registryeinträge sowie die Dateien direkt zu kopieren.

 

Umbau BDE -> Zeos

Einige Projekte aus vergangenen Tagen wurden unter Verwendung der Borland Database Engine (BDE) implementiert.

Weiterentwicklungen dieser Projekte werden künftig auf die Open Source Bibliothek Zeos portiert: Dies garantiert auch weiterhin einen reibungslosen Betrieb der Software, auch unter aktuellsten Betriebssystemen.

Weiterführende Informationen zur BDE und möglicher Portierungen finden sich auf Kyle Cordes Homepage.