Hallo,
foreach ($bitField =~ /.{8}/g) {
# alle anderen Faelle $dez = hex($_);
# erster Teil, die ersten zwei Bits subtrahieren $dez = hex($_) - 3221225472 if ($m == 0);
# letzter Teil, die letzten zwei Bits subtrahieren $dez = hex($_) - 196608 if ($m == 11);
$bin = unpack("B32", pack("N", $dez)); $bit = $bit . $bin; $n++; $m++; }
Das Konstrukt benoetigt ca 30 sec. Geht das nicht schneller? Ich finde die folgenden zwei Zeilen umstaendlich. $dez = hex($_); $bin = unpack("B32", pack("N", $dez));
Ich bin kein Experte darin, wie man Perl dazu bekommt, möglichst schnell zu laufen. Aber ich würde mutmaßen, dass ein direktes (zifferweises) Umrechnen ('0' -> '0000', '1' -> '0001' usw) schneller gehen müsste. Das Subtrahieren müsste man dann wohl per Hand machen. Oder man behandelt die ersten und letzten acht Ziffern mit der alten Methode.
2.) In den Access-DB existiert eine Tabelle mit saemtlichen Tagen im dem Zeitraum. Aus den oben ermittelten Werten soll jetzt eine Tabelle erzeugt werden, in der zu jedem Ereigniss fuer jeden Tag an dem es stattfindet, eine Zeile erzeugt werden soll. Ziel ist, alle Ereignisse aus der DB auszulesen, die an einem bestimmten Tag stattfinden. Damit haette die Tabelle im unguenstigsten Fall 365(Tage)*180.000 Zeilen, also ca 65.700.000 Zeilen. Meine Loesung funktioniert zwar, jedoch dauert das natuerlich ewig. Vorallendingen muss der ganze Krempel ja auch in die DB geschrieben werden. Faellt Euch dazu eine bessere Loesung ein?
Mmh, wäre es vielleicht möglich, das ganze mit C (o.ä.) zu machen. Sollte nicht allzu aufwendig werden, weil die Strings ja immer gleich lang zu sein scheinen. Viele Grüße, Jürgen PS: Hilft "use integer;"?