Thread RegEx: Ersetze, wenn Zeichen in gerader Anzahl vorkam (11 answers)
Opened by pktm at 2009-05-25 12:15

pktm
 2009-05-25 12:41
#121873 #121873
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hier ein Beispiel: phpMyAdmin exportiert Daten aus einer MySQL-Tabelle. Feldtrenner ist , und die Felder sind eingeschlossen von ~. Ist ein Feld nun leer (nicht NULL, sondern einfach leer, z.B. ''), dann stehen da zwei ,, obwohl ich da gerne ,~~, hätte.

Hier der Code, der das flickt:
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
#!/usr/bin/perl
use strict;
use warnings;

my $line = '~1~,,~234~,7,~,,~,8';

my $newline = ""; # löl
my $in = 0;
for my $i ( 0 .. length($line) ) {
my $c = substr($line, $i, 1);
$newline .= $c;
print $newline;

# determine whenever we are in a field or outside.
if( $in == 0 and $c eq '~' ) {
# now we're in a field
$in = 1;
next;
}if( $in == 1 and $c eq '~' ) {
# now we're going outside to play hide and ...
$in = 0;
next;
}if( $in == 0 and $c eq ',' ) {
# we're outside, now check if next char is a , too
if( substr($line, $i, 2) eq ',,' ) {
print ' -> ' . substr($line, $i, 2);
$newline .= '~~';
}
}

print "\n";
}

print( $newline );
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread RegEx: Ersetze, wenn Zeichen in gerader Anzahl vorkam