Thread Datei lesen und in Hash schreiben? (45 answers)
Opened by Math55 at 2004-01-18 22:12

Patrick
 2004-01-20 15:27
#79279 #79279
User since
2004-01-07
56 Artikel
BenutzerIn
[default_avatar]
Wäre vielleicht besser wenn sie drinnen sind.

Die Lösung von Dubu ist klasse, aber die Kommentare werden weggeschnitten.
Das müsste ich noch umgehen!

Hier erst mal der Code

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/perl
use strict;
use warnings;

my %params;

open PARAM, "/homes/Patrick/Perl/Tk/Project2.bak"
or die $!;

my $buffer = '';
while (<PARAM>)
{
# Kommantar rausholen
  my (@splitter1);
  @splitter1 = split(/#/ , $_);

# Kommentare loeschen
  s/\s*#.*?(\\?\n)/$1/;

# Leerzeichen an Anfang und Ende loeschen
  s/^\s+//;
  s/\s+$//;

# Zeile jetzt leer?
  unless (length)
  {     # vorhandenen Buffer bearbeiten
      insert_keys (\$buffer, \%params);
      next;
  }

# Zeile merken
  $buffer .= $_;
  if ($buffer =~ /\\$/)   # Fortsetzung folgt?
  {
# Fortsetzungszeichen durch Leerzeichen ersetzen
      chop $buffer; $buffer .= " ";
      next;
  }

# Ein Satz zusammen => eintragen
  insert_keys (\$buffer, \%params, @splitter1[1]);

}
# Falls die letzte Zeile noch ein Fortsetzungszeichen hatte ...
insert_keys (\$buffer, \%params);


use Data::Dumper;
print Dumper \%params;

#############################################
sub insert_keys
{

# An dieser Stelle müsste noch die Kommantare mit eingetragen werden

  my ($bufferp, $paramp, $komment) = @_;  # Kommentare müssen mit

  return unless defined $$bufferp && length $$bufferp;

  die "Syntaxfehler in Zeile $." unless index ($$bufferp, '=') >= 0;
  my ($key, $val) = split /\s*=\s*/, $$bufferp, 2;


  unless (defined $val)
  {
      $paramp->{$key} = undef;
      return;
  }
  if ($val =~ /\s/)   # Leerzeichen zwischen Woertern? => Liste
  {
      my @vals = split " ", $val;
      $paramp->{$key} = \@vals;
  }
  else
  {
      $paramp->{$key} = $val;
  }
  $$bufferp = "";
}
##########################################
Mfg
Paddy

Perl ist göttlich, die Kunst besteht darin Perl anwenden zu können.

View full thread Datei lesen und in Hash schreiben?