Kleiner Fehler in Versuchsscript? - Sort-Befehl

Liebe ExpertInnen!

Ich möchte den folgenden, abgeschriebenen Code ausführen. Meine zu sortierende Datei befindet sich im gleichen Ordner wie das Perlscript.

Ich bekomme immer die Meldung „Die Datei wurde sortiert.“ Aber wenn ich die Datei danach mit einem Editor öffne, ist gar nichts sortiert.

Danke für alle hilfreichen Beiträge!

#!C:\perl\bin\perl5.10.0 -w perl_test.pl
print „Datei, die sortiert werden soll: \n“;
$datei = ;
chop $datei;
if (-e $datei)
{
open (EINGABE, ";
close (EINGABE);
@gesamtedatei = sort @gesamtedatei;
open (AUSGABE, „>$datei“);
print AUSGABE @gesamtedatei;
close (AUSGABE);
print „Die Datei wurde sortiert.\n“;
}
else
{
print „Datei kann nicht sortiert werden.\n“;
}

Dieses Script hier funktioniert dagegen, obwohl ich nur winzige Details geändert habe. Hier schreibe ich ganz einfach etwas in eine Datei.
#!C:\perl\bin\perl5.10.0 -w perl_test.pl
print „Datei, die sortiert werden soll: \n“;
$datei = ;
$inhalt=„Testinhalt“;
chop $datei;
if (-e $datei)
{
open (EINGABE, ";
close (EINGABE);
@gesamtedatei = $inhalt;
open (AUSGABE, „>$datei“);
print AUSGABE @gesamtedatei;
close (AUSGABE);
print „Der Text $inhalt wurde in die Datei geschrieben.\n“;
}
else
{
print „Datei kann nicht sortiert werden.\n“;
}

Hallo Martin,

Ich möchte den folgenden, abgeschriebenen Code ausführen.
Meine zu sortierende Datei befindet sich im gleichen Ordner
wie das Perlscript.

Dazu brauchst Du eigentlichgar kein
„Programm“ in dem Sinne, unter Windows
tut es das Kommando:

 perl -i.bak -0777 -F"[\n\r]+" -lane "print join qq{\n},sort @F" xxx.txt

Ich bekomme immer die Meldung „Die Datei wurde sortiert.“ Aber
wenn ich die Datei danach mit einem Editor öffne, ist gar
nichts sortiert.

Hmm, aus Deinem Quelltext kann ich nicht auf die Ursache kommen.
Versuch Doch mal eine „modernisierte“ Variante von „Quelltext-1“:

use strict;
use warnings;

print "Datei, die sortiert werden soll: \n";
chomp(my $datei = );

if (-e $datei) {
 my @gesamtedatei;

 open my $eingabe, ';
 close $eingabe;

 open my $ausgabe, '\>', $datei or die "$datei: $!";
 print $ausgabe sort @gesamtedatei;
 close $ausgabe;

 print "Die Datei wurde sortiert (" . @gesamtedatei . " Zeilen)\n";
}

Grüße

CMБ

Am Thema vorbei
Ich bin Anfänger und möchte eigentlich nur eine Antwort auf die Frage, keine Vorschläge zur Umschiffung des Problems.

Ansonsten hätte ich ja formuliert, „Wie geht eine Sortierung?“ und nicht „Wo ist der Fehler im Quellcode?“.

Trotzdem, Danke für die Antwort.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Ich bin Anfänger und möchte eigentlich nur eine Antwort auf
die Frage, keine Vorschläge zur Umschiffung des Problems.

Ansonsten hätte ich ja formuliert, „Wie geht eine Sortierung?“
und nicht „Wo ist der Fehler im Quellcode?“.

Ich glaube mich zu erinnern geschrieben zu
haben, daß ich einen Fehler im Quelltext nicht
finden kann. Im Klartext: wenn ich Deinen
Quelltext bei mir laufen lasse, dann
sortiert er auch korrekt.

Möglicherweise solltest Du mal diese
eigenartige 1. Zeile (#…) herauslöschen
und Dein Programm explizit mit:

 perl quelltext1.pl

starten.

Grüße

CMБ

Hallo Martin,

Ich möchte den folgenden, abgeschriebenen Code ausführen.
Meine zu sortierende Datei befindet sich im gleichen Ordner
wie das Perlscript.

Ich bekomme immer die Meldung „Die Datei wurde sortiert.“ Aber
wenn ich die Datei danach mit einem Editor öffne, ist gar
nichts sortiert.

Mir geht es wie Semjon Michailowitsch, ich sehe weder einen Fehler im Skript und auch das Programm sortiert meine Dateien einwandfrei.

Viele Grüße
Marvin

Hallo

Ich bekomme immer die Meldung „Die Datei wurde sortiert.“ Aber
wenn ich die Datei danach mit einem Editor öffne, ist gar
nichts sortiert.

Zum Vergleich mit Windows2000 und Perl 5.8 auf der Kommandozeile, sowie Codeanpassungen (@, use strict,…)
Testdatei war selbst ein Perlskript als .txt

#! /usr/bin/perl
use strict;
use warnings;
use DBI;
use HTML::Template;
print “Content-type: text/html\n\n“;
....

Nach der Sortierung

...
print $template-\>output();print “Content-type: text/html\n\n“;
push(@eintraege,\%hash);
push(@ergebnisse,\@row);
use DBI;
use HTML::Template;
use strict;
use warnings;
while(my @row = $sth-\>fetchrow\_array()){
}
}

Funktioniert also…

mfg M.L.

hallo,

Ich bin Anfänger und möchte eigentlich nur eine Antwort auf
die Frage, keine Vorschläge zur Umschiffung des Problems.

moment mal, vielleicht wärst du so nett, dir den vorschlag genau
anzusehen. semjon hat dem skript fehlerbehandlung hinzugefügt,
und es wäre nur fair von dir, das skript auszuprobieren.
‚moderne variante‘ heisst nicht, dass er das problem ‚umschifft‘
hat oder irgendwas dergleichen.
fehlerbehandlung bei open() macht man immer!

Ansonsten hätte ich ja formuliert, „Wie geht eine Sortierung?“
und nicht „Wo ist der Fehler im Quellcode?“.

wenn du nur bestimmte hilfe annehmen willst, ist das natürlich
deine entscheidung, aber es *war* eine hilfe. wenn du sie nicht
nutzen willst, ignorier sie doch einfach statt dich auch noch
zu beschweren.

Hallo!

Das Problem kann so einige Ursachen haben.
Hast du z.B. mal geschaut, ob die Dateirechte der zu sortiereden Datei stimmen?

Wenn bei mir was nicht so funktioniert wie ich das will, dann fange ich an debugging Ausgaben hinzuzufügen.

Ich würde mir zum Beispiel das Array @gesamtdatei nach dem sortieren ausgeben lassen und hinter anstatt

open (AUSGABE, „>$datei“);

lieber

open (AUSGABE, „>$datei“) || print „klappte nicht. Fehler: $! \n“;

in $! steht dann der Fehler, weshalb das nicht klappte, z.B. File does not exist oder so.
Die Variable $! kannst du auch wunderbar in
print „Datei kann nicht sortiert werden.\n“;
unterbringen:
print „Datei kann nicht sortiert werden. Weil: $!\n“;

Das Prüfen beim open ist immer wichtig, aber das haben meine Vorredner ja auch schon geschrieben.

Bei mir funktionieren übrigens beide Scripte.

Hast du schon herausgefunden warum es bei dir nicht funktionierte?

Grüße, Fini

Tut mir leid
Da habe ich wohl falsch reagiert. Ich habe mich bei dem Vorschlag etwas überfordert gefühlt. In Zukunft gibt es also etwas mehr Kontext von mir und richtige Formulierungen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like