我有一個 .txt 檔案,其中有一列中的資料,如下所示:
state_1
state_2
state_3
input_11
input_12
input_13
input_21
input_22
input_31
我想根據它們的名稱和編號將這些標簽分組為一個哈希:
state_1: # For state_1, we have all "input1x" data tags
-input_11
-input_12
-input_13
state_2: # For state_2, we have all "input2x" data tags
-input_21
-input_22
state_3: # For state_3, we have all "input3x" data tags
-input_31
我嘗試使用這種情況下push的函式來嘗試將值作為陣列強制放入散列中,但我被困在尋找一種方法來回圈并根據正則運算式獲取所需的散列。push @{ $state{$inputs} }, $_;
我還研究了如何根據 regex 對資料進行分組,但是當我從 .txt 檔案中獲取資料時,我仍然找不到對資料進行分組的方法。
我的問題是,我在尋找什么能夠相應地對這些標簽進行分組?
uj5u.com熱心網友回復:
簡而言之,從一行資料中提取該索引(1或2...)并使用它來形成正確的鍵并將該行添加到該鍵的 arraref,也依賴于自動激活
push @{$data{"state_$1"}}, $line if $line =~ /input_([0-9])/;
在帶有資料input_NN的行上,正則運算式提取 之后的第一個數字input_,并將該行添加到 arrayref 的合適鍵處。要添加的鍵名是使用捕獲的數字和固定前綴構建的。密鑰的第一次輪次,在它被看到之前,所以它還沒有在散列中,它是由稱為autovivification的機制/功能制成的。?
然后有一些細節——如果在實際資料中存在什么,而不是令牌名稱input和state,那么它可以從第一行資料中提取出來,然后像上面一樣使用。讀取行時需要洗掉換行符。共
use warnings;
use strict;
use feature 'say';
use Data::Dump qw(dd); # to see complex data; or, use core Data::Dumper
my
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425562.html
