Thread Text blockweise parsen
(9 answers)
Opened by Lauvia at 2014-03-21 11:07
Hallo Renee,
vielen Dank für den Code! wie wäre dann der reguläre Ausdruck um Frame Namen einzufangen? ich konnte sie in einem anderen Skript mit Code (perl): (dl
)
($frame_name) = $line =~ /^FRAME\s+NAME:\s+.*?[\(|\[]([A-Z]+_[A-Z]+(?:[_ A-Z 0-9]+)?)[\)|\]|\,]/; kopieren so habe ich es gemacht: 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 !/usr/bin/perl use strict; use warnings; use Data::Dumper; my $file = 'test.txt'; my @added_frames; my $line; { open my $fh, '<', $file or die "$file: $!"; # change block separator to have one complete frame # read per iteration local $/ = "\nFRAME NAME:"; # read the blocks while ( my $frame = <$fh> ) { next if $. == 1; # skip the "header" chomp $frame; # remove block separator (my $frame_name) = $line =~ /\s+([A-Z]+_[A-Z]+(?:[_ A-Z 0-9]+)?)[\)|\]|\,]/; print"\nmy frame name: $frame_name\n\n"; foreach $AddedFrame(@added_frames) { if($frame_name eq $AddedFrame) { if(($line =~ /::::0x/ and $line =~ /\(/) and ($line =~ /\_FA,/ or $line =~ /\_A,/)) { if($line =~ /FREI/ or $line =~ /ID2\)/) #ignore lines with "FREI" or "(ID2)" {} else { ( $_, $line) = split(/\(/,$line); #selects string after the opened bracket ( $_, $line) = split(/\)/,$line); #from the selected string, selects the one before the closed bracket @array = split(/, /,$line); print $out_dir $_, ";", "$array[1]\n"; #$countPar = $countPar +1; #count the number of mapping <internal variables> to <INCA variables> } } } } # print the frame print "This is a frame:\n", '=' x 30, "\n", $frame, "\n", '=' x 30; } close $fh; } Das Ziel wäre dann die in die Konsole eingegebenen Frame Namen (Bsp: DT_PT_1) in einzelnen Blöcken aussuchen. Wenn es macht, dann die Signale extrahieren. Kann sein, dass es 2x macht (DT_PT_1) eimal ohne ::::0x-Block und das 2.mal mit. Dann nur den Block mit ::::0x extrahieren. |