Мой входной файл имеет формат, какНужно ли перемещать шаблон в файл в другое место в том же файле, используя perl?
hidestart
machine learning
hideend
rule abc {
hidestart
Keep Learning
hideend
-abc [ time=good]
}
rule abc1 {
Keep Learning
-abc1 [ time1=fail]
}
Rule “abc” {
hidestart
dp a.E_t_C1 temp –be_good NL LP -expr " (cnt(a.E_t_C1) > 0) ? expr(- (minus (pt(a.E_t_C1,ab))/at(temp)*fr/pr_1)) : 1 " <0> 1
hideend
…..
-CDE [ ABC_TYPE = “temp_EOL”]
-CDE [ TMP_RUL = “a.E” ]
.. .. ..
-comment "keepTrying"
}
И я хочу, чтобы переместить hideend, которая находится внутри блока правил до конца и перед фигурными скобками. Это скрытие должно быть вставлено/перемещено только в том случае, если блок правил имеет команду hidestart. Кроме того, hidestart/hidened, который находится за пределами этого блока правил, должен быть сохранен.
Ожидаемый выход:
hidestart
machine learning
hideend
rule abc {
hidestart
Keep Learning
-abc [ time=good]
hideend
}
rule abc1 {
Keep Learning
-abc1 [ time1=fail]
}
Rule “abc” {
hidestart
dp a.E_t_C1 temp –be_good NL LP -expr " (cnt(a.E_t_C1) > 0) ? expr(- (minus (pt(a.E_t_C1,ab))/at(temp)*fr/pr_1)) : 1 " <0> 1
…..
-CDE [ ABC_TYPE = “temp_EOL”]
-CDE [ TMP_RUL = “a.E” ]
.. .. ..
-comment "keepTrying"
hideend
}
Мой текущий код, на самом деле удаления hideend, которая лежит за пределами блока, а также добавление hideend к блоку правила, где у меня нет hidestart. Пожалуйста, помогите мне установить ниже код
!/usr/bin/env perl
use strict();
use warnings();
use Data::Dumper;
my $ruleData=0;
my $goldenData = $ARGV[0];
open($fopen, "< $goldenData") or die "cannot open $!";
while(<$fopen>) {
if ($_ =~ /^\s*rule(.+)/gi) {
print "rule$1\n";
while($tmp=<$fopen>) {
if ($tmp =~ /^\s*hideend/gi) { next; }
if ($tmp =~ /^\s*\}/gi) {
print "hideend\n$1\}\n";
} else {
print "$tmp";
}
}
close($tmp);
} else {
print "$_";
}
}
close($fopen);
Дайте мне знать, если возникнут вопросы.
Заранее спасибо.
С уважением, Divesh
1) Ваш код как он не может компилироваться. Важно, чтобы вы показывали код _actual_, который дает вам проблемы. 2) Вот один из способов. Откройте два файла, один для чтения ввода другого, чтобы написать вывод. Когда вы проходите через строки ввода, пишите их на вывод. Когда вы дойдете до 'hidestart', установите флаг. Продолжать. Если вы хотите, чтобы скобка сняла флажок. Когда вы получаете 'hideend', если флаг true, не записывайте его в выходной файл. Когда вы доберетесь до закрывающей скобки, напишите 'hideend' и скобу. Отсоедините флаг. Продолжайте идти до конца. Выходной файл - это ваш результат (за исключением некоторых деталей, которые я, возможно, забыл). – zdim