chdir "d:\\CL\\HKPcells"; #where exported cell-hkp are and result files will be. open ARCEL, ">Area_Cel99.txt" or die "cant open area file"; open HCEL, ">height_cel99.txt" or die "cant open height file"; foreach $lib ("cellvb99.hkp", "oldcells.hkp") { #change to list of your exported hkp files open (CEL, "$lib") || die "can not open $lib"; while ($Line = ) { $Units = $1 if ($Line =~ /\.UNITS\s+(\w+)/); $Cell =$1 if ($Line =~ /\.PACKAGE_CELL\s+\"(.+)\"/); if (($Line =~ /\.\.MOUNT_TYPE TH/) or ($Line =~ /\.\.MOUNT_TYPE MIXED/)) { $mount_type{$Cell} = "TH"; } if ($Line =~ /\.\.MOUNT_TYPE SURFACE/) { $mount_type{$Cell} = "SM"; } if ($Line =~ /\.\.PLACEMENT_OUTLINE/) { $Line = ; $height = $1 if ($Line =~ /\.\.\.HEIGHT (\S+)/); print HCEL "$Cell : $height $Units\n" if ($Cell); $Flag = 1; } elsif ($Flag == 1) { if ($Line =~ /\.\.\.CIRCLE_SHAPE/) { $Line = ; $Line = ; $Radius = $1 if ($Line =~ /\.\.\.\.RADIUS\s+(\S+)/); $Area = 3.14 * ($Radius ** 2); print ARCEL "$Cell : $Area $Units\n" if ($Cell); $Area = ''; $Cell = ''; $Flag = 0; } if ($Line =~ /\.\.\.RECT_SHAPE/) { $Line = ; if ($Line =~ /\.\.\.\.XY\s+\((.+)\,(.+)\)\s+\((.+)\,(.+)\)/) { $Xmin = $1,$Ymin = $2, $Xmax = $3, $Ymax = $4; $Area = ($Xmax - $Xmin) * ($Ymax - $Ymin); print ARCEL "$Cell : $Area $Units\n" if ($Cell); $Area = ''; $Cell = ''; $Flag = 0; } } if ($Line =~ /\.\.\.RECT_PATH/) { $Line = ;$Line = ; if ($Line =~ /\.\.\.\.XY\s+\((.+)\,(.+)\)\s+\((.+)\,(.+)\)/) { $Xmin = $1,$Ymin = $2, $Xmax = $3, $Ymax = $4; $Area = ($Xmax - $Xmin) * ($Ymax - $Ymin); print ARCEL "$Cell : $Area $Units\n" if ($Cell); $Area = ''; $Cell = ''; $Flag = 0; } } if ($Line =~ /\.\.\.POLYLINE_SHAPE/) { $Line = ; if ($Line =~ /\.\.\.\.XY\s+\((.+)\,(.+)\)/) { $Xmin = $1; $Xmax = $1; $Ymin = $2; $Ymax = $2; while ($Line = ) { last if ($Line =~ /\.\.\./); if ($Line =~ /\((.+)\,(.+)\)/) { $X = $1, $Y = $2; $Xmin = $X if ($X < $Xmin); $Xmax = $X if ($X > $Xmax); $Ymin = $Y if ($Y < $Ymin); $Ymax = $Y if ($Y > $Ymax); } } $Area = ($Xmax - $Xmin) * ($Ymax - $Ymin); print ARCEL "$Cell : $Area $Units \n" if ($Cell); $Area = ''; $Cell = ''; $Flag = 0; } } } } close (CEL); } close (ARCEL); close HCEL;