Thread Testen, ob Textdatei bereits existiert --> möglich? (6 answers)
Opened by Dingels at 2008-11-29 23:25

murphy
 2008-11-30 02:20
#116730 #116730
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Dingels+2008-11-29 23:17:11--
[...]
Code (perl): (dl )
1
2
3
4
5
6
7
[...]
while (my $dateien = readdir(INPUT)) {
        $dateinamen .= $dateien . ' ';
}
[...]
my @dateinamen_liste = split(" ", $dateinamen);
[...]

[...]

Was soll das denn? Abgesehen davon, dass es schrecklich redundant und ineffizient ist, ist es auch noch fehleranfällig. Niemand zwingt Dich, Daten in einem String zu speichern, wenn Du eigentlich ein Array haben willst. Und wenn Du schon Dateinamen in einem String aneinanderhängst, was eigentlich niemals nötig sein sollte, dann ist das Leerzeichen kein gutes Trennzeichen, da es auch mal in einem Dateinamen vorkommen könnte…

Also besser so:
Code (perl): (dl )
1
2
3
4
my @dateinamen;
while(my $datei = readdir(INPUT)) {
  push @dateinamen, $datei;
}


Quote
Code (perl): (dl )
1
2
3
4
5
6
[...]
foreach my $dateiname (@dateinamen_liste) {
        if (not -e "haeufigkeiten.txt") {
               ...
}
[...]

Hmm, davon, dass man dieselbe Abfrage mehrmals in einer Schleife durchführt, von deren Interationsvariablen sie völlig unabhängig ist, wird das Resultat nicht unbedingt besser. Und Du prüfst natürlich nicht, ob die Datei mit dem Namen haeufigkeiten.txt in dem Verzeichnis vorhanden ist, in dem das Skript liegt, sondern ob sie im aktuellen Arbeitsverzeichnis vorhanden ist.

Die ganzen Iterationen in Deinem Skript erfüllen keinen erkennbaren Zweck!

Um aber auf das eigentliche Problem zurückzukommen: Du solltest erstmal das Verzeichnis bestimmen, in dem Dein Skript wohnt und dann auf die Existenz der Datei prüfen. Da ersteres tatsächlich nicht ganz trivial ist, nimmt man am besten das Standardmodul CPAN:FindBin dafür her:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;

use FindBin;
use File::Spec::Functions;

my $haeufigkeiten = catfile($FindBin::Bin, 'haeufigkeiten.txt');

if (-e $haeufigkeiten) {
  print "$haeufigkeiten gibt's schon\n"
  # lies die Datei
}
else {
  print "$haeufigkeiten haben wir hier nicht\n"
  # erzeuge die Datei
}
When C++ is your hammer, every problem looks like your thumb.

View full thread Testen, ob Textdatei bereits existiert --> möglich?