chill0r55555
Mitglied
Hallo,
ich bastle gerade an einem Skript mit dem ich Dateien zusammenfügen kann.
Soll wie folgt funktionieren:
Datei.txt
Preset.txt
Das Skript liest jetzt beide Dateien ein, dann geht er die Preset.txt durch.
Dort nimmt er als Suchbegriff den Namen der Personen. Nun wird nach dem Namen
von Preset.txt in der Datei "Datei.txt" gesucht. Sollte ein Treffer vorhanden sein,
dann wird die Komplette Zeile der Datei "Datei.txt" durch die entsprechende Zeile
in "Preset.txt" ersetzt. Soweit funktioniert mein Skript auch ganz gut, nur habe ich
das Problem das ich es nicht hinbekomme, wenn ein Eintrag aus Preset.txt nicht in Datei.txt
gefunden wird dieser dann auch hinzugefügt werden soll. Zudem ist meine Idee mit den Zwei
Schleifen nicht die Beste, da die Ausgabe doppelt ist:
Ausgabe:
Das ist mein Skript:
Ich hoffe ich hab mich nicht zu unverständlich ausgedrückt.
MfG
ich bastle gerade an einem Skript mit dem ich Dateien zusammenfügen kann.
Soll wie folgt funktionieren:
Datei.txt
Code:
111[TABULATOR]Markus
222[TABULATOR]Micha
333[TABULATOR]Peter
444[TABULATOR]Hans[TABULATOR]Bemerkung
555[TABULATOR]Lisa
Preset.txt
Code:
999[TABULATOR]Hans[TABULATOR]Bemerkung
888[TABULATOR]Klaus[TABULATOR]blabla
Das Skript liest jetzt beide Dateien ein, dann geht er die Preset.txt durch.
Dort nimmt er als Suchbegriff den Namen der Personen. Nun wird nach dem Namen
von Preset.txt in der Datei "Datei.txt" gesucht. Sollte ein Treffer vorhanden sein,
dann wird die Komplette Zeile der Datei "Datei.txt" durch die entsprechende Zeile
in "Preset.txt" ersetzt. Soweit funktioniert mein Skript auch ganz gut, nur habe ich
das Problem das ich es nicht hinbekomme, wenn ein Eintrag aus Preset.txt nicht in Datei.txt
gefunden wird dieser dann auch hinzugefügt werden soll. Zudem ist meine Idee mit den Zwei
Schleifen nicht die Beste, da die Ausgabe doppelt ist:
Ausgabe:
Code:
111 Markus
222 Micha
333 Peter
#Kommentar
999 Hans Bemerkung
555 Lisa
111 Markus
222 Micha
333 Peter
#Kommentar
444 Hans Bemerkung
555 Lisa
Das ist mein Skript:
Perl:
#!/usr/bin/perl -w
use strict;
use Tie::File;
my $datei = 'Datei.txt';
my $datei2 = 'Preset.txt';
my @output=();
my $count=0;
my @preset=();
# Datei einlesen
tie my @array,'Tie::File', $datei or die $!;
# Preset-Datei einlesen
open (my $file, '<', $datei2) or die $!;
while(<$file>)
{
chomp;
# Leerzeilen und Kommentare im Presetfile ignorieren
if (m/^\s*$/ || m/^#.*/) { next; }
@{$preset[$count++]} = split("\t", $_);
}
close $file;
for(my $i=0; $i <= $#preset; ++$i)
{
for(my $j=0; $j <= $#array; ++$j)
{
if ($hosts[$j] =~ /$preset[$i]->[1]/){
push(@output,$preset[$i]->[0]."\t".$preset[$i]->[1]."\t".$preset[$i]->[2]);
}
else{
push(@output,$array[$j]);
}
}
}
untie @array;
foreach my $eintrag(@output){
print $eintrag."\n";
}
Ich hoffe ich hab mich nicht zu unverständlich ausgedrückt.
MfG