Thread Linux anonymisierer (35 answers)
Opened by sd911 at 2016-09-19 08:10

GwenDragon
 2016-09-19 11:26
#185393 #185393
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
Eine Möglichkeit wie ein solches Perl-Programms aussehen kann:
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/perl

### Notwendige Module laden
use strict;      # überprüfe programm vor ablauf strikt auf Fehler
use warnings;    # und gib auch Fehler aus
use utf8;        # erlaube UTF-Zeichen in Quelltext

### Modul für das Erfassen der Kommandozeilenparameter deklarieren
use Getopt::Long;

### Variablen deklarieren
my $name;
my $prename;
my $filename;

### Ersatzstring aus 50mal Zeichen '-' definieren
my $c50 = '-' x 50;

### Unterprogramm für Hilfetext definieren
sub help {
    print <<TXT;
!!!! FEHLER !!!!

Aufruf: 

         ReName -p "Vorname" -n "Name" -f "Dateiname"

Notwendige Parameter sind:

         -p oder -n
         und -f

Folgende Parameter sind gültig:

        -p        für Vorname
        --vorname

        -n        für Name
        --name     
        
        --datei   für Dateinamen der Eingabedatei
        -f
TXT

    exit 255;    # Programmabbruch
}

### Art der Kommandozeilenparameter definieren
my %opts = (
    'vorname|p=s' => \$prename,    # Parameter Vorname als String
    'name|n=s'    => \$name,       # Parameter Name als String
    'datei|f=s' =>
      \$filename    # Parameter Dateiname der einzulesenden Datei als String
);
### Parameter einlesen
GetOptions(%opts);

### Vorhandensein der Parameter prüfen
if ( not defined($name) and not defined($prename) ) {
    help();         # bei fehlenden Parametern Hilfe anzeigen
}

### Eingabedatei öffnen
my $in_fh;
open $in_fh, '<', $filename    # im Lesemodus öffnen
  or die "Datei '$filename' kann nicht geöffnet werden: $!" ; # bei Fehlschlag Fehler ausgeben

### Ausgabedatei öffnen
my $out_fh;
my $out_filename = "$filename.tmp";    # temporärer Dateiname
open $out_fh, '>', $out_filename       # im Schreibmodus öffnen
  or die "Datei '$out_filename' kann nicht erzeugt werden: $!" ; # bei Fehlschlag Fehler ausgeben
flock $out_fh, 0;    # Datei gegen mehrfachen Zugriff sperren

### Eingabedatei einlesen
while ( my $line = <$in_fh> ) {    # Zeilenweise in Variable $line einlesen

    if (length $name               # falls Parameter $name vorhanden
        and $line =~ /#\Q$name\E\s*Name#/
      ) # und $name mit möglichen nachfolgenden Leerzeichen in $line vorhanden
    {
        $line =~ s/#\Q$name\E\s*Name/#${c50}Name/
          ;    # ersetze das Vorkommen durch den Ersatzstring
    }

    if (length $prename    # falls Parameter $prename vorhanden
        and $line =~ /#\Q$prename\E\s*Vorname#/
      ) # und $prename mit möglichen nachfolgenden Leerzeichen in $line vorhanden
    {
        $line =~ s/#\Q$prename\E\s*Vorname/#${c50}Vorname/;    # ersetze das Vorkommen durch den Ersatzstring
    }

    print $out_fh $line;    # speichere neue Zeile in Ausgabedatei
}

###  Eingabedatei schließen
close $in_fh                            
  or die "Datei '$filename' kann nicht geschlossen werden: $!";  # bei Fehlschlag Programmabbruch mit Fehlermeldung

### Ausgabedatei schließen
close $out_fh   
  or die "Datei '$out_filename' kann nicht geschlossen werden: $!"; # oder bei Fehlschlag Programmabbruch mit Fehlermeldung

# alte Eingabedatei löschen
unlink $filename or die "Datei '$filename' kann nicht gelöscht werden!";
# Ausgabedatei in Dateinamen der Eingabedatei umbenennen
rename ($out_filename, $filename) # umbenennen
        or die "Datei '$out_filename' kann nicht in '$filename' umbenannt werden!"; # oder Programmabbruch mit Fehlermeldung

1;


Ließe sich auch noch anders machen oder erweitern.
Frage bitte wenn was nicht klappt.

/EDIT: Ich weiß allerdings nicht wie deine Datei wirklich aufgebaut ist.
kann sein, dass ich deine umgangsprachlich beschriebene Datenzeile falsch interpretiert habe.
Last edited: 2016-09-19 11:48:04 +0200 (CEST)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Linux anonymisierer