Guest Fredl.Ich bin Anfänger im Perl (überhaupt Anfänger im Programmieren) und hätte deshalb anfänglich einige Fragen:
1)Von wo bekomme ich ein gutes Handbuch bzw. Webtutorial?
Quote2) Ist es richtig, dass Perl für mein Problem die richtige Programmiersprache ist: .txt- Dateien einlesen -> verändern -> und in neue Datei speichern.
Quote3) Ich habe nun versucht eine Datei zu öffnen/lesen/verändern...! Mit dem Befehl:
open(FILE,"demo.dat"); Wo muss die Datei demo.dat abgespeichert sein damit Perl diese Datei öffnen kann? Was ist wenn ich sie z.B.: in D:\Versuch gespeichert habe. Ich habe alles versucht leider funkt es nicht!!
2012-03-09T15:02:48 pqzu den pfaden: du kannst einen absoluten pfad angeben, z.b. 'D:\\verzeichnis\\datei.txt'.
Guest Fredl1)Von wo bekomme ich ein gutes Handbuch bzw. Webtutorial?
Quote2) Ist es richtig, dass Perl für mein Problem die richtige Programmiersprache ist: .txt- Dateien einlesen -> verändern -> und in neue Datei speichern.
Quote3) Ich habe nun versucht eine Datei zu öffnen/lesen/verändern...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use warnings; # warne mich, nerve mich! use strict; # zwinge mich, sauber zu coden! my $file_orig = 'D:\\Versuch\\demo.dat'; my $file_modf = 'D:\\Versuch\\demo.tmp'; # zum Lesen öffnen open(my $orig, '<', $file_orig) or die "cannot open $file_orig\n"; # Ausgabedatei zum Schreiben öffnen open(my $modf, '>', $file_modf) or die "cannot open $file_modf\n"; # zeilenweise einlesen und verändert ausgeben while (my $line = <$orig>) { $line =~ s/x/Y/ig; # alle x durch Y ersetzen (groß/klein) print $modf $line; } close $orig; close $modf; # alte Datei durch neue ersetzen unlink $file_orig; rename $file_modf, $file_orig;
Guest Fredl3) Ich habe nun versucht eine Datei zu öffnen/lesen/verändern...! Mit dem Befehl:
open(FILE,"demo.dat"); Wo muss die Datei demo.dat abgespeichert sein damit Perl diese Datei öffnen kann? Was ist wenn ich sie z.B.: in D:\Versuch gespeichert habe. Ich habe alles versucht leider funkt es nicht!!
open(FILE,"demo.dat");
open(FILE,"<demo.dat");
open(FILE,"<D:\\Versuch\\demo.dat");
1 2 3 4 5 6 7
open(FILE,"<D:\\Versuch\\demo.dat"); my @a = <FILE>; close(FILE); my $i; foreach $i (@a) { print "$i\n"; }
2012-03-09T19:39:31 hlubenowCode (perl): (dl )open(FILE,"demo.dat");
Da fehlt ein "<" oder ">", um anzugeben, ob die Datei für's Lesen oder Schreiben geöffnet werden soll.
2012-03-09T22:15:28 FIFO
FIFOMir scheint es außerdem sinnvoll, einen Newcomer von vorneherein mit lexikalischen Filehandles und der 3-Argument-Form von open() vertraut zu machen, auch wenn es anders geht. Naja, Ansichtssache :)
2012-03-09T23:37:27 hlubenowHier, im Perl-Forum, könnt ihr mir glücklicherweise nicht aus demselben Grund versuchen, den Mund zu verbieten, denn TMTOWTDI!
2012-03-10T07:02:15 FIFOTMTOWTDI, ja klar, aber
"Although Perl's motto may be "There's More Than One Way To Do It," the corollary is, "But Most of Them Are Wrong," or "Some Ways Are Better Than Others."" (Effective Perl) :)
python -c 'import this'
QuoteThere should be one-- and preferably only one --obvious way to do it.
2012-03-10T15:59:47 hlubenowDas kann dann sehr dogmatisch werden und einige meinen dann, im Besitz einer allein glücklichmachenden Lösung zu sein.
Wenn ich das richtig verstehe, wollte Larry Wall das gerade verhindern. Und das finde ich gut.
2012-03-09T19:39:31 hlubenowDa fehlt ein "<" oder ">", um anzugeben, ob die Datei für's Lesen oder Schreiben geöffnet werden soll. Stattdessen also zum Lesen:
Code (perl): (dl )open(FILE,"<demo.dat");
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/perl use warnings; use strict; use Tie::File; my @a; my $i; tie @a, 'Tie::File', "D:\\Versuch\\demo.dat"; foreach $i (@a) { print "$i\n"; } untie @a;
QuoteAlso, wenn schon mit Modulen, dann ist "Tie::File" wohl am praktischsten:
1 2 3 4 5 6 7
my $obj = tie my %objects, 'Ostore::Manager', 'objects.bin', auto => 1, lock => 1 or die $@; print $objects{'/index.html'}{title}, $objects{'/index.html'}{descr}; delete $objects{'/impressum.html'} $obj->write;
Guest FredlHallo perl-community,
Ich bin Anfänger im Perl (überhaupt Anfänger im Programmieren) ...
1 2 3 4
open(FILE, 'D:\Versuch\demo.dat'); map { s/x/Y/ig } (@tmp = <FILE>); open(FILE, '>D:\Versuch\demo.dat'); print FILE for @tmp;
1 2 3 4 5 6 7 8 9
open(FILE, 'D:\Versuch\demo.dat'); @tmp = <FILE>; map { $_ =~ s/x/Y/ig } @tmp; close(FILE); open(FILE, '>D:\Versuch\demo.dat'); for (@tmp) { # oder (identisch) foreach print FILE $_; } close(FILE);
1 2 3 4
open(FILE, 'D:\Versuch\demo2.dat'); map { s/x/Y/ig } (@tmp = <FILE>); open(FILE, '>D:\Versuch\demo2.dat'); print FILE for @tnp;
2012-03-12T10:46:23 FIFODas folgende (elegante?) 4-Zeilen-Programm ersetzt in D:\Versuch\demo.dat alle x (case-insensitive) durch Y:
Code (perl): (dl )1 2 3 4open(FILE, 'D:\Versuch\demo.dat'); map { s/x/Y/ig } (@tmp = <FILE>); open(FILE, '>D:\Versuch\demo.dat'); print FILE for @tmp;
($txt=eval{local($/,@ARGV)=(undef,'D:\Versuch\demo.dat');<>})=~s/x/Y/ig && open(STDOUT, '>D:\Versuch\demo.dat') && print $txt;