Thread skript läuft (leider) in endlosschleife (8 answers)
Opened by attax at 2010-11-20 21:42

topeg
 2010-11-20 22:51
#142946 #142946
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ohne es testen zu können würde ich meinen, dass es so funktioniert:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl
use strict;
use warnings;

my $path = '/media/sdb1/frames/neu/frames_20mb.dat';
my $dest = '/media/sdb1/frames/new/%u/cam.%u.%08u.jpg';

my $HEADER = "\xff\xd8";
my $FOOTER = "\xff\xd9";
my $RE_match_four_bytes = qr<\x55\x88([\x00-\x0b])\x10>;

my $data='';

{
  open( my $dh, '<', $path ) or die("ERROR open $path ($!)\n");
  local $/;
  # binäres lesen, keine Umwandulung von zeichen.
  binmode($dh);
  $data =<$dh>;
  close($dh);
}

# Man kann reguläre Ausdrücke nicht verschachteln
# und hoffen die Positionen im String erhalten bleiben.
# Jede neue Regexp setzt die Positionen im String zurück.
# man muss ein Match also in einer Regexp unterbringen,
# oder man benutzt die spezial Variable $' die alles nach einem Match enthält.
# Der Nachteil ist aber, dass das Script dadurch langsamer wird
# und viele Daten kopiert werden müssen.
my $count = 0;
while ($data =~ m/$RE_match_four_bytes.*?($HEADER.*?$FOOTER)/g)
{
  my $un = ord($1);
  my $image = $2;
  $count++;
  my $image_name = sprintf($dest,$un,$un,$count);
  if(open(my $fh, '>', $image_name))
  {
    print $fh $image;
    close($fh);
  }
  else
  { warn("ERROR save $image_name ($!)\n"); }
}

Ich habe auch ein paar andere Sachen geändert, die mir nicht gefielen.

View full thread skript läuft (leider) in endlosschleife