Perl скрипт добавляет дополнительные фигурные скобки - PullRequest
0 голосов
/ 05 мая 2019

Я использую следующий скрипт, который выполняет все хорошо, за исключением того, что он добавляет три дополнительные фигурные скобки в конце файла.

abc.jso содержит много строк, где несколько строк имеют только открывающие / закрывающие фигурные скобки (в случае, если эта информация помогает)

Я попытался сделать print $a " $var"; вместо print $a "$var";. Короче говоря, я добавил пространство перед этим print, и это сработало.

open (my $a,'+<',"abc.jso") or die $!;
my @lines=<$a>;
seek $a,0,0;
    while (@lines) {
        my $var = shift @lines;
        if ($var=~ /^\s*\"(netlist|filelist)\" : \".*$blk.*\",/) {
            print $a "            \"netlist\" : \"/t98/pnr/work/$blk"."_rk/run/dc/$blk"."_post_dft.v\",\n";
            $count++;
            print "Netlist got replaced\n";
        }
        elsif ($var=~ /^\s*\"spf\" : \".*$blk.*\"/) {
            print $a "            \"spf\" : \"/t98/scan/atpg/t98_1.0/spf/$blk".".scan_compress.spf\"\n";
            $count++;
            print "SPF got replaced\n";
        }
        else {
            print $a "$var";
        }
    }
close($a);

Может кто-нибудь объяснить, почему это происходит? Есть ли такой угловой случай обработки текста, о котором я не знаю?

1 Ответ

2 голосов
/ 05 мая 2019

Помогут некоторые примеры ввода и вывода, но позвольте мне сделать предположение.Попробуйте обрезать файл поиском:

truncate $a,0; seek $a,0,0;

Без усечения вы будете перезаписывать то, что было раньше.Это работает, если вы пишете больше информации, чем читаете, но не так хорошо, если вы пишете меньше, чем читаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...