OK, viel Glück. Ohne einen passenden Satz Dateien ist das schwer nachzuvollziehen.
Ich habe mal versucht, den Code durchzuschauen. Daraus hier nun eine Liste von Anmerkungen:
- use strict;, immer
- Daten aus Filehandles sollten mit while() anstatt foreach() gelesen werden
- 3 Argument-Form des open() und lexikalische Filehandles verwenden: open( my $handle, '<', $filename)
- Ausserdem den Erfolg des Öffnens überprüfen: open(...) or die "open($filename, $mode) failed: $!";
- Du liest zeilenweise die Adjektiv-Datei ein und splittest an einem Newline? Auf welcher Plattform läuft das Skript? Bei einem Linux-System dürfte dieser Split überflüssig sein;
-
edit: nachgetragen Was soll das mit dem "Tag entfernen" sein? 1. Die Kommentare stehen IMHO in den falschen Zeilen. 2. Wird mit dem Split nichts entfernen; nur aufgetrennt. Tags und Adjektive dürften beides im Array @adjektive landen und anschließend als Adjektiv verarbeitet werden. Nachtrag: gestrichen nach Erklärung. Danke.
- Warum machst Du die Ersetzung der Umlaute so umständlich? Hat der Rechner zu wenig zu tun? Anstatt erst zu prüfen, ob ein Pattern gefunden wird, mache die Ersetzung direkt; wenn nicht gefunden wird, wird auch nichts ersetzt. if ( $string =~ m/.[*]?a".[*]?/g ) { $string =~ s/a"/ä/g; } ist unnötig kompliziert. $string =~ s/a"/ä/g reicht völlig. Analoges gilt bei den weiteren Ersetzungen.
- Die anderen Dateien für Pronomen, Präpositionen, etc. enthalten alle nur genau eine Zeile? Wenn nicht, werden die jeweiligen Arrays immer wieder überschrieben, bis nach der letzten Zeile eben nur der Inhalt der letzten Zeile im Array steht.
Hier mach ich erstmal Schluss ;-)
Last edited: 2017-09-04 19:12:35 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!