Thread Datei durchsuchen, älteste Einträge löschen! (2 answers)
Opened by yasukatakaya at 2008-09-11 13:57

topeg
 2008-09-11 19:17
#114544 #114544
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Mal kurz was zusammen gepfuscht:
Um Speicher zu sparen merke ich mir die Position in der Datei und nicht die Zeile selber.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl

use strict;
use warnings;
use Time::Local;
use Date::Calc qw(Day_of_Year);

my @found=();

# position in der datei bestimmen
my $pos_in_file=tell(DATA);
while(my $line=<DATA>)
{
  # zeile zerlegen
  my @l=split(/\|/,$line);
  # datum/zeit zerlegen
  my @t=split(/[\.:]/, $l[3].".".$l[2]);
  # timestamp bilden
  my $ts=timegm($t[2],$t[1],$t[0],$t[3],$t[4]-1,$t[5]-1900);
  # tag im jahr finden
  my $doy=Day_of_Year($t[5],$t[4],$t[3]);

  # zeile testen
  my $add=1;
  for my $i (reverse(0..$#found))
  {
    my @f=@{$found[$i]};
    if($f[0] eq $l[1] and $f[2] == $doy)
    {
      $add=0;
      if($f[1] >= $ts)
      {
       splice(@found,$i,1);
       $add=1;
       last;
      }
    }
  }
  # zeile hinzufügen wenn alles ok
  push(@found,[$l[1],$ts,$doy,$pos_in_file]) if($add);

  $pos_in_file=tell(DATA);
}

# das ergebnis ausgeben
for my $p (@found)
{
  seek(DATA,$p->[-1],0);
  my $line=<DATA>;
  ### AUSGABE: ###
  print $line;
}
__DATA__
|9507042402|23.06.2008|18:17:40|PASS|1|1|1|63.92762|46.3626594543457|||
|9507042402|23.06.2008|18:18:49|FAIL|1|1|1|63.36795|46.3676109313965|||
|9507042402|23.06.2008|18:28:39|FAIL|1|1|1|63.36795|46.3676109313965|||
|9507164212|23.06.2008|18:52:35|FAIL|1|1|1|75.30767|46.3609733581543|||
|9507164212|23.06.2008|18:46:14|PASS|1|1|1|63.37932|46.3660926818848|||
|9507164215|23.06.2008|18:51:05|FAIL|1|1|1|66.22319|46.3735771179199|||
|9507164208|23.06.2008|18:27:28|PASS|1|1|1|70.04309|46.3699073791504|||

View full thread Datei durchsuchen, älteste Einträge löschen!