perl -i -lpe's/null/GYN/ if /GYN/' eingabedatei.txt
1 2 3 4 5 6 7
my $text = <<EOT; MARIS|DOC|XXXXX|GYN endgl. Brief ambulante OP|XXXXX|XXXX|8228284|1889286|XXXXXX12|XXXXX|0003999998||null|20190719|ZWMAMB EOT print "Vorher: $text\n"; $text =~ /GYN/ and $text =~ s/\|null\|/|GYN|/g; print "Nachher: $text\n";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Vorher:
#
#MARIS|DOC|XXXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|null||null|20190527|ZWMAB
#
#Nachher:
#
#MARIS|DOC|XXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|200088||CH2|20190527|ZWMAB
my $line = "ARIS|DOC|XXXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|null||null|20190527|ZWMAB";
my @felder = split '|',$line;
if ($felder[3] =~ /(.+) /) {
$felder[10] = 200088;
$felder[12] = $1;
}
2019-08-05T07:50:08 GwenDragonIdee, ich nehme an die Felder haben immer das auszulesende Wort und die null an denselben Stellen:
Code: (dl )1
2
3
4
5
6
7
8
9
10
11
12
13
14#Vorher:
#
#MARIS|DOC|XXXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|null||null|20190527|ZWMAB
#
#Nachher:
#
#MARIS|DOC|XXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|200088||CH2|20190527|ZWMAB
my $line = "ARIS|DOC|XXXXXX|CH2 endgültiger Arztbrief|XXXXX|XXXXX|8018221|XXXXX|XXXXX|20190527|null||null|20190527|ZWMAB";
my @felder = split '|',$line;
if ($felder[3] =~ /(.+) /) {
$felder[10] = 200088;
$felder[12] = $1;
}
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
$in_filename = 'A.DAT';
if ( open my $in_fh, '<', $in_filename ) { # Datei zum Lesen öffnen
if ( open my $out_fh, '>', "$in_filename.out" ) { # Ausgabe-Datei zum Schreiben öffnen
while (my $line = <$in_fh> ) { # eine Zeile einlesen
$line =~ s/\x0A$//; # \n (LF, hex 0A) entfernen
my @felder = split '\|',$line; # |-getrennte Felder aufspalten
if ($felder[3] =~ /(\S+)\s/) { # mit Regex alles bis zum Leerzeichen bei Feld 4 einfangen
$felder[12] = $1; # gefangenes Feld 13 zuweisen
$felder[10] = 200088; # Feld 11 Wert setzen
}
$line = join '|',@felder; # Zeile wieder zusammenbauen
print $out_fh $line, "\x0D"; # geänderte Zeichenkette speichern
}
}
else {
die "Kann Datei '$in_filename.out' nicht öffnen/schreiben!";
}
}
else {
die "Kann Datei '$in_filename' nicht öffnen!";
}
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
use strict;
use warnings;
use diagnostics;
my $dir = 'C:\Users\gemuendadm\Desktop\Regex Absatz Test';
opendir (DIR, $dir) or die $!;
while (my $file = readdir(dir))
{
if ( open my $in_fh, '<', $in_filename ) { # Datei zum Lesen öffnen
if ( open my $out_fh, '>', "$in_filename.out" ) { # Ausgabe-Datei zum Schreiben öffnen
while (my $line = <$in_fh> ) { # eine Zeile einlesen
$line =~ s/\x0A$//; # \n (LF, hex 0A) entfernen
print $out_fh $line; # geänderte Zeichenkette speichern
}
}
else {
die "Kann Datei '$in_filename.out' nicht öffnen/schreiben!";
}
}
else {
die "Kann Datei '$in_filename' nicht öffnen!";
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13
my $dir = 'C:\Users\gemuendadm\Desktop\Regex Absatz Test'; opendir (my $dh, $dir) || die "can't opendir $dir: $!"; while (my $in_filename = readdir($dh)) { if ( $in_filename =~ /^\./ && -f "$dir/$in_filename") { # wenn Dateiname kein . oder .. ist #### hier den Code zum Bearbeiten der Datenzeilen } } closedir $dh || die "can't closedir $dir: $!";