我使用Strawberry Perl(64位)5.20.1.1-64bit来执行文本替换。我在perl脚本的位置下面有几个.txt文件。我想要做的是匹配关键字" id:"在任何文件(即Player7.txt)中,从字符串中提取ID_PlayerXX以在另一个文件中进行比较。字符串将如下所示:
id: ID_Player7 // Unique ID
player_ids.txt文件包含我计算所需的实际值。此文件的格式如下:
#define ID_Player7 236
现在我需要匹配找到的玩家并提取与该玩家相关的实际数值(本例中为236)。
我遇到的问题是只删除" Player7"在我的替代中使用的部分。
我认为它应该看起来像这样
$id_player_file =~ s/(ID_Player\d\d)//;
if ($defined_id =~ m/$id_player_file/) {
$extracted_value =~ s/$_/\d\d\d$/;
# $extracted_value calculation here and written to individual player file
}
请帮忙。感谢
答案 0 :(得分:0)
你还没有在你的程序附近显示任何关于上下文的想法,但这应该有所帮助。它只读取一个播放器文件,因为你不能说出你想要对它们做什么,但总体思路应该有效。您更有可能应该使用player_ids.txt
的内容构建哈希结构,但仅使用此信息建议您是不可能的
如果您需要更多帮助,请显示您的程序和数据文件
use strict;
use warnings;
use 5.010;
use autodie;
open my $player_fh, '<', 'Player7.txt';
open my $ids_fh, '<', 'player_ids.txt';
while ( <$player_fh> ) {
next unless /^\s*id:\s*(\w+)/;
my $id_player_file = $1;
while ( <$ids_fh> ) {
next unless /^\s*#define\s+$id_player_file\s+(\d+)/;
my $extracted_value = $1;
...
last;
}
last;
}
答案 1 :(得分:-1)
这可能就是你想做的事情:
#!/usr/bin/perl
my $id_player_file = " id: ID_Player7 // Unique ID" ;
my $defined_id = "#define ID_Player7 236" ;
$id_player_file =~ s/.*\bid: (\w+\d+).*/\1/;
printf "id_player_file=[%s]\n", $id_player_file; # print "ID_Player7"
my $extracted_value = undef;
# Check whether ['ID_Player7'+whitespaces+number] exist $defined_id
if ( $defined_id =~ m/$id_player_file\s+(\d+)/ ) {
# If yes, retrieve the number after whitespaces (inside parentheses above)
$extracted_value = $1;
}
printf "extracted_value=[%s]\n", $extracted_value;
注意:\d+
表示一个或多个数字,\s+
表示一个或多个空格
输出:
id_player_file=[ID_Player7]
extracted_value=[236]