Programmierung

Textformatierung aus der Zwischenablage entfernen

14. Mai 2012 · Programmierung · andreas · Kein Kommentar

Die Funktionalität von stripClip, einem kleinen Utility zum Entfernen von Textformatierungen aus der Zwischenablage lässt sich - sofern sowieso ein Perl-Interpreter installiert ist - auch mit wenigen Zeilen Perl-Code realisieren:

stripclip.pl
use warnings; use strict; use Win32::Clipboard; my($text); my $clip = Win32::Clipboard(); do { $clip->WaitForChange(); if ($clip->IsText()) { $text = $clip->GetText(); $clip->Set($text); } } while ($text ne ':q');

Startet man das Skript mit ‘wperl.exe’ statt mit ‘perl.exe’, stört kein Fentser und das Skript lässt sich ohne Taskmanager durch Kopieren von ‘:q’ beenden.


Windows, Geplante Tasks, Perl und ARGV

29. März 2012 · Programmierung · andreas · Kein Kommentar

Ein logischer Grund ist nicht ersichtlich, aber während der “Geplante Task” beim Aufruf

c:\perl\bin\wperl.exe c:\meinskript.pl tollerparameter

den tollen Parameter ans Skript weiterreicht, wird mittels

c:\meinskript.pl tollerparameter

zwar das Skript aufgerufen, der Parameter kommt aber nicht an.


Module mit ppm aktualisieren

26. März 2012 · Programmierung · andreas · Kein Kommentar

Während die Aktualisierung der vorhandenen Module über die graphische Oberfläche von ppm zur Klickarie ausartet, hilft die Kommandozeile schnell und unbürokratisch:

ppm upgrade --install

wühlt sich vom ersten bis zum letzten installierten Modul und aktualisiert diese bei Bedarf.


Status von dialogbasierten Menüelementen in C++ ändern

28. Juli 2011 · Programmierung · andreas · Kein Kommentar

Während sich der Status eines Menüelements bei fensterbasierten Menüs problemlos mittels “Enable”, “SetCheck”, “SetRadio” oder “SetText” auf ausgegraut, mit Häkchen versehen usw ändern lässt, zeigen die gleichen Befehle bei dialogbasierten Menüs keine Wirkung.

void CTestDlg::OnUpdateTestProc(CCmdUI* pCmdUI) { pCmdUI->SetCheck(TRUE); // Bewirkt offensichtlich gar nichts. }

Im KnowledgeBase-Artikel “Q242577” erklärt Microsoft nicht nur, daß es sich hierbei um “This behavior is by design.” handelt, sondern auch, wie man das gewünschte Verhalten doch erreichen kann.


HTML-Dokumente zerlegen mit HTML::TreeBuilder

08. Juli 2011 · Programmierung · andreas · 1 Kommentar

Geht es um das Extrahieren von Informationen aus einem HTML-Dokument, so bietet sich Perl als “the Swiss Army chainsaw of programming languages” geradezu an und bietet unzählige Wege ans Ziel. Nicht nur gibt es die mächtige RegEx-Engine, auch im CPAN gibt es eine Vielzahl von Modulen, die für den Einsatzzweck geeignet scheinen.

Ein Modul, das ein gutes Verhältnis zwischen Aufwand und erzieltem Ergebnis verspricht, ist HTML::TreeBuilder, dessen Einsatz am Beispiel eines Flickr-Fotoalbums demonstriert werden soll:

Nach der Initialisierung des HTML::TreeBuilder-Objekts genügt ein Aufruf von “parse” oder wahlweise “parse_file” auf eine z.B. mittels “LWP::Simple” heruntergeladene Datei, damit der HTML-Tree zur weiteren Verarbeitung zur Verfügung steht.

$tree = HTML::TreeBuilder->new; $tree->parse($page);

Die einzelnen Thumbnails eines Albums sind bei flickr jeweils in ein “div”-Element eingebettet, dem die Klasse “thumb” zugewiesen ist.

<div class="thumb"> <span> <a title="..." href="..."> <img width="75" height="75" border="0" alt="..." src="..."> </a> </span> </div>

Um eine Liste aller Thumbnail-Elemente zu erhalten, genügt der Aufruf von “find_by_attribute” mit passenden Parametern

@urllist = $tree->find_by_attribute('class', 'thumb');

der den gesamten Dokument-Tree durchläuft und eine Liste aller Elemente mit Klasse “thumb” zurückliefert, die dann einzeln abgearbeitet werden können.

Die Links zu den jeweiligen Bilderseiten können dann über den Aufruf zweier weiterer Funktionen etxrahiert werden:

foreach $thumb (@urllist) { $link = $thumb->find_by_tag_name('a'); print $link->attr('href'); }

Der Aufruf von “find_by_tag_name” lokalisiert das Link-Element innerhalb des “div”-Elements, mittels “attr” kann auf dessen “href”-Attribut zugegriffen werden.

Das

Download (vollständige Beispielskript; RAR-archive; 0kB)

, das mittels

flickldr.pl http://www.flickr.com/photos/<werauchimmer>/sets/<wasauchimmer>/

aufgerufen wird, ist lediglich als Demo zur Verwendung von HTML::Template zu sehen und alles andere als ein zuverlässiger Downloader für Flickr-Alben. Neben fehlendem Fehlerhandling gibt es auch keinerlei Option(en) zur Wahl der Fotogröße - es wird einfach davon ausgegangen, daß alles wie gewünscht verfügbar ist.

Seit dem Relaunch von Flickr am 20. Mai 2013 können mit dem Skript keine Alben mehr heruntergeladen werden.