perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




10.02.2012 / 20:02

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragzeilen vergleichen
Seitenanfang
wie kann ich 2 zeilen miteinander vergleichen in einem array?
also zb
eine datei die so aussieht
<s>
hallo
ich
bin
müde
</s>
<s>
das
ist
ein
satz
</s>
<s>
</s>

so dass ich alle zeilen die mit dem tag <s> anfangen und die direkt darauffolgende zeile </s> heisst gelöscht werden! und die leeren sätze dann weg sind.

so?

foreach my $line(@file){
for (my $i=0; $i <= $#file; $i++){

if ($line[$i] =~ /<s>/ && $line[$i+1]=~ /</s>/){
pop @file;
}
}
}

Datum: 24.05.2007-15:35

Beitragre: zeilen vergleichen
Seitenanfang

$line[$i+1]=~ /</s>/

Syntaxfehler: fuer perl endet die Regexp schon nach dem zweiten '/' und mit der Zeichenkette danach '>/' weisz perl nichts mehr anzufangen, da perl an dieser Stelle etwas anderes erwartet, ergo Syntaxfehler.
Du musst den zweiten Slash escapen '/<\/s>/' oder du verwendest andere Musterbegrenzer

$line[$i+1] =~ m!</s>!;

Ein weiterer Fehler steckt im Code


pop @file;

pop entfernt das letzte Element vom Array, nicht das aktuelle. Um ein oder mehrere Elemente aus einen Array zu entfernen dass nicht am Anfang oder Ende des Arrays steht verwendet man 'splice'.

splice(@array, $position, $anzahl);

Codebeispiel folgt im naechsten Posting

Datum: 25.05.2007-15:34

Beitragre: zeilen vergleichen
Seitenanfang

#!/usr/bin/perl

use strict;
use warnings;

my @file = <DATA>;
chomp(@file);

remove_empty_sentences(\@file);

print "$_\n" for @file;

sub remove_empty_sentences {
my $array_ref = shift;

my @offsets;

for(my $i = 0; $i <= $#{ $array_ref }; $i++ ) {

if( $array_ref->[$i] eq '<s>'
and $array_ref->[$i + 1] eq '</s>' )
{
splice(@{$array_ref}, $i, 2);
}
}
}

__DATA__
<s>
hallo
ich
bin
müde
</s>
<s>
das
ist
ein
satz
</s>
<s>
</s>

Datum: 25.05.2007-15:35

-






-
-