perl hash或者 OOP 问题

dark_tom 2013-02-05 10:46:33
有数据结构:
type=dielectric
name=sti_base
thickness=0.07
eps=4

type=diffusion
name=diff_
thickness=0.25
min_width=0.072
min_spacing=0.099
src_drn=( nsd_ psd_ )
r_sheet=15

type=dielectric
name=sti
thickness=0.25
eps=4

type=contact
name=dfcont_
min_width=0.081
min_spacing=0.099
measured_from=diff_
measured_to=m1_
enclosure_up=0
enclosure_down=0.0135
n1=0.19683
n2=0
min_poly_cont_spacing=0.0495


。。。。。。

其中,name是唯一的,每一段都是一个事物,“=”左边是属性,右边是值。
怎么把这个文件的内容读到一个hash中去呢?或者读到OOP中去?
注,每一个“type”是新的段落开始标志
...全文
48 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bugs2k 2013-02-05
用数组行不?
#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

my $nl = 0;
my $i = 0;
my @dats = [];

while (<DATA>) {
    chomp;
    if (/^\s*$/) {
        $i++ if ($nl == 1);
        $nl = 0;
        next;
    }
    push @{$dats[$i]}, [split /\s*=\s*/];
    $nl = 1;
}
print Dumper(\@dats);

__DATA__

type=dielectric
name=sti_base
thickness=0.07
eps=4

type=diffusion
name=diff_
thickness=0.25
min_width=0.072
min_spacing=0.099
  • 打赏
  • 举报
回复
dark_tom 2013-02-05
多谢,给分了,如有有其他问题还要请教
  • 打赏
  • 举报
回复
dark_tom 2013-02-05
我先试试你的代码,OK了马上结贴
  • 打赏
  • 举报
回复
bugs2k 2013-02-05
#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

my $nl = 0;
my $i = 0;
my @dats;

while (<DATA>) {
    chomp;
    if (/^\s*$/) {
        $i++ if ($nl == 1);
        $nl = 0;
        next;
    }
    my($n, $v) = split /\s*=\s*/;
    $dats[$i]->{$n} = $v;
    $nl = 1;
}
print Dumper(\@dats);

__DATA__

type=dielectric
name=sti_base
thickness=0.07
eps=4

type=diffusion
name=diff_
thickness=0.25
min_width=0.072
min_spacing=0.099
src_drn=( nsd_ psd_ )
r_sheet=15

type=dielectric
name=sti
thickness=0.25
eps=4

type=contact
name=dfcont_
min_width=0.081
min_spacing=0.099
measured_from=diff_
measured_to=m1_
enclosure_up=0
enclosure_down=0.0135
n1=0.19683
n2=0
min_poly_cont_spacing=0.0495
  • 打赏
  • 举报
回复
bugs2k 2013-02-05
#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

my $nl = 0;
my $i = 0;
my %dats;

while (<DATA>) {
    chomp;
    if (/^\s*$/) {
        $i++ if ($nl == 1);
        $nl = 0;
        next;
    }
    my($n, $v) = split /\s*=\s*/;
    $dats{$i}->{$n} = $v;
    $nl = 1;
}
print Dumper(\%dats);

__DATA__

type=dielectric
name=sti_base
thickness=0.07
eps=4

type=diffusion
name=diff_
thickness=0.25
min_width=0.072
min_spacing=0.099
src_drn=( nsd_ psd_ )
r_sheet=15

type=dielectric
name=sti
thickness=0.25
eps=4

type=contact
name=dfcont_
min_width=0.081
min_spacing=0.099
measured_from=diff_
measured_to=m1_
enclosure_up=0
enclosure_down=0.0135
n1=0.19683
n2=0
min_poly_cont_spacing=0.0495
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言
加入

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2013-02-05 10:46
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: