A wiki for German-speaking Perl & Raku programming language(s) user groups.
Änderungen,
Hilfe
Best of Perl Books Liebe(r) Perl Monger(in), diese Site ist bereits seit langem ein Ziel von Spamrobotern. Neu ist, dass ich das Aufräumen leid bin. Darum schreibe mir eine Mail mit Deinem Usernamen und einem Crypt Passwort, damit Du einen passwortgeschtzten Zugang zu dieser Site von mir erhältst. Eines baldigen Tages wirst Du den brauchen, um hier weiterhin Seiten verändern zu können. Vielen Dank, Sören Amazon-Angebote... (Einkauf über diesen Link sponsort den Unterhalt von perlmongers.de) |
Hallo Freunde, ich breche mir schon seit einigen Tagen an dem Skript die Finger ab (bin noch Perl Einsteiger)-aber irgendwie würde ich das schon gerne mit meinem Perl hinbekommen.
#!/usr/contrib/bin/perl -w #use strict; my $datei = "/home/mario/scripts/test.txt"; soweit, so gut. Das use strict; würde ich so lange drin lassen, bis das Programm läuft. Dann würde ich es auch drin lassen ;-) open (BLUBB, '> $datei'); Neu: open (BLABB, '>> $datei'); Das geht nicht,
@zeilen = <BLUBB>; @zeilen ist nun leer, denn zum einen wurde die Datei eine Code-Zeile zuvor geleert, und dann auch nicht zum Lesen "<", sondern zun Schreiben ">" geöffnet. Denke Dir "<" und ">" wie die gewohnten Umleitungen in der Unix-Shell. close BLUBB; &session_id(); Hier hätte session_id() auch ohne & ausgereicht. sub session_id { my $datei = "/home/mario/scripts/test.txt"; open (BLUBB, '>> $datei'); @zeilen = <BLUBB>; Das funktioniert auch hier nicht, siehe oben... close BLUBB; print "Geben Sie nacheinander die Session ID (ohne , Datum) an: \n"; while (<>) { foreach $_ (@_) { Fehler: foreach (chomp @_) Leider hatte ich hier das Problem, dass nach der Wertübergabe an die Variable das /n noch mit übergeben wurde. Der chomp ist an der richtigen Stelle manchmal Gold wert. --Mario Das ES ($_) muß man nicht beim Namen nennen, also einfach foreach ( @_ ) system '/opt/omni/bin/omnidb -session 2004/12/01-$_ -report >> /home/mario/scripts/test.txt' ; #Oder die $Datei Hier gilt wie oben schon:
print "system /opt/omni/bin/omnidb -session 2004/12/01-$_ -report"; } return } }; # End sub session_id Ich hoffe, das hilft schonmal weiter. --Sören Zum ganzen überfluss würde ich nun noch ganz gerne mehr als eine Session_id übergeben. Damit es dann eine Arbeitserleichterung war :-) Wie muss ich dann die folgende Zeile ändern, um das ganze im Listenkontext verwenden zu können? print "Geben Sie nacheinander die Session ID (ohne , Datum) an: \n"; while (<>) { foreach (chomp @_) { } Nana, Das while (<>) { ... liefert Dir je Schleifendurchlauf genau einen Skalar wieder. Also ist das foreach danach dann fehl am Platz. Folgendes macht dann einen chomp: while ( <> ) { chomp; # wenn man nix dazu schreibt, muß $_ gemeint sein. ... # tu was sinnvolles, finde eventuell auch ein Abbruchkriterium fuer last(); } Ersteinmal eine andere Baustelle. Ich versuche gerade eine 2. sub zu bauen, die das Datum abfragen soll und diese aus der Sub in die nächste sub übergeben soll. sub session_date { print "Geben Sie das Datum ein (yyyy/mm/dd): \n"; while (<>) { chomp; print"$_ \n\n " ; } return $session_date; }; # End sub session_date Sinn und Zweck soll sein, dass ich die sub session_date als erstes laufen lassen und dann das Datum einlesen kann und dieses in die sub session_id mit übernehmen kann.
say( get_one(), get_two( qw( zwei Worte und noch mehr ) ) ); sub get_one { return @_ if @_; return 1; } sub get_two { my ( $erstes, $zweites ) = @_; return ( $erstes, $zweites ); } sub say { print "$_\n" for @_; } Hmmm, damit muss ich mich in Zukunft wohl noch etwas mehr mit beschäftigen. Logdateien durchforstenWieder einmal will ich als Einsteiger meine Problemchen mit Perl lösen. Und nur Hilfe keine kompletten Lösungen, denn der Weg ist das Ziel.
Ich würde gerne eine Logdatei mit einem einzulesenden Datum mit diesem als Suchmuster durchsuchen. Die Treffen sollen in eine andere Datei ausgegeben werden. Allerdings kommt im 2. Schritt erschweren hinzu, dass nach der Zeile mit dem Datum 3 weitere Zeilen folgende, die ebenfalls interessant sind und leider kein Datum enthalten - zwischen den Einträgen sind mehrere \n Zeichen bis der nächste Eintrag wieder mit dem Datum beginnt.
Ich lesen die Logdatei von der Kommandozeile ein, ebenso das Datum (=suchstring) Danach öffne ich die Datei (nur lesen - und hoffentlich richtig) und übergebe diese an einen Array von dem aus Zeilenweise die Infos an den suchstring übergeben werden und bei einem Treffer ersteinmal auf der STDOUT ausgegeben werden.
#!/usr/bin/perl -w use strict; use warnings; |