Как добавить информацию в начале файла с помощью Perl - PullRequest
0 голосов
/ 10 октября 2011

У меня есть файл c, и мне нужно добавить некоторую информацию в начале файла c.У меня есть одна хеш-таблица с ключами в качестве чисел и значения в качестве строк.используя эту таблицу, я ищу, если найдена строка, я добавляю информацию в файл c.я сделал это с помощью скрипта, который я разместил в вопросе " добавить информацию в файл с помощью perl ".Теперь мне нужно добавить информацию при запуске файла c, если я нашел строку. В моем сценарии я добавляю перед строкой.Что мне теперь делать.заранее спасибо.

Ответы [ 2 ]

2 голосов
0 голосов
/ 10 октября 2011

(Перекрестное сообщение с ответом, который я только что дал на форумах SitePoint на тот же вопрос.)

К сожалению, нет способа вставить информацию в начало файла без необходимости перезаписывать его целиком, поэтому вам нужно будет прочитать весь файл (а не только одну строку за раз), определить, какая строка появляются в содержимом, записывают соответствующий информационный элемент (ы) в новый файл и (наконец!) записывают исходное содержимое в новый файл:

#!/usr/bin/env perl

use strict;
use warnings;

use File::Slurp;

my %strings = (
  'string1' => "information \n",
  'string2' => "information2 \n",
  'string3' => "information3 \n",
);
my $test_string = "(" . join("|", keys %strings) . ")";

# First make a list of all matched strings (including the number of times
# each was found, although I assume that's not actually relevant)

my $code = read_file('c.c');
my %found;
while ($code =~ /$test_string/g) {
  $found{$1}++;
}

# If %found is empty, we didn't find anything to insert, so no need to rewrite
# the file

exit unless %found;

# Write the prefix data to the new file followed by the original contents

open my $out, '>', 'c.c.new';
for my $string (sort keys %found) {
  print $out $strings{$string};
}

print $out $code;

# Replace the old file with the new one
rename 'c.c.new', 'c.c';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...