Norbert Klein: hash (oder einfach mal kein dummes zeug reden)

Beitrag lesen

Hallo.

der hash soll als key die Part Id und als wert eine referenz, auf eine hash erhalten. das ganze klappt hat :-) mit der einschränkung das der hash nur ein key-wert Paar hat (es müssten 12 sein). im hash ist immer nur die letzte zuweisung.

Das Ganze klappt also nicht.

ich finde meine fehler nicht kann mirjemand weiter helfen??

Zum einfachen Verbessern waren es mir zu viele Fehler, und da fastix® recht damit hat, dass das endlich mal eine richtige Aufgabe ist, und ich ein wenig Übung gut gebrauchen kann, hab' ich's dir nochmal neu geschrieben.

Ich hoffe du kannst damit was anfangen, du musst eben schauen, ob die ganzen RegExp's mit deinen Daten richtig funktionieren und ggf. noch ein paar Anpassungen machen, aber das dürfte kein großes Problem sein.

Zu deinem "!!später ausbessern!!"-Kommentar findest du übrigens in der Perl Dokumentation (http://www.perldoc.com/perl5.8.0/pod/perlretut.html#Building-a-regexp) etwas interessantes.

Na ja, hier ist das Dingen:

#!perl -w

use strict;

open(DAT,"<demo.txt") || die $!;
read(DAT,my $dat,-s DAT);
close(DAT);

my %bom;
foreach my $part (split(/\*+/,$dat))
 {
  next if($part =~ /^\s*$/);
  my ($name,$id,$material_type,$den,$element_type,$optional_contact_thickness,$optional_thickness_scale_factor);
  foreach(split(/[\r\n]+/,$part))
   {
    next if(/^\s*$/);
    s/^\s+|\s+$//g;
    if(/^\w+$/){$name = $_;}
    else
     {
      /^([\w\s]+?)[ .=]+?([+-]?(\d+(.\d*)?|.\d+)([eE][+-]?\d+)?)$/;
      if($1 eq "Part ID"){$id = $2;}
      if($1 eq "material type"){$material_type = $2;}
      if($1 eq "den"){$den = $2*1e6;}
      if($1 eq "element type"){$element_type = $2;}
      if($1 eq "optional contact thickness"){$optional_contact_thickness = $2;}
      if($1 eq "optional thickness scale factor"){$optional_thickness_scale_factor = $2;}
     }
   }
  $bom{$id} = {
               name                            => $name,
               material_type                   => $material_type,
               den                             => $den,
               element_type                    => $element_type,
               optional_contact_thickness      => $optional_contact_thickness,
               optional_thickness_scale_factor => $optional_thickness_scale_factor
              };
 }

foreach my $key (keys %bom)
 {
  print "Part ID = $key\n";
  foreach(keys %{$bom{$key}})
   {
    print "  $_ = $bom{$key}{$_}\n";
   }
  print "\n";
 }

Gruß
Norbert