Thread In while Schleife vorherige Zeile ermitteln (4 answers)
Opened by Mat at 2011-08-31 17:04

Linuxer
 2011-08-31 23:00
#151987 #151987
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Ich verstehe Deine Angaben nicht so ganz. So habe ich es eingangs verstanden.

  • Du liest einen Datenstrom zeilenweise
  • Jede Zeile ist in Felder aufgeteilt
  • Wenn das Feld "Message" der aktuellen Zeile nicht in den letzten 10 Zeilen enthalten war, darf es ausgegeben werden
  • Wenn doch, soll die Message nicht ausgegeben werden
  • Es können immer noch doppelte "Messages" in der Ausgabe auftauchen, wenn sie im originalen Datenstrom mehr als 10 Zeilen auseinander liegen



Mein Lösungsansatz:
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
#...

# Datenstrom zeilenweise lesen
while ( my $line = <DATA> ) {

    # Felder auftrennen (zum Testen vereinfacht und Zeilenumbruch rausgeworfen) 
    my ( $start, $message ) = split /::|\n/, $line;

    # Feld "Message" wird nur ausgegeben, wenn es NICHT in den letzten 10 Zeilen enthalten war
    # Zur Kontrolle geben wir auch mal die letzten 10 "Message"s aus
    # und auch die Nummer der aktuellen "Message"
    print "$start : $message | @messages\n" 
      unless grep { $message eq $_ } @messages;

    # aktuelle "Message" merken
    push @messages, $message;

    # aelteste "Message" loeschen, wenn es mehr als 10 geworden sind (FIFO)
    shift @messages       if 10 < @messages;
}

__DATA__
01::Anton
02::Berta
03::Caesar
04::Berta
05::Berta
06::Caesar
07::Berta
08::Berta
09::Caesar
10::Berta
11::Berta
12::Caesar
13::Berta
14::Berta
15::Caesar
16::Berta
17::Berta
18::Caesar
19::Berta
20::Dora
21::Berta
22::Caesar
23::Berta
24::Dora
25::Berta
26::Caesar
27::Berta
28::Dora
29::Berta
30::Caesar
31::Berta
32::Dora
33::Anton

Last edited: 2011-08-31 23:07:04 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread In while Schleife vorherige Zeile ermitteln