Thread while-Schleife mit Bedingung als RegEx und Start von foreach-zeiger? (9 answers)
Opened by bandchef at 2014-08-04 14:38

bandchef
 2014-08-05 10:37
#176720 #176720
User since
2014-05-05
15 Artikel
BenutzerIn
[default_avatar]
Naja, also "unbedingt" will ich keine foreach haben. Mir ist das egal hauptsache es funktioniert :D

Durch das elsif Stelle ich durch eine RegEx fest, ob ein gewisser Teil in der Zeile steht. mit der while will ich eigentlich im Argument der while Schleife nur weiterschalten, wenn der gewisse Teil der nachfolgenden Zeile mit dem gewissen Teil der vorhergehenden Zeile übereinstimmt.

Irgendwie kapier ich aber nicht, wie ich das machen soll...


Hier mein Beispiel:

Code: (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
61
62
63
while($fileLineZF = <ZFFILE>)
{
if(($fileLineZF =~ /^F\s+.*FktTyp=CopTel\s+DBus=(\S+)\s+DTel=$DestID\s+Snd=Y\s*$/)) #check CopTel-Messages
{
print $fileLineZF;
$zfCounterFound++;

$DBusZF = $1;
#$zfCounterFound = 0;

if($DBusZF eq "D_CAN") #D-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_DCAN_CAN1 += 50;
}
elsif($DBusZF eq "Body-CAN") #Body-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_BodyCAN_CAN2 += 50;
}
elsif($DBusZF eq "Body2-CAN") #Body2-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_Body2CAN_CAN3 += 50;
}
elsif($DBusZF eq "FA-CAN") #FA-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_FACAN_CAN4 += 50;
}
elsif($DBusZF eq "IuK-CAN") #IUK-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_IUKCAN_CAN5 += 50;
}
elsif($DBusZF eq "ZSG-CAN") #ZSG-CAN
{
#print "TEST: $DBusZF\n";
$numOfMessages_ZSGCAN_CAN6 += 50;
}
}


elsif($fileLineZF =~ /^F\s+.*FktTyp=CopSig\s+DBus=(\S+)\s+DTel=(\d+)\s+Snd=Y\s*$/) #Check CopSig-Messages
{
#Konzept:
#Zeilen-Pointer übernehmen und so lange weiterzählen lassen, bis wir auf eine
#neue Zeile stoßen, oder das DTel nicht mehr mit den vorhergegangen DTels übereinstimmt.
#Wenn neue Zeile kommt und alle DTels bis dahin gleich waren, dann die Nachricht zählen;
#ansonsten abbrechen

$predDTel = $2;
next;
while($fileLineZF = <ZFFILE>)
{
$fileLineZF =~ /^F\s+.*FktTyp=CopSig\s+DBus=(\S+)\s+DTel=(\d+)\s+Snd=Y\s*$/
$currDTel = $2
if(predDtel eq currDTel)

}

}
}


modedit Editiert von pq: vollzitat entfernt
Last edited: 2014-08-05 10:49:12 +0200 (CEST)

View full thread while-Schleife mit Bedingung als RegEx und Start von foreach-zeiger?