Frage von Nathan Schmid:Hallo ng
Ich möchte die gespeicherten Kanäle in WinTV einer Hauppauge PVR 250
auslesen. Diese sind aber in der Registry binär abgespeichert und ich
weiss nicht wie ich es parsen muss.
Hat jemand von euch eine Idee? Alle hexadezimalen Zeichen in Chars
zumzuwandeln hat mir nur den Sendernamen und die Beschreibung, nicht
aber die Sender Nummer gebracht. Zudem haben die Umlaute nicht gestimmt.
Hier ein Paar Datensätze:
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,04,01,00,16,54,e9,6c,e9,76,69,73,69,6f,6e,20,46,72,61,6e,e7,61,69,73,65,20,33,04,54,46,20,33,ff,01,01,01,00,01,01,01,01
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,05,01,00,15,53,63,68,77,65,69,7a,65,72,20,46,65,72,6e,73,65,68,65,6e,20,31,03,53,46,31,ff,01,02,01,00,01,02,01,01
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,06,01,00,1a,52,61,64,69,6f,20,54,65,6c,65,76,69,73,69,6f,6e,20,4c,75,78,65,6d,62,75,72,67,03,52,54,4c,ff,01,03,01,00,01,03,01,01
Liebe Grüsse
Nathan
PS: Wenn mir jemand sagen kann, wie es prinzipiell aufgebaut ist, bin
ich schon sehr dankbar. Niemand muss mir einen Parser schreiben :-)
--
Wegem SPAM ist meine Emailadresse mit ROT13 verschlüsselt.
Email: anguna.fpuzvq@tzk.arg
#!perl
$ ='anguna.fpuzvq@tzk.arg'; tr/a-zA-Z/n-za-mN-ZA-M/;print;
Antwort von Nathan Schmid:
Hallo ng
Ich möchte die gespeicherten Kanäle in WinTV einer Hauppauge PVR 250
auslesen. Diese sind aber in der Registry binär abgespeichert und ich
weiss nicht wie ich es parsen muss.
Hat jemand von euch eine Idee? Alle hexadezimalen Zeichen in Chars
zumzuwandeln hat mir nur den Sendernamen und die Beschreibung, nicht
aber die Sender Nummer gebracht. Zudem haben die Umlaute nicht gestimmt.
Hier ein Paar Datensätze:
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,04,01,00,16,54,e9,6c,e9,76,69,73,69,6f,6e,20,46,72,61,6e,e7,61,69,73,65,20,33,04,54,46,20,33,ff,01,01,01,00,01,01,01,01
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,05,01,00,15,53,63,68,77,65,69,7a,65,72,20,46,65,72,6e,73,65,68,65,6e,20,31,03,53,46,31,ff,01,02,01,00,01,02,01,01
01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,06,01,00,1a,52,61,64,69,6f,20,54,65,6c,65,76,69,73,69,6f,6e,20,4c,75,78,65,6d,62,75,72,67,03,52,54,4c,ff,01,03,01,00,01,03,01,01
Liebe Grüsse
Nathan
PS: Wenn mir jemand sagen kann, wie es prinzipiell aufgebaut ist, bin
ich schon sehr dankbar. Niemand muss mir einen Parser schreiben :-)
--
Wegem SPAM ist meine Emailadresse mit ROT13 verschlüsselt.
Email: anguna.fpuzvq@tzk.arg
#!perl
$ ='anguna.fpuzvq@tzk.arg'; tr/a-zA-Z/n-za-mN-ZA-M/;print;
Antwort von Heiko Rost:
Nathan Schmid schrieb:
>Ich möchte die gespeicherten Kanäle in WinTV einer Hauppauge PVR 250
>auslesen. Diese sind aber in der Registry binär abgespeichert und ich
>weiss nicht wie ich es parsen muss.
Im Zweifelsfall wissen das nur die Entwickler beu Hauppauge.
>Hat jemand von euch eine Idee? Alle hexadezimalen Zeichen in Chars
>zumzuwandeln hat mir nur den Sendernamen und die Beschreibung, nicht
>aber die Sender Nummer gebracht.
Die Sendernummern stehen dort auch nicht, da Du einen Sender in
verschiedenen Kanal-Suites an verschiedenen Plätzen abspeichern
kannst. So wie es aussieht, ist die Sendernummer in den Schlüsseln
unter HKLMhauppaugechannelssuites
an Position 0x0b
gespeichert.
>Zudem haben die Umlaute nicht gestimmt.
Falsche Codepage benutzt? So einfach wie zu DOS-Zeiten mit einer
ASCII-Tabelle ist es nicht.
Gruß Heiko
Antwort von Nathan Schmid:
Heiko Rost schrieb:
> Nathan Schmid schrieb:
>
>
>>Ich möchte die gespeicherten Kanäle in WinTV einer Hauppauge PVR 250
>>auslesen. Diese sind aber in der Registry binär abgespeichert und ich
>>weiss nicht wie ich es parsen muss.
>
>
> Im Zweifelsfall wissen das nur die Entwickler beu Hauppauge.
Nicht mit mir
>>Zudem haben die Umlaute nicht gestimmt.
>
>
> Falsche Codepage benutzt? So einfach wie zu DOS-Zeiten mit einer
> ASCII-Tabelle ist es nicht.
Doch war es :-) Ich hatte sonst irgendwie einen Fehler.
Ich habe die Daten nun so gelesen:
- Alles vor Zeichen 25 wegschneiden.
- Beschreibung lesen bis 1 Zeichen vor einem Zeichen kleiner als 10
(;hex).
- Kanalname lesen bis zum Zeichen 255
Kleiner keinesfalls effizienter Perl Code:
$hex =~ s/,//g;
my $msg = pack(;'H*',$hex);
my $long = '';
my $short = '';
my @chars = split //,$msg;
my $switch = 0;
for(;my $i$; $i <= $#chars; $i ) {
if (;ord(;$chars[$i]) <= 10) {
$switch = 1;
chop $short;
next;
}
if (;!$switch) {
$long .= $chars[$i];
} else {
$short .= $chars[$i];
}
last if (;ord(;$chars[$i]) == 255);
}
Die Kanalnummer lässt sich aus dem Namen des Registrywertes
herausfiltern in dem man alles bis auf die letzte Zahl wegschneidet.
Diese Kanalnummern werden für die Programmierung benötigt.
Gruss
Nathan
--
Wegem SPAM ist meine Emailadresse mit ROT13 verschlüsselt.
Email: anguna.fpuzvq@tzk.arg
#!perl
$ ='anguna.fpuzvq@tzk.arg'; tr/a-zA-Z/n-za-mN-ZA-M/;print;
Antwort von Heiko Rost:
Nathan Schmid schrieb:
>> Falsche Codepage benutzt? So einfach wie zu DOS-Zeiten mit einer
>> ASCII-Tabelle ist es nicht.
>
>Doch war es :-) Ich hatte sonst irgendwie einen Fehler.
seltsam, wenn ich vom Perlskript Télévision Française 3 im
Konsolenfenster ausgeben lasse, steht da "TÚlÚvision Franþaise 3"
>Ich habe die Daten nun so gelesen:
> - Alles vor Zeichen 25 wegschneiden.
> - Beschreibung lesen bis 1 Zeichen vor einem Zeichen kleiner als 10
> (;hex).
> - Kanalname lesen bis zum Zeichen 255
So geht es auch. Sauberer wäre, das Längenbyte vor Namen und
Beschreibung auszulesen und nur genau diese Anzahl von Zeichen zu
übernehmen.
>Kleiner keinesfalls effizienter Perl Code:
>...
Alternative:
use strict;
my $hex = "01,01,00,01,01,01,00,01,02,01,04,01,01,01,01,01,29,01,01,01,05,01,00,15,53,63,68,77,65,69,7a,65,72,20,46,65,72,6e,73,65,68,65,6e,20,31,03,53,46,31,ff,01,02,01,00,01,02,01,01";
$hex =~ s/,//g;
my $msg = pack(;'H*',$hex);
my $lbeschr = ord(;substr(;$msg,23,1));
my $beschr = substr(;$msg,24,$lbeschr);
my $lname = ord(;substr(;$msg,(;my $pname=(;23 $lbeschr 1)),1));
my $name = substr(;$msg,$pname 1,$lname);
print "Name: <$name> Beschreibung: <$beschr>
";
>Die Kanalnummer lässt sich aus dem Namen des Registrywertes
>herausfiltern in dem man alles bis auf die letzte Zahl wegschneidet.
Da habe ich den Begriff Kanalnummer fehlinterpretiert. Ich dachte Du
meinst das, was in der Konfiguration als Stationsnummer bezeichnet
wird.
Gruß Heiko