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

topeg
 2010-05-26 19:30
#137633 #137633
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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;
}

View full thread Zeiger in einer Datei, um da die Zeilen aus der 2. Datei zu schreiben