从文本文件中逐行读取数据,然后将值分配给结构中的相应字段

时间:2016-09-16 11:50:39

标签: perl

我是Perl脚本编程的初学者。

我想从文本文件中逐行读取数据,然后分配
值为相应参数的结构

my_input.txt

filed_ind 0x0B uint8.unsigen int
tx_offset 0x0C uint8.unsigen int
rxpowe    0x0D uint8.unsigen int
fillers   0x0A uint8.unsigen int
cellid    0x12 uint8.unsigen int
cellnum   0x13 uint8.unsigen int

编码:

我想将每个值分配给相应的参数 (对于egfiled_ind-> 0x0B),它更像是创建结构。

structure ABC
{
 filed_ind 0x0B 
 tx_offset 0x0c 
 rxpowe    0x0D 
 fillers   0x0A 
 cellid    0x12 
 cellnum   0x13 
}

解码:

从结构我想要提取像my_message一样的数组中的值 (例如my_message [0x0B,0x0c,0x0D,0x0A,0x12,0x13])

我的代码在下面给出

 #!/usr/local/bin/perl
 use strict;
 use warnings;
 my $file = 'my_input.txt';
 open my $fh, '<', $file or die "Could not open '$file' $!\n";
  while (my $line = <$fh>) 
  {
   chomp $line;
   my @strings = $line =~ /([a-z_A-Z_0-9-]+)/;                     
   foreach my $s (@strings) 
   {
    print "$1\n";
   }
 } 

我试图从文本文件中提取代码,上面的代码仅用于提取参数。我想要的是我希望从文本文件中生成结构化消息,就像编码一样,再次从消息结构中提取值,如解码。

2 个答案:

答案 0 :(得分:0)

目前还不完全清楚自己想做什么。但是这段代码将您感兴趣的数据加载到Perl哈希(这是Perl与结构最接近的东西)然后显示它。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my %struct;
while (<DATA>) {
  my ($key, $val) = split;
  $struct{$key} = $val;
}

say Dumper \%struct;

__DATA__
filed_ind ox0B uint8.unsigen int
tx_offset ox0c uint8.unsigen int
rxpowe    ox0D uint8.unsigen int
fillers   ox0A uint8.unsigen int
cellid    ox12 uint8.unsigen int
cellnum   ox13 uint8.unsigen int

输出结果为:

$VAR1 = {
          'fillers' => 'ox0A',
          'tx_offset' => 'ox0c',
          'cellid' => 'ox12',
          'rxpowe' => 'ox0D',
          'filed_ind' => 'ox0B',
          'cellnum' => 'ox13'
        };

答案 1 :(得分:-1)

你的问题不明确,代码商店下面[ox0B,ox0c,ox0D,ox0A,ox12,ox13] 进入my_message。

use strict;
use warnings;
use Tie::IxHash;

my %hash;
tie %hash, 'Tie::IxHash';

my $file = 'my_input.txt';
open my $fh, $file or die "died opening $file";

while (my $line = <$fh>) {
    if(length($line) > 1) {
        chomp $line;
        my @a = split(" ", $line);    
        $hash{$a[0]} = [$a[1], $a[2], $a[3]];
    }
    else {
        next;
    }
}

my @my_message;
foreach my $v (keys %hash) {
    push @my_message, $hash{$v}[0] ;
}