2016-12-01 116 views
-1

我的文本文件看起來像:搜索字符串,並將其保存在數組中的Perl

Register : STATUS 
FIELD:ON VALUE : 1 
FIELD:COMPLETE VALUE:0 

REGISTER : CONTROL<br> 
FIELD:SYSTEM_EN VALUE:1 
FIELD:CLOCK_EN  VALUE:0 

在這裏,我要搜索REGISTER@register儲存註冊名稱和搜索相應字段的名字和他們的價值觀和保存它們。

這裏是我試過到目前爲止:

open(my $log, "<", "register.log"); 
my $reg_string = "Register"; 

while (<$log>) { 
    if (/reg_string/) { 
     my $str = $_; 
     my @registers = split//, $str; 
     print "\n $registers[3]\n"; 
    } 
} 

現在我試圖訪問數組元素在FOLL。方法:

while(<$log>){ 
my $str =$_; 
my @reg_string = split/\s+/,$str; 
push(@reg_value, $reg_string[4]); 
foreach my $i(@reg_value){ 
print " $reg_value[$i]"; 
} 
} 

但這個代碼給我錯誤 參數不是數組elememt數字。 (它是我數組中的所有字符串元素) 我知道在使用在線教程編寫代碼時,我必須缺少一些基本語法。請糾正代碼。

+5

你有沒有對自己嘗試新鮮事物?請顯示你的努力。 –

+1

人們總是樂於幫助你進行計算,但你必須付出一些努力,比如試圖自己解決問題,然後人們會幫助你顯示出錯的地方。 –

+0

這是字段,哪個值是你的例子? – ssr1012

回答

1

存儲全線數組中的寄存器

use strict; 
use warnings; 
my (@full_line,@only_values) =(); 
while(<DATA>) 
{ push(@full_line, $_=~m/(register\s*\:\s*(?:[^\n]*))\n/i); } 
print join "\n", @full_line; 

Output: 
Register : STATUS 
REGISTER : CONTROL<br> 
在陣列中的分號的寄存器

存儲的值

while(<DATA>) 
{ push(@only_values, $_=~m/register\s*\:\s*([^\n]*)\n/i); } 
print join "\n", @only_values; 

Output: 
STATUS 
CONTROL<br> 


__DATA__ 
Register : STATUS 
FIELD:ON VALUE : 1 
FIELD:COMPLETE VALUE:0 

REGISTER : CONTROL<br> 
FIELD:SYSTEM_EN VALUE:1 
FIELD:CLOCK_EN  VALUE:0 

請檢查和修改根據您的需要。

+0

感謝您的幫助。雖然它不是我正在尋找的,但你的代碼給了我一些實現我想要的東西的方法。現在我遇到了使用foreach循環訪問數組元素的問題。請幫助 – ibrahim

1
foreach my $i (@reg_value) { 
    print " $reg_value[$i]"; 
} 

我想這是拋出你的「參數不是數組元素中的數值」錯誤的代碼。

使用foreach這樣的循環,每次循環時,$i將包含@reg_value中的一個元素。不是其中一個元素的索引,而是元素本身。試試這個:

foreach my $i (@reg_value) { 
    print " $i"; 
} 

請注意,我只是打印$i,而不是用它來查找數組中的元素。

如果你想從數組中得到索引,使用這樣的代碼來代替:

foreach my $i (0 .. $#reg_array) { 
    print " $reg_value[$i]"; 
} 
相關問題