Software-Engineering Martin Fabiani

Kösener Weg 2, D-51103 Köln, Tel: 0221-94 65 72 17, E-Mail: info@fabiani.net, USt-IdNr: DE217298609

Downloads

(Sortierung von neu nach alt)

1. FindDuplicateFiles

Ein nettes kleines PerlTk-Script, das ich verwende, um doppelte Dateien in einem oder mehreren Verzeichnis(-bäumen) zu finden und zu löschen. Dabei kann man recht flexibel auswählen, welche der mehrfach vorkommenden Dateien man löschen will. Dieses Script läuft derzeit nur unter Win32 mit vollem Funktionsumfang , wobei ich versucht habe, die Win32-Funktionalität so zu kapseln (siehe MyApp::CommonFunc), damit man es auch einfach für andere Betriebssysteme erweitern kann.
Das Script verwendet die folgenden Perl-Module, die eventuell nicht standardmäßig mit Perl installiert werden: Tk (als graphische Oberfläche), Tk::ProgressBar (Fortschrittsbalken), Win32 (für Pfadmagie), Win32::Process (um eine Datei mit einem externen Programm öffnen zu können), Win32::FileOp (um die zu löschenden Dateien im Papierkorb ablegen zu können).

Download: FindDuplicateFiles_0.02.zip

2. Meine .emacs

Seit etwa 1998 verwende ich Emacs als Editor zum Entwickeln für Perl und weitere Programmiersprachen, auch HTML, vor allem unter den Betriebssystemen Windows, Linux, Solaris und AIX. Im Laufe der Zeit habe konnte ich diesen Editor immer besser an meine Bedürfnisse anpassen. Hier meine .emacs, die ich unter all diesen Betriebssystemen verwende (einfach entpacken, die Pfade und eventuell Zeilenenden anpassen und unter Unix/Linux ins Homedirectory stellen, und unter WindowsXP oder älteren Versionen nach c:\ oder z.B. unter Windows7 nach C:\Users\BENUTZERNAME\AppData\Roaming )

Download: strat_dot_emacs.zip

3. ExcelPerl (v0.13)

Excel-Dateien unter Windows mit Perl-Einzeilern bearbeiten.

Motivation: Ich verwende Excel häufig zur Datenanalyse oder zum Erstellen von Testdaten. Es gibt zwar viele hilfreiche Excel-Funktionen, aber für viele Aktionen kommt man um Makros nicht drum rum (z.B. direktes Ersetzen von Werten in einem Feld, vielleicht in Kombination mit regulären Ausdrücken). Ich kannte awk und perl -ane, mit denen man Textdateien verändern kann. Dann hörte ich von XLSPerl und fand es ein echt hilfreiches Tool. Da XLSPerl jedoch auf Spreadsheet::ParseExcel beruht, läft es zwar unter fast jedem Betriebssystem, kann jedoch Excel-Dateien nur lesen. Und ich fand es nervig, aus Excel-Dateien damit CSV-Dateien zu erzeugen, die dann wieder nach Excel zu importieren und dadurch eventuell eine Menge an (Format-)Informationen zu verlieren.

Da ich Excel schon häufiger mit gutem Erfolg über Win32::OLE ferngesteuert habe und mir das Excel-Objektmodell ein wenig vertraut war, entschloss ich mich während einer langweiligen Zugfahrt quer durch Deutschland, XLSPerl auf Basis von Win32::OLE nachzuschreiben, was das Tool zwar auf Windows-Betriebssysteme mit installiertem Excel beschränkt, dafür aber Dateien direkt editieren kann und mir auch Zugriff auf den "Rest von Excel" gestattet.

Wie bei perl -ane wird eine while-Schleife um das Kommando gelegt, und das Kommando wird für jede Zeile ausgeführt, wobei die einzelnen Werte der Zeile im Array @F zur Verfügung gestellt werden. Da es sich dabei um ein tied Array handelt, werden Änderungen an einem Element von @F auch direkt in der Excel-Datei geändert, z.B. die Spalte A in Großbuchstaben ändern:

excelPerl -ane "$F[0] = uc $F[0]" -f datei.xls

Zusätzlich steht das Array @C zur Verfügung, das die Win32::OLE-Objekte der einzelnen Zellen enthält und worüber der Zugriff auf die gesammte Funktionalität von Excel möglich ist, z.B. die Spalte B auf die Schriftart "Courier New" setzen:

excelPerl -ane "$C[1]->{Font}->{Name} = 'Courier New'" -f datei.xls

@F und @C kann man natürlich auch kombinieren.

Weiters gibt es seit V0.12 die Argumente -begin und -end, womit man Code angeben kann, der vor bzw. nach der Ausführung der while-Schleife ausgeführt wird, z.B.

excelPerl.pl -begin "use Text::CSV_XS; $csv = Text::CSV_XS->new( {sep_char => ';', binary => 1} )" -ane "$csv->combine(@F); print $csv->string, $/" -f datei.xls

oder:

excelPerl.pl -ane "$x{ $F[0] }++" -end "use Data::Dumper; print Dumper \%x" -f datei.xls

Die Veränderungen werden nicht automatisch gespeichert, sondern die Excel-Datei wird offen gelassen und man kann selbst entscheiden, ob man die Änderungen speichern will oder nicht. Durch diesen Weg ist es auch möglich, Dateien zu verändern, die gerade in Excel geöffnet sind, und man bekommt quasi eine Excel-Perl-Shell.

Weitere Informationen: siehe perldoc excelPerl

Download: excelPerl_0.13_source.zip: Die Zip-Datei entpacken und beide Dateien ins selbe Verzeichnis stellen. Wenn eine ActivestatePerl-Version größer gleich 5.8 installiert ist, sind keine weiteren Aktionen nötig, sonst müssen eventuell noch weitere Perl-Module installiert werden.

4. Tk-Mines

Ein kleines nettes Strategiespiel, das ich auf Anregung eines Bekannten hin gecoded habe:

Screenshot Tk-mines V0.02

Auf einem Brett sind eine bestimmte Anzahl von Minen verteilt, die man durch logisches Denkvermögen finden muß.

Zu Beginn sind die Inhalte aller Felder unbekannt (also mit ? markiert). Dabei hat man die Zahlen am Rahmen als Hilfe, die angeben, wie viele Felder jeweils zwischen zwei Minen(-gruppen) liegen. Durch einen Klick mit der rechten Maustaste kann man ein Feld auf ein '+' setzen, was bedeutet, daß hier eine Mine liegt (Achtung: man kann dieses Feld danach immer noch mit der linken Maustaste anklicken!!!). Wenn man überzeugt ist, daß ein Feld leer ist, kann man es durch einen Klick mit der linken Maustaste aufdecken.

Wenn es wirklich leer ist, wird es leer; falls man jedoch eine Mine angeklickt hat, ist das Spiel verloren (Eine Mine wird durch das Zeichen '*' dargestellt). In der Version 0.03 kommt ein wenig mehr an Farbe, und ein Feld, das man mit einem '+' als Mine markiert hat, muß erst wieder durch einen zweiten Rechtsklick entsperrt werden, bevor es auf einen Click mit der linken Maustaste reagiert.

In der Version V0.07 kam noch folgendes Feature hinzu: wenn man in einer Reihe oder Spalte (z.B. der Reihe 7,1) alle Minen markiert hat und dann auf ein Randfeld klickt (z.B. 7,1), dann werden alle Felder dieser Reihe (bzw. Spalte) aufgedeckt.

Version 0.08: diverse Bugfixes. Die Version 0.12 ist ein komplettes Rewrite und Redesign, und in der Version 0.13 kam eine externe Konfigurationsdatei hinzu (Tk-Mines.ini), und die sprachspezifischen Sachen wurden in externe Dateien ausgelagert ( derzeit Deutsch: Tk-Mines-language_de.txt und Englisch: Tk-Mines-language_en.txt)

Download:

5. Tk-Käsekästchen

Als mir meine siebenjährige Nichte Spiel Käsekästchen zeigte, habe ich mich aus Spaß mal hingesetzt und versucht, dieses Spiel mit Perl zu schreiben. Als graphische Oberfläche habe ich Tk verwendet. Ich habe dabei eine Menge über Perl/TK gelernt.

Dieses Spiel ist aber nur zufällig entstanden, da ich normalerweise keine Spiele schreibe. Meiner Meinung nach ist Perl selbst das ultimative Spiel:-)

Download: KaeseKaestchenV0.10.zip