Vergleichen von 2 Array/String/Texten (u.Änderungen aufzeigen)
Lavender
- perl
Hallo zusammen,
ich muss 2 Texte auf Änderungen vergleichen (wie diff unter Linux) d.h. die Änderungen auch mit + bzw. - aufzeigen.
Gut funktioniert u.g. Script - allerdings kann ich damit gar nichts anfangen, da ich nicht weiß, wie ich die Dumper-Werte weiter verarbeiten soll/kann (es gibt $VAR1=... zurück, will ich diese Variable aber nutzen, steht sie nicht zur Verfügung...).
Außerdem stört mich die Ausgabe:
$VAR1 = [ [ '-', 'ist' ], [ '-', 'text' ], [ '+', 'Text' ], [ '+', '.' ] ];
Ich brauche eigentlich
@diff=('-|ist','-|text'...)
aber immer wenn ich etwas an der map Zeile änder funktioniert gar nichts mehr...
Kann mir bitte jemand weiterhelfen und evtl. das Script anpassen oder mir sagen, wie ich das diff Problem sonst lösen kann (das Diff Modul steht nicht zur Verfügung)
Vielen Dank im Voraus.
Viele Grüße
Lavender
Hier das Script:
#!/usr/bin/perl
use Data::Dumper;
my (%ha, %hb);
my @a = ('dies','ist','ein','test','text','');
my @b = ('','dies','','ein','Text','test','.');
@ha{@a} = (1) x @a;
@hb{@b} = (1) x @b;
my @diff = ( (map { ['-', $_] } grep { !($hb{$_}) } @a),
(map { ['+', $_] } grep { !($ha{$_}) } @b) );
print "Content-type: text/html\n\n";
print Dumper (@diff);
gudn tach!
ich muss 2 Texte auf Änderungen vergleichen (wie diff unter Linux) d.h. die Änderungen auch mit + bzw. - aufzeigen.
diff-module gibt's schon. z.b.
Text::Diff
Algorithm::Diff
(das Diff Modul steht nicht zur Verfügung)
mist. beide?
ansonsten gaebe es auch einfach die moeglichkeit diff in perl aufzurufen und sich die ausgabe in eine variable schreiben zu lassen, und zwar mit hilfe von backticks.
Gut funktioniert u.g. Script - allerdings kann ich damit gar nichts anfangen, da ich nicht weiß, wie ich die Dumper-Werte weiter verarbeiten soll/kann (es gibt $VAR1=... zurück, will ich diese Variable aber nutzen, steht sie nicht zur Verfügung...).
das manual von Data::Dumper sollte dir weiterhelfen.
Außerdem stört mich die Ausgabe:
$VAR1 = [ [ '-', 'ist' ], [ '-', 'text' ], [ '+', 'Text' ], [ '+', '.' ] ];Ich brauche eigentlich
@diff=('-|ist','-|text'...)
nach my $diff=...
$_=join('|',@{$_}) foreach @diff;
oder
map {$_=join('|',@{$_})} @diff;
aber immer wenn ich etwas an der map Zeile änder funktioniert gar nichts mehr...
prost
seth
Vielen Dank - das hat mir sehr geholfen :)
Viele Grüße
Lavender
PS: es steht keins der beiden Module zur Verfügung - umso besser, dass es auch so geht :)