Matti Maekitalo: Dateien in Array abschneiden

Beitrag lesen

use Mosche;

Ich weiß zwar nicht was du getrieben hast aber es funktioniert.

Dann geh das ganze doch einfach mal durch:

my @arr = (
    '16|Nachtschatten|N|http:balbla',
    '15|Vampyres|V|http:niknak',
    '14|Vampire|V|http:zappzerapp'
   );

Das ist in einem Array deine Datei (zum lesen angenehmer formatiert).

for ( my $i=0; $i < @arr; $i++ ) {

Damit wird nun jede Zeile deines Array durchlaufen.

my @sub = split( /|/, $arr[$i] );

In @sub hat er jetzt die einzelnen Komponenten der aktuellen Zeile, jeweils am | getrennt (den '' vor dem '|' kannst du wegmachen, die Pipe muss IMHO nicht maskiert werden.

Für das aufteilen ist die Funktion split verantwortlich, die als Parameter einen regulären Ausdruck bekommt, der das Trennzeichen angibt (reg. Ausdruck durch /.../, Trennzeichen |).

$arr[$i] = join( '|', splice( @sub, 1 ) );

Jetzt macht er zwei Dinge, fangen wir dazu hinten an.
Mit der Funktion splice fertigt er einen Array an, der einen Ausschnitt aus einem anderem Array ist. Hier will er alle Teile des Arrays @sub bis auf das erste Element.

Der splice-Aufruf hat die Form:
       splice ARRAY,OFFSET,LENGTH,LIST
Also erst der Ausgangsarray, dann die Anzahl der Elemente, die übersprungen werden, dann die ANzahl der auszuschneidenen Elemente, und dann eine Liste (ungefähr wie ein Array), mit dem diese ausgeschnittenen Elemente überschrieben werden. Die hinteren Elemente können jeweils weggelassen werden. Hier benutzen wir nur ARRAY und OFFSET, um den Array anzugeben und die Anzahl der zu überspringenden Elemente anzugeben.

Mit der Funktion join setzen wir die Teilkomponenten wieder zusammen, und zwar mit einem | als Trennzeichen. join nimmt als Parameter das Trennzeichen und dann den Array, den es zusammensetzen soll. Dieser Array ist der Teilsausschnitt, der von splice zurückgegeben wird.

}

Ich hoffe, das hilft dir.

use Tschoe qw(Matti);