Thread Hilfe für Regex (21 answers)
Opened by lousek at 2011-08-06 17:24

lousek
 2011-08-06 22:12
#151278 #151278
User since
2011-01-19
28 Artikel
BenutzerIn

user image
So, ich bin dem "Problem" auf der Spur:

Ich habe das Ganze nun mal umgeschrieben:
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
#!/usr/bin/perl

use strict;

use Text::Diff;

my @output;
my @db;
my @fs;
my $diff = diff ("test.txt", "test2.txt", { OUTPUT => \@output } );

print $output[0];

#while (@output) {
# my $item = shift(@output);
# if ($item =~ m/^\+\//) {
# $item =~ s/^\+\///;
# print $item;
# push (@db, $item);
# } elsif ($item =~ m/^-\//) {
# $item =~ s/^-\///;
# push (@fs, $item);
# }
#}

foreach my $dbitem (@db) {
print $dbitem;
}

foreach my $fsitem (@fs) {
print $fsitem;
}


Nun ist die Ausgabe des Text::Diff-Modules das Problem:
$output[0]:
Code: (dl )
1
2
--- test.txt	Sat Aug  6 16:23:57 2011
+++ test2.txt Sat Aug 6 16:22:59 2011


@output[1]:
Code: (dl )
@@ -15,7 +15,16 @@


@output[2]:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 /ho
/ho
/ho
-/ho
+/ho
+/ho
+/ho
+/ho
+/ho
+/ho
+/ho
+/ho
+/ho
+/ho
/ho
/ho
/ho


Somit ist nicht jedes Element des Arrays eine Zeile, sondern je nachdem ist ein Element mehrere Zeilen lang. Da diese Zeilen immer mit " /" anfangen und die Zeilen mit +/ und -/ nie zu Beginn eines Elementes stehen, liefert der Regex m/^ \// natürlich alle drei Varianten, wobei der Regex m/^\+\// und m/^-\// nichts zurückliefern.

Mir ist dieses Ausgabeformat etwas rätselhaft; falls jemand dazu Tipps hat, immer her damit :)

LG
lousek

View full thread Hilfe für Regex