Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将多维哈希转换为csv_Perl_Multidimensional Array_Hashtable - Fatal编程技术网

Perl 将多维哈希转换为csv

Perl 将多维哈希转换为csv,perl,multidimensional-array,hashtable,Perl,Multidimensional Array,Hashtable,我有一个多维散列,我正在屏幕上打印,我想把散列转换成CSV格式的数据。 我的脚本的示例输出 $VAR1 = { '1' => { 'EVENT_NAME' => '"x1"', 'NV_MANAGED_OBJECT_INSTANCE' => '"SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=WBSC1,BssFunction

我有一个多维散列,我正在屏幕上打印,我想把散列转换成CSV格式的数据。 我的脚本的示例输出

$VAR1 = {
          '1' => {
                   'EVENT_NAME' => '"x1"',
                   'NV_MANAGED_OBJECT_INSTANCE' => '"SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=WBSC1,BssFunction=BSS_ManagedFunction,BtsSiteMgr=WV5619"',
                   'EVENT_TYPE' => '"x5"',
                   'NV_MANAGED_OBJECT_CLASS' => '"BtsSiteMgr"',
                   'AdditionalText_Line03' => '"MO                                 RSITE           ALARM SLOGAN"',
                   'NV_SPECIFIC_PROBLEM' => '"RADIO X-CEIVER ADMINISTRATION MANAGED OBJECT FAULT"',
                   'ResynchEvent' => '"false"',
                   'SubNetwork' => '"ONRM_RootMo"',
                   'SubNetwork_0' => '"ONRM_RootMo"',
                   'NV_PROBABLE_CAUSE' => '"0"',
                   'AdditionalText_Line04' => '"RXOCF-87                           WV5619          BTS EXTERNAL"',
                   'RawCaptureTimeStamp' => '1449806147',
                   'BssFunction' => '"BSS_ManagedFunction"',
                   'DOMAIN_NAME' => '"ALARM_IRP_VERSION_1_1"',
                   'AdditionalText_Line02' => '"MANAGED OBJECT FAULT"',
                   'NV_PROPOSED_REPAIR_ACTIONS' => '""',
                   'NV_ACK_TIME' => '"12/11/15 4:55:45 AM"',
                   'AdditionalText_Line01' => '"RADIO X-CEIVER ADMINISTRATION"',
                   'NV_ACK_STATE' => '"2"',
                   'NV_SYSTEM_DN' => '"Ericsson OSS IRPAgent"',
                   'ManagedElement' => '"WBSC1"',
                   'SubNetwork_1' => '"AXE"',
                   'BtsSiteMgr' => '"WV5619"',
                   'NV_EVENT_TIME' => '"12/11/15 4:55:00 AM"',
                   'AdditionalText_Line06' => '"-ProbableCause(OSS)=Different causes possible for same message"',
                   'AdditionalText_LineCount' => '"7"',
                   'AdditionalText_Line05' => '"END"',
                   'AdditionalText_Line00' => '"*** ALARM 505 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0455"',
                   'NV_ADDITIONAL_TEXT' => '"*** ALARM 505 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0455\\nRADIO X-CEIVER ADMINISTRATION\\nMANAGED OBJECT FAULT\\n\\nMO                                 RSITE           ALARM SLOGAN\\nRXOCF-87                           WV5619          BTS EXTERNAL\\n\\nEND\\n-ProbableCause(OSS)=Different causes possible for same message"',
                   'NV_NOTIFICATION_ID' => '"2267705"',
                   'AdditionalText_Line07' => '"-ProbableCause(OSS)=Different causes possible for same message"',
                   'NV_ACK_USER_ID' => '""',
                   'NV_ALARM_ID' => '"55079020"',
                   'NV_PERCEIVED_SEVERITY' => '"4"'
                 },
          '0' => {
                   'EVENT_NAME' => '"x4"',
                   'NV_MANAGED_OBJECT_INSTANCE' => '"SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=WBSC1,BssFunction=BSS_ManagedFunction,BtsSiteMgr=WV5619"',
                   'EVENT_TYPE' => '"x5"',
                   'NV_MANAGED_OBJECT_CLASS' => '"BtsSiteMgr"',
                   'AdditionalText_Line03' => '"MO                                 RSITE           ALARM SLOGAN"',
                   'NV_SPECIFIC_PROBLEM' => '"RADIO X-CEIVER ADMINISTRATION MANAGED OBJECT FAULT"',
                   'ResynchEvent' => '"false"',
                   'SubNetwork' => '"ONRM_RootMo"',
                   'SubNetwork_0' => '"ONRM_RootMo"',
                   'NV_PROBABLE_CAUSE' => '"0"',
                   'AdditionalText_Line04' => '"RXOCF-87                           WV5619          BTS EXTERNAL"',
                   'RawCaptureTimeStamp' => '1449806146',
                   'BssFunction' => '"BSS_ManagedFunction"',
                   'DOMAIN_NAME' => '"ALARM_IRP_VERSION_1_1"',
                   'AdditionalText_Line02' => '"MANAGED OBJECT FAULT"',
                   'NV_PROPOSED_REPAIR_ACTIONS' => '""',
                   'NV_ACK_TIME' => '"12/11/15 4:55:45 AM"',
                   'AdditionalText_Line01' => '"RADIO X-CEIVER ADMINISTRATION"',
                   'NV_ACK_STATE' => '"2"',
                   'NV_SYSTEM_DN' => '"IRPAgent"',
                   'ManagedElement' => '"WBSC1"',
                   'SubNetwork_1' => '"AXE"',
                   ' Status_TicketType' => '0',
                   'BtsSiteMgr' => '"WV5619"',
                   'NV_EVENT_TIME' => '"12/11/15 4:55:00 AM"',
                   'AdditionalText_Line06' => '"-ProbableCause(OSS)=Different causes possible for same message"',
                   'AdditionalText_LineCount' => '"7"',
                   'AdditionalText_Line05' => '"END"',
                   'AdditionalText_Line00' => '"*** ALARM 504 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0451"',
                   'NV_ADDITIONAL_TEXT' => '"*** ALARM 504 A3/APT \\"WBSC1/G14B/04/0\\"U 151211 0451\\nRADIO X-CEIVER ADMINISTRATION\\nMANAGED OBJECT FAULT\\n\\nMO                                 RSITE           ALARM SLOGAN\\nRXOCF-87                           WV5619          BTS EXTERNAL\\n\\nEND\\n-ProbableCause(OSS)=Different causes possible for same message"',
                   'NV_NOTIFICATION_ID' => '"2267704"',
                   'NV_ACK_USER_ID' => '""',
                   'NV_ALARM_ID' => '"55079016"',
                   'NV_PERCEIVED_SEVERITY' => '"6"'
                 }
        };
负责将文件遍历为哈希的代码:

my $i=0;
open my $cap1, $file or die "Could not open $file: $!";
while( my $line = <$cap1>)  {
        my @pairs;
        my $name;
        my $value;
        if($line ne ''){
                @pairs = split / = /, $line;
                $name = $pairs[0];
                chomp($name);
                $value = $pairs[1];
                chomp($value);
        }
        if($name ne '' && $name !~ /^Status_/){
                $data{$i}{$name} = $value;
        }
        if($name =~ /^RawCaptureTimeStamp/){
                $i++;
        }
}
print Dumper \%data;
my$i=0;
打开我的$cap1,$文件或死亡“无法打开$file:$!”;
while(我的$line=){
我的@pairs;
我的$name;
我的美元价值;
如果($ne行“”){
@pairs=split/=/,$line;
$name=$pairs[0];
chomp($name);
$value=$pairs[1];
咀嚼(价值);
}
如果($name-ne''&&$name!~/^Status\){
$data{$i}{$name}=$value;
}
如果($name=~/^rawCaptureTimstamp/){
$i++;
}
}
打印转储文件\%数据;
提示:每组散列中的列不是固定的。它是动态的。
但是,我在另一个数组中得到了所有可能的列名。因此,您可以假设我在一个数组文件中有所有列(事件名称、事件类型……)。使用它,我需要将现有哈希转换为CSV。

自己找到了解决方案:

foreach my $j (sort keys %data) {
        foreach (@uniqueNames) {
                if(exists($data{$j}{$_})){
                        print "$data{$j}{$_},";
                }
                else{
                        print "\"\"",;
                }
        }
        print "\n";
}

其中,@uniqueNames是一个数组,包含原始哈希表中所有可能的唯一列。

请小心引用,如果您的值包含引号,则应根据您在CSV格式中选择的引号字符正确转义。@ChatterOne