Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7151[/thread]

2 Dateien vergleichen und Ergebnis in 3 schreiben: 2 Dateien vergleichen in 3 Datei

Leser: 1


<< >> 9 Einträge, 1 Seite
xalo
 2005-07-22 13:04
#56603 #56603
User since
2005-07-22
6 Artikel
BenutzerIn
[default_avatar]
Achtung: absoluter NEWBIE!

Folgendes Problem:

Inhalt Datei1:
Perl
Hello
World

Inhalt Datei2:
a- Perl
b- Startseite
c- Forum
d- Hello
e- Hilfe
f- World

Übereinstimmende Zeilen sollen in eine neue Datei geschrieben werden (oder ungleiche Zeilen aus Datei2 gelöscht werden).

Inhalt Datei3:
a- Perl
d -Hello
f -World

Ich hoffe das ist nicht zu leicht, möchte nämlich niemanden beleidigen.

Danke!
Relais
 2005-07-22 13:16
#56604 #56604
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Auf dem Shell-Prompt $:
Code: (dl )
$ diff Datei1 Datei2 > Datei3

Dazu gibt es eine Handbuchseite: man diff

Daß ich hier nicht sofort die Perl-Lösung biete, liegt an meiner Unix-Vergangenheit...
jedoch kommt Perl mit zahlreichen Diff-Modulen auf CPAN (CPAN:Diff) daher, einfach da mal schaun.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Relais
 2005-07-22 13:23
#56605 #56605
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ohoh, ich war zu flüchtig beim darüberschaun und habe etwas naheliegendes, aber nicht besonders hilfreiches geschrieben.

In Perl schlage ich vor, Du liest die erste Datei in ein Array @suchen ein, die zweite, in ein Array @daten. Dann suchst Du mit Regex oder grep im zweiten Array nach den Suchbegriffen aus dem ersten Array. Die schreibst Du in die dritte Datei.

Für die Dateien mußt Du lernen, mit open umzugehen. Steht alles in perldoc perlintro... zumindest genug davon, um schonmal loszulegen. Bei Schwierigkeiten damit, einfach hier fragen!
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
J-jayz-Z
 2005-07-22 21:52
#56606 #56606
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
okay, hier mal ein paar Tipps:
man kann eine Datei wie folgt öffnen:
Code: (dl )
1
2
3
4
5
6
#Datei zum lesen öffnen und Fehler abfangen
open(DATEI1, "<datei1.txt")|| die "Fehler:$!";
#Datei in @datei1 speichern
my @datei1 = <DATEI1>;
#Dateihandle schließen
close(DATEI1);

das kannst du mit beiden dateien machen
dann kannst du das array @datei1 mit einer schleife durchlaufen:
Code: (dl )
1
2
3
4
5
6
7
8
9
foreach my $line (@datei1) {
#und nun mit übereinstimmungen von @datei2 suchen
map {
#Wenn das aktuelle Element von map ($_) mit $line
#übereinstimmt, wird es in die Datei geschrieben, die
#mit dem Handle NEUEDATEI geöffnet wurde
print NEUEDATEI "$_" if $line eq $_;
} @datei2;
}

nun musst du das nur noch zusammen basteln.
Viel Spaß mit Perl wünsch ich dir! War eine gute Wahl :D
Nochwas: die NEUEDATEI öffnest du mit:
Code: (dl )
open(NEUEDATEI, ">new.txt") || die "Fehler: $!";
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Strat
 2005-07-23 21:00
#56607 #56607
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
zeilen ausgeben, die sowohl in Datei fileA und fileB vorkommen? Das geht auch als Einzeiler:
Code: (dl )
perl -ne 'print if($seen{$_}.=@ARGV) =~ /10$/' fileA fileB > fileC


(Die Idee stammt aus einer Linux-Newsgroup... weiss leider nicht mehr, aus welcher und von wem)\n\n

<!--EDIT|Strat|1122138277-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
J-jayz-Z
 2005-07-23 21:13
#56608 #56608
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich hab kein WIndows, aber geht > auch mit WIndows? ? ?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
coax
 2005-07-23 21:47
#56609 #56609
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=J-jayz-Z,23.07.2005, 19:13]Ich hab kein WIndows, aber geht > auch mit WIndows? ? ?[/quote]
Jabb

PS: Der Einzeiler ist pretty kewl.\n\n

<!--EDIT|coax|1122141760-->
,,Das perlt aber heute wieder...'' -- Dittsche
J-jayz-Z
 2005-07-23 21:56
#56610 #56610
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
okay, thx
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
xalo
 2005-08-08 23:19
#56611 #56611
User since
2005-07-22
6 Artikel
BenutzerIn
[default_avatar]
War ne Zeit lang in Urlaub.

Danke für Eure Antworten.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-07-22 13:04.