Donnerstag, 17. Juni 2010

MP3-Infos in Ruby

Vor kurzem wollte ich aus MP3-Dateien programmatisch die Dauer des Musikstücks auslesen. Dazu habe ich eine Ruby-Bibliothek gefunden: ruby-mp3info (http://rubyforge.org/projects/ruby-mp3info/), auch verfügbar als Gem mit dem gleichen Namen.

Mithilfe dieser Bibliothek ist es ein Leichtes, die Spieldauer einer MP3-Datei zu ermitteln.

require 'rubygems'
require 'mp3info'
Mp3Info.open('test.mp3') { |mp3|
  p mp3.length
}

ruby-mp3info ist vollständig in Ruby geschrieben, sollte also auf jeder Plattform sofort lauffähig sein.

Mittwoch, 16. Juni 2010

rubyscript2exe-Problem

Die offizielle Version von rubyscript2exe läuft nicht ohne Weiteres unter Ruby 1.8.7. Es kommt ein TypeError, da das Skript $0 nicht modifizieren darf. Aber natürlich hat sich schon jemand des Problems angenommen und eine korrigierte Version von rubyscript2exe zur Verfügung gestellt: http://github.com/cowlibob/rubyscript2exe

Dienstag, 15. Juni 2010

Unicode-Umwandlungen auf der Kommandozeile

Manchmal habe ich UTF-8-kodierte Zeichen hexadezimal vor mir. Will ich dann das entsprechende Zeichen nachschlagen, ist das nicht so einfach, weil aus der UTF-8-Transformation die tatsächliche Zeichennummer nicht direkt ersichtlich ist. Aber mithilfe von Ruby lässt sich da was machen. So kann man die UTF-8-Darstellung in die entsprechende UTF-16-Fassung umwandeln:

ruby -rkconv -e "%|\xc2\xa0|.kconv(Kconv::UTF16, Kconv::UTF8).each_byte { |b| printf '%02X ', b }"

(Das gehört natürlich alles in eine Zeile.)

Vorne setze ich die UTF-8-Bytes ein (hier: \xc2\xa0), als Ergebnis erhalte ich die entsprechenden UTF-16-Bytes. Vertauscht man die Konstanten Kconv::UTF16 und Kconv::UTF8, so erhält man den umgekehrten Weg.

Das Ganze funktioniert so eventuell nur unter Ruby 1.8. Ruby 1.9 verarbeitet Zeichenketten jetzt mitsamt einer mitgeführten Kodierung, sodass die Beispiele vielleicht ganz anders aussehen müssten.

Samstag, 12. Juni 2010

RubyInstaller für Windows fertig

Die neue Version des RubyInstaller für Windows ist fertig (schon seit 6. Juni). So hat man auch unter Windows jetzt eine einfache Möglichkeit, an aktuelle Fassungen von Ruby 1.8.6, 1.8.7 und 1.9.1 zu kommen. Das sollte Ruby unter Windows neuen Auftrieb geben.

Freitag, 11. Juni 2010

Ausschnitte aus Zeichenketten

In Ruby kann man mit regulären Ausdrücken Teile aus Zeichenketten ausschneiden. Man setzt den regulären Ausdruck dazu in eckige Klammern. Nehmen wir folgendes Beispiel:

'Test123Test'[/\d+/]

Das Ergebnis ist die Zeichenkette '123', da der reguläre Ausdruck diesen Abschnitt selektiert. Mit diesem Konstrukt lassen sich manchmal sehr elegant Dinge erledigen.

Passt der reguläre Ausdruck nicht auf die Zeichenkette, so ist der Rückgabewert nil. So würde dieses Beispiel nil ergeben:

'Test'[/\d+/]

Samstag, 16. Januar 2010

Hexadezimale Darstellung von Zahlen

Um in Free Pascal Zahlen hexadezimal darzustellen, kann man die HexStr-Funktion nutzen. Zum Beispiel ergibt folgende Anweisung

WriteLn(HexStr(24, 2));

die Ausgabe 18. Dabei gibt der zweite Parameter die Zahl der Stellen an, die die erzeugte Zeichenkette haben soll. Wenn die Hexadezimalzahl weniger Stellen ergibt, so wird links mit 0 aufgefüllt. HexStr(7, 2) würde also '07' als Ergebnis liefern.

HexStr befindet sich in der Unit System.

Samstag, 9. Januar 2010

Separatoren in Lazarus-Menüs

Um in Lazarus in einem Menü einen Trennstrich (Separator) unterzubringen, erzeugt man einfach einen normalen Menüeintrag und trägt als Caption ein Minuszeichen ein. Dieser Eintrag wird dann zur Laufzeit als Separator angezeigt.