Thread Zeiger in einer Datei, um da die Zeilen aus der 2. Datei zu schreiben
(6 answers)
Opened by alla at 2010-05-26 18:36
Ich gehe mal davon aus, dass die Nummer des Blockes mit der Position der "find-spot" Einträge korrespondiert. Weiterhin nutze ich die XML-Datei von pq.
"XML::Simple" verändert die XMl-Datei beim schreiben, Wenn das nicht gewünscht ist musst du auf "XML::LibXML" oder ähnliches zurück greifen. 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 #!/usr/bin/perl use strict; use warnings; use XML::Simple; my $file_add='test.txt'; my $file_xml='text.xml'; my @blocks=parse_file($file_add); my $xml=XMLin($file_xml); # hier das "items" passend ersetzen my $data_add=$xml->{items}->{'find-spot'}; for my $pos (0..$#blocks) { my $data_val=$blocks[$pos]; next unless($data_val); if(ref($data_add) eq 'ARRAY') { next unless($data_add->[$pos]); $data_add=$data_add->[$pos]; } if(exists($data_add->{environment})) { if(ref($data_add->{environment}) eq 'ARRAY') { push(@{$data_add->{environment}},@$data_val) } else { $data_add->{environment}=[$data_add->{environment},@$data_val]; } } else { $data_add->{environment}=\@$data_val; } } print XMLout($xml); ######################################################################## sub parse_file { my $file=shift; my @blocks=(); local $/='______________'; open(my $fh, '<', $file) or die("ERROR open $file ($!)\n"); while(my $block=<$fh>) { my @data=(); my $id=@blocks; for my $line (split("[\r\n]+",$block)) { next unless($line); if($line=/^\s*Block\s*(\d+):/) { $id=$1; next; } push(@data,$line); } $blocks[$id]=\@data; } close($fh); return @blocks; } |