我有2个文件。名为input.txt Perl - 将指针移动到行首
- 模糊处理文件调用的mapping.txt由关键值对的第二文件。
我想从input.txt中的mapping.txt中找到每个出现的密钥,并将其替换为与该密钥对应的值。
请注意,我想在每次成功匹配时覆盖input.txt中行的内容。
我写了下面的代码:
#! /usr/bin/perl
use strict;
use warnings;
(my $mapping,my $input)[email protected];
open(MAPPING,'<',$mapping) || die("couldn't read from the file, $mapping with error: $!\n");
while(<MAPPING>)
{
chomp $_;
my $line=$_;
(my $key,my $value)=split("=",$line);
open(INPUT,'+<',$input);
while(<INPUT>)
{
chomp $_;
if(index($_,$key)!=-1)
{
$_=~s/\Q$key/$value/g;
# move pointer to beginning of line
print INPUT $_."\n";
}
}
close INPUT;
}
close MAPPING;
代码的简要概述:
- 打开在读模式下的mapping.txt文件。
- 由于每一行都是一个关键值对,因此它将其分解为键和值。
- 以覆盖模式打开input.txt文件。
- 检查在当前行中是否找到密钥。
- 如果找到了键,则(由前缀\ Q)
- 此时代替以忽略在密钥的任何元字符值的键,将文件指针是在该行的,因为以前的端部语句会扫描整行以找到密钥并将其替换。
如果我能移动文件指针行的开始,那么我可以改写:
打印INPUT $ _,“\ n”
- 我试图寻找了搜索功能但是无法想出一个方法来将其用于此目的。
一旦完成,代码将关闭该文件。它将从mapping.txt中选择下一个键值对,并从开始查找匹配项并替换它们再次扫描输入文件。
最重要的一点是,每次内部while循环都将在input.txt上进行操作,该内容在while循环的前一次迭代中被修改。这样,任何成功的查找和替换操作都将继续保存在input.txt文件中。
我该怎么做?
谢谢。
你可以给我们两个文本文件的示例输入吗? –