Thread Sonderzeichen in HTML austauschen (16 answers)
Opened by hago at 2017-06-29 22:45

Linuxer
 2017-06-30 14:37
#186759 #186759
User since
2006-01-27
3887 articles
HausmeisterIn

user image
Ein paar allgemeine Tipps.

1. wie schon erwähnt wurde, nutze use strict; und use warnings;. Die helfen Dir beim Programmieren.

2. Eine saubere Formatierung/Einrückung des Quellcodes hilft beim Verständnis.

3.1. Beim Perldoc:perlfunc open sollte man besser lexikalische Filehandles nutzen; keine Barewords; z.B. open( my $fh, $filename ) or die "open($filename) failed: $!";

3.2. Die 3-Argument-Form des open() sollte bevorzugt werden; z.B. open( my $fh, ">", $filename ) or die "open($filename) failed: $!";

3.3. Lass Dir doch anzeigen, warum ein open fehlgeschlagen ist; der Fehler sollte in $! stehen; siehe die Beispiele in 3.1 und 3.2


Speziell zum gezeigten Code:

Ich würde die Definition von %UMLAUTE aus den Schleifen rausnehmen und darüber postieren.
Warum muss dieser Hash für jede Zeile jeder Datei neu angelegt werden? Die Daten verändern sich doch nicht?
Das gleiche gilt für den Regex in @UMLKEYS. Das kann man auch auslagern.
Warum ist das eigentlich ein Array und kein Skalar? Es wird doch nur ein Regex erstellt; der passt auch gut in einen Skalar.

Dann ist der Ablauf unnötig kompliziert. Jede gelesene Zeile wird an $daten gehangen und für jede Zeile wird der Regex angewendet. D.h. der Regex durchwandert für jede weitere Zeile alle vorigen Zeilen immer wieder mit; das ist verschenkte Zeit und Arbeit.

Man könnte auch noch das Modul Perldoc:Tie::File verwenden, um sich die Arbeit zu sparen die Daten der Dateien komplett in den Speicher zu laden.

Ein ungetestetes Schnipsel:

Code (perl): (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
42
use strict;
use warnings;
# load your FTP module
use Tie::File;


# define @files
my @files = (
  ...
);

# set up FTP
...


my %UMLAUTE = (
  'Ä'=>'Ä',
  'Ö'=>'Ö',
  'Ü'=>'Ü',
  'ä'=>'ä',
  'ö'=>'ö',
  'ü'=>'ü',
  'ß'=>'ß',
);

my $RE_UMLAUTE = join("|", keys(%UMLAUTE));

for my $file (@files) {   

    tie my @lines, 'Tie::File', $file or die "Could not tie $file: $!";

    for my $line ( @lines ) {
        $line =~ s/($RE_UMLAUTE)/$UMLAUTE{$1}/g;
    }

    untie @lines;

    copy($datei,"C:\\xampp\\htdocs\\aserver\\AAA\\AAApflugi\\listen\\".$datei); 

    $ftp->ascii();
    $ftp->put("$datei");
}


edit: fixed typo in Code
Last edited: 2017-06-30 19:28:11 +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!

View full thread Sonderzeichen in HTML austauschen