Schrift
[thread]7143[/thread]

Zeilen überspringen im Perl: Wie kann man einige Zeilen überspringen?

Leser: 1


<< >> 10 Einträge, 1 Seite
Gast Gast
 2005-07-19 22:37
#56508 #56508
Hallo,

hab ein (für mich) großes Problem. Ich bin noch ein Anfänger im Perl Programmieren und nun ein Problem, das ich mit allen Büchern und so nicht in den Griff bekomme.
Ich lasse Perl in einer txt. datei ein bestimmtes Muster suchen, und möchte gern dass der Text, derein paar Zeilen danach steht in eine andere Datei geschrieben wird.
Aber ich finde keine Lösung um zu sagen "Gehe ... Zeilen weiter".
Kann mir jemand helfen?

Danke
jan
 2005-07-19 22:40
#56509 #56509
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
for (0..4)
{
<STDIN>;
}


"überspringt" fünf zeilen.
Ronnie
 2005-07-19 23:59
#56510 #56510
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn du es an einem Muster festmachen kannst:
Code: (dl )
1
2
3
4
while(<>) {
next unless /MUSTER/;
# ...
}
\n\n

<!--EDIT|Ronnie|1121803242-->
renee
 2005-07-20 01:42
#56511 #56511
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich würde (mal wieder) CPAN:Tie::File verwenden:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#! /usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $suchmuster = 'MUSTER';
my $zeilen_ueberspringen = 5;
my $datei = '/pfad/zur/datei.txt';

tie my @array,'Tie::File', $datei or die $!;
my @index = grep{/$suchmuster/}(0..$#array);
for my $ind(@index){
print $array[$ind+$zeilen_ueberspringen];
}
untie @array;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2005-07-20 16:33
#56512 #56512
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
[quote=renee,19.07.2005, 23:42]
Code: (dl )
my @index = grep{/$suchmuster/}(0..$#array);
[/quote]
Du meinst sowas wie

Code: (dl )
my @index = grep{$array[$_] =~ /$suchmuster/}(0..$#array);


oder?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
renee
 2005-07-20 16:43
#56513 #56513
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ups, sorry, genau das meinte ich @Crian! Ich sollte mir langsam mal angewöhnen nachts zu schlafen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Sunny
 2005-07-20 21:43
#56514 #56514
User since
2005-07-20
2 Artikel
BenutzerIn
[default_avatar]
Ich danke für die vielen Tipps! Hab den ersten Hinweis heut mal ausprobiert und irgendwie haut das noch nicht hin.
ich hab folgendes probiert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
open FILE ...#Datei aus der ich die Daten haben will
open DATEI .. #Datei in die neue reingeschrieben werden sollen
@lines=<FILE>;
foreach my $line (@lines) {
if ($line =~m/^TEXT$/) {
for (0..7) {
<fh>; #will gern die 8. Zeile einlesen
@lin=<fh>;
print DATEI "@lin\n"; } #soll die Zeile in die andere Datei schreiben
}
}
close DATEI;
close FILE;

und da funktioniert nicht. Entweder ist die Datei leer oder es wird ganz oft 01234567 geschrieben. Kann mir da jemand weiter helfen??
und noch eine kurze Frage: wenn ich mehrere Bedingungen habe (mehrere IF Schleifen) kann ich die einfach ineinanderschachteln?

Schonmal Vielen vielen Dank!!!
Sunny\n\n

<!--EDIT|Sunny|1121883406-->
pq
 2005-07-20 22:19
#56515 #56515
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Wiki:use strict;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2005-07-20 23:58
#56516 #56516
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum alles so kompliziert??

Code: (dl )
1
2
3
4
5
6
7
8
9
10
open FILE ...#Datei aus der ich die Daten haben will
open DATEI .. #Datei in die neue reingeschrieben werden sollen
my @lines=<FILE>;
foreach my $ind(0..$#lines) {
if ($lines[$ind] =~m/^TEXT$/) {
print DATEI $lines[$ind+8],"\n"; #soll die Zeile in die andere Datei schreiben
}
}
close DATEI;
close FILE;


Es gibt keine If-Schleifen, das sind If-Abfragen und die kann man beliebig ineinander schachteln...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Sunny
 2005-07-25 20:52
#56517 #56517
User since
2005-07-20
2 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

vielen vielen Dank für die vielen Tipps!
Ich hab das Programm jetzt zum laufen bekommen!!

Echt super!
Ich danke euch

Gruß Sandra
<< >> 10 Einträge, 1 Seite



View all threads created 2005-07-19 22:37.