Schrift
[thread]6381[/thread]

string aus 2 dateien in ein 3 Datei schreiben

Leser: 1


<< >> 3 Einträge, 1 Seite
Rambo
 2004-07-05 19:17
#83898 #83898
User since
2003-08-14
803 Artikel
BenutzerIn

user image
hallo

ich habe folgendes konstruckt:

datei 1 hat folgende daten
wks-name1 = W1234
wks-name2 = W9876

datei 2 hat folgende daten
[W1234]
GATEWAY = 10.10.1.172
RID = 0x21
SID = 0x6B
MAC = 0x01508DAB
MACPREFIX = 0x4000

[W9876]
GATEWAY = 10.10.1.173
RID = 0x23
SID = 0x5A
MAC = 0x01518DAD
MACPREFIX = 0x4000

datei 3 (diese wird aus datei 1 und 2 neu erstellt) soll so aussehen:
[wks-name1]
IP_GATEWAY = 10.10.1.172
PARAMETER = V216B #entsteht aus dem Wert RID =0x23 und SID = 0x5A
ID = $W1234 #entsteht aus dem Wert [W1234]
VMAC = 400001508DAB #entsteht aus dem Wert MAC = 0x01508DAB MACPREFIX = 0x4000

[wks-name2]
IP_GATEWAY = 10.10.1.173
PARAMETER = V235A #entsteht aus dem Wert RID =0x23 und SID = 0x5A
ID = $W9876 #entsteht aus dem Wert [W9876]
VMAC = 400001518DAD #entsteht aus dem Wert MAC = 0x01518DAD MACPREFIX = 0x4000

kann ich das mit Perl machen und habt ihr evtl. ein snippet für mich?

merci rambo
Strat
 2004-07-06 01:43
#83899 #83899
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
datei zwei sieht nach einer INI-Datei aus... auf CPAN gibt es genuegend Module, die dir dabei helfen...

sonst vielleicht

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
42
43
44
45
46
47
48
49
50
my %data1 = ();
unless (open (FH1, $file1)) {
 die ".....: $!\n";
}
while (<FH1>) {
 chomp($_);
 my ($key, $value) = split(/\s*=\s*/, $_, 2);
 $data1{$value} = $key;
}
close (FH1);

my %data = ();
unless (open (FILE2, $file2)) {
 die "Error in opening '$file2': $!\n";
}
else {
 local $/; # alles auf einmal einlesen
 my $content2 = <FILE2>;
 close (FILE2);
 $content2 =~ s/(^\s+|\s+$)//; # whitespace am anfang und ende killen

 # aufsplitten nach \n[....]\n und [...] auch speichern; ok, man koennte es
 # wohl auch direkt in einem hash speichern, aber so ist es fehlertoleranter
 my @content = split(/\n(\[.+?\])\s*\n/, $content2)
 my $key;

 foreach my $entry (@content) {
   if ($entry =~ /\[(.+)\]/) { # ueberschrift [...] feststellen
     $key = $1;
     next;
   }
   else { # muss der rest sein
     foreach my $line (split(/\n/, $entry)) { # nach zeilen aufteilen
       my ($subKey, $value) = split(/\s*=\s*/, $line, 2); # line nach = aufsplitten

       # hier waere vielleicht eine ueberpruefung auf existenz nicht schlecht
       %data{$key}->{$subKey} = $value;
   } # foreach $line
 } # foreach $entry
} # else

# ausgeben
foreach my $key (keys %data) {
 print "[$data1{$key}]\n";
 print "IP_GATEWAY = $data{$key}->{GATEWAY}\n";
 print "VMAC =   $data{$key}->{MACPREFIX}$data{$key}->{MAC}\n";
 # ...

 print "\n";
} # foreach $key

nicht getestet, aber vielleicht funktionierts ja... ein bisschen mehr fehlerueberpruefung waere wohl auch nicht schlecht...\n\n

<!--EDIT|Strat|1089063817-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Rambo
 2004-07-06 12:10
#83900 #83900
User since
2003-08-14
803 Artikel
BenutzerIn

user image
@strat
danke erstmal für das code stück
dies hat mal wieder gezeigt das ich noch weit weit
weg bin was perl betrifft aber ich versuche dies mal
stück für stück zu verstehen :-)

merci
rambo
<< >> 3 Einträge, 1 Seite



View all threads created 2004-07-05 19:17.