0
i後解析大.sql
文件這是從一個%hashtable
打印輸出的:更新和在哈希表中創建新的元素
Key:AS_LINR
Value:
Name:DS_LSNE_DDD_TS_A
Type:view
Parents:DM_LINE_END MINA_TI_GRP_V
這是%hash
:
$hashtable{$name}="Name:$name
Type:$type
Parents:@parents"."\n\n
".
"----------------------------"
;
我需要請檢查每位家長,如果他在%hash
中存在key
。如果他這樣做,我需要更新和添加新的申請命名的孩子:,我會添加一個值到外地孩子在那裏我第一次發現父。就像本例中的名稱:
Key:DM_LINE_END
Value:
Name:DS_LSNE_DDD_TS_A
Type:view
Children:AS_LINR
而且我需要爲每個家長做這件事。我想通過添加新元素來更新散列,如果has的鍵不存在,我必須創建一個。 如果我必須更好地解釋我要做的事情,請在評論中提問。
這裏是我的Perl代碼:
my $var=0;
my @joinparents=();
use warnings;
my %hashtable;
open(DATA,'<','NaViews.sql') or die "Error $!";
open(Writer,'>','ResultFile.txt') or die "Error $!";
open(Writer1,'>','AuxResult.txt') or die "Error $!";
my @create_cmds =();
my $create_cmd = "";
READ_DATA : while (<DATA>) {
chop;
my $ln = $_;
$ln =~ s/^\s+//;
$ln =~ s/\s+$//;
next READ_DATA if($ln =~ /^\-\-/);
next READ_DATA if($ln =~ /^REM/);
if($create_cmd ne "") {
$create_cmd = $create_cmd." ".$ln;
}
if($ln =~ /^create/i) {
$create_cmd = $ln;
}
elsif($ln =~ /\;$/) {
push @create_cmds, $create_cmd;
$create_cmd = "";
}
}
close DATA;
my @views =();
foreach my $create_cmd (@create_cmds) {
$create_cmd =~ s/\s+/ /;
$create_cmd =~ s/^\s+//;
$create_cmd =~ s/\s+$//;
my $name = get_view($create_cmd);
my $type = get_type($create_cmd);
my $content = substr($create_cmd, 0, -1);
my @parents =();#get_parents();
my @children =();#get_children();
#------------------------------------------------------------------------
my @froms = split(/ from\s+/i, $create_cmd);
my @joins = split(/ join /i, $create_cmd);
#parcurge mai multe for in aceeasi structura
#FOR FROM
# body...
foreach my $i ([email protected]) {
#print Writer1 "$froms[$i]"."\n\n";
my $from = (split(/ where |select | left | left | right | as /i, $froms[$i])) [0];
$from=~s/^\s+//;
$from=~s/\(+//;
my @Spaces = split(/, | , /,$from);
foreach my $x ([email protected]) {
my $SpaceFrom = (split(/ /,$Spaces[$x])) [0];
$SpaceFrom=~s/;//;
$SpaceFrom=~s/\)+//;
#print Writer1 $SpaceFrom."\n\n";
push(@parents,$SpaceFrom);
# print "\n\n".$SpaceFrom."\n\n";
# print Writer "\n\n".$SpaceFrom."\n\n";
}
foreach my $x ([email protected]){
#print "$joins[$i]"."\n\n";
my $join = (split(/ on /i,$joins[$x])) [0];
my $joinspace = (split(/ /i,$joins[$x])) [0];
#print Writer "\n\n".$join."\n\n";
#print Writer1 $joinspace."\n\n";
#"$joinspace\n\n";
push(@parents,$joinspace);
print Writer1"\n\n".$parents[$_]."\n\n";
}
}
push @views, [$name, $type, $content, @parents, @children];
$hashtable{$name}="[0]Name:$name
[1]Type:$type
[2]Content:$content
[3]Parents:@parents"."\n\n
".
"----------------------------";
}
print Writer "Key:$_
Value:
$hashtable{$_}\n" foreach (keys%hashtable);
#------------------------------------------------------------------------------
print_views(\@views);
exit;
#------------------------------------------------------------------------------
sub get_view {
my $create_cmd = $_[0];
my $tmp = (split(/ view | trigger | table /i, $create_cmd))[1];
$tmp =~ s/^\s+//;
my $view = (split(/\s+/, $tmp))[0];
return $view;
}
#-----------------------------------------------------------------------------
sub get_type{
my $create_cmd = $_[0];
my $tmp = (split(/ replace /i, $create_cmd))[1];
$tmp =~ s/^\s+//;
my $view = (split(/\s+/, $tmp))[0];
return $view;
}
#-----------------------------------------------------------------------------
sub get_parents {
}
sub get_children {
}
get_children();
close Writer1;
close Writer;
這是一個數據塊,我有如何解析的樣子:如果你想輕鬆地找出父母的
create or replace view MINA_TI_GRP_V
as
select NVL(max(t1.interval_group),(select dm_group from sdate_dm_grp_v)) AS DM_GROUP,
(t2.interval_number) INTERVAL_NUMBER , t2.time_interval_s
from MINA_INTERVAL_CONTROL t2
left join DM_TI_GRP_DATE_TIME t1 on t2.time_interval_s >= t1.time_interval_s
group by t2.interval_number , t2.time_interval_s
order by t2.interval_number;
哪裏是你的代碼? – Toto
你的Perl代碼在哪裏?我們需要[mcve]添加到問題中,以便我們知道您要做什麼 –
我向您詢問了perl代碼並且編輯您的問題,而不是在註釋中放置一些代碼。這是不可讀的。 – Toto