Thread Zugriff auf Dateien im Ordner public bei Mojolicious::Lite bzw. Dancer2 (20 answers)
Opened by Max_Perlbeginner at 2016-04-04 07:59

Max_Perlbeginner
 2016-04-05 00:33
#184364 #184364
User since
2016-04-04
107 Artikel
BenutzerIn
[default_avatar]
Ich habe das Einlesen der Plog Dateien nun auch mit Dancer2 geschafft.
Der Trick war, den Verzeichnisname des Datenverzeichnisses auf folgende Weise zu generieren:
Code: (dl )
my $datadir = Dancer2::FileUtils::path( setting('appdir'), "public/data");


Wenn das Datenverzeichnis so festgelegt wurde, kann das Verzeichnis dann sogar (im Gegensatz zu Mojolicious) auch mit dem einfachen File::find Befehl durchsucht werden.

Insgesamt sieht der total vereinfachte Code der Datei MyApp.pm im Verzeichnis lib folgendermaßen aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package MyApp;
use Dancer2;
use File::Find;
use Dancer2::FileUtils qw/path/;

our $VERSION = '0.1';

my $datadir = Dancer2::FileUtils::path( setting('appdir'), "public/Bilder");

get '/' => sub {
my $line;
my @entrys;
find sub {my $file="$File::Find::name"; push @entrys, $file;}, $datadir;
foreach my $filename (@entrys) {
open FH, $filename or die "Can't open '$filename': $!";
while (my $zeile=<FH>) {
$zeile=sonderzeichen($zeile);
$line = $line.$zeile;
}
close FH;
}
template "index.tt", { line => $line};
};

true;
sub sonderzeichen {...}


Das Sonderzeichen Problem habe ich nun mit diesem noch nicht 100% zufriedenstellenden Workaround gelöst. Falls jemand eine bessere Idee hat bzw. die Funktion noch um weitere Sonderzeichen zu ergänzen ist, bin ich weiterhin für eine Hilfestellung dankbar.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sub sonderzeichen {
my ($line) = @_;

# &
$line =~ s/&/\&amp\;/g;
# ß
$line =~ s/ß/\&szlig\;/g;
# ä
$line =~ s/ä/\&auml\;/g;
# Ä
$line =~ s/Ä/\&Auml\;/g;
# ö
$line =~ s/ö/\&ouml\;/g;
# Ö
$line =~ s/Ö/\&Ouml\;/g;
# ü
$line =~ s/ü/\&uuml\;/g;
# Ü
$line =~ s/Ü/\&Uuml\;/g;
# á - kleines a mit Accent grave
$line =~ s/á/\&agrave\;/g;
# " - doppeltes Anführungszeichen
$line =~ s/"/\&quot\;/g;
# '
$line =~ s/'/\&apos\;/g;
# <
#$line =~ s/</\&lt\;/g; !!! Dann gehen die HTML Codes nicht mehr!!!
# >
#$line =~ s/>/\&gt\;/g;
# §
$line =~ s/§/\&sect\;/g;
# ²
$line =~ s/²/\&sup2\;/g;
# ³
$line =~ s/³/\&sup3\;/g;
# €
$line =~ s/€/\&euro\;/g;

# veränderte Zeile zurückgeben
return $line;
}


Ich danke für all Eure Hilfe. Von meiner Seite ist der Thread bis auf das Sonderzeichenproblem gelöst...


PS.:
Ich habe noch eine bessere Lösung für das Sonderzeichenproblem gefunden.
Mit my $decoded_string = decode('UTF-8', $zeile); kann man die Datei in die UTF 8 Codierung umformatierer. Hierzu muss man nur am Anfang das Modul use Encode qw(decode); importieren.
Last edited: 2016-04-05 01:01:46 +0200 (CEST)

View full thread Zugriff auf Dateien im Ordner public bei Mojolicious::Lite bzw. Dancer2