Hallo!Warum so umständlich?
- Du liest alle Dateien ein
- Vereinigst diese und speicherst erstmal...
- und liest diese Datei nochmal ein und bearbeitest dann, um noch einmal zu speichern.
Wozu der Zwischenschritt über die Datei?
Außerdem glaube ich, das du nicht wirklich weißt, wofür 'chomp' eigentlich ist. Dieser Befehl macht nichts weiter, als den aktuellen Zeilentrenner am Ende der übergebenen Skalare zu löschen. D.h. du brauchst den Befehl nur bei den eingelesenen Zeilen anwenden, wenn du den Zeilentrenner (Standard ist \n) nicht haben willst.
So denn werden neue Zeilen mit 'push' an ein Array angehängt, nicht per Zuweisung mit '='.
Ach ja, und bei deinem Counter kommen gleich so 3-4 Denkfehler auf ein mal ;-)
Schau dir einfach mal diesen Code an, der sollte funktionieren:
use strict;
my @textdateien = @ARGV; # = Liste mit Dateien...
my $data; # Arbeitsvariable
for my $file (@textdateien)
{
open DAT, $file;
for my $line (<DAT>)
{
chomp $line; # Den Zeilenumbruch am Ende entfernen
$data .= $line; # und diese Zeile anhängen, wofür wir hier schon nen Skalar nehmen können
}
close DAT;
}
my @saetze = split/(?<=[\.!?])\s*/, $data; # den Skalar mit allen Daten in Sätze aufteilen
# Getrennt wird dazu nach jedem . ? !, wobei folgende Leerzeichen gelöscht werden
open DAT, ">out.txt"; # Die Ausgabedatei
my $counter = 0; # counter initialisieren
for (@saetze)
{
print DAT $counter++, " - $_\n"; # Und der Counter muss natürlich _bei_der_Ausgabe_ hochgezählt werden.
}
close DAT;
Grüße, Skrilax
Datum: 17.01.2007-18:02
