2011-10-10 4 views
0

나는 c 파일을 가지고 있는데, 나는 c 파일을 구걸 할 때 약간의 정보를 추가해야한다. 문자열과 숫자 및 값으로 키가있는 해시 테이블이 하나 있습니다. 해당 테이블을 사용하여 문자열이 C 파일에 정보를 추가하고 있음을 발견하면 검색 중입니다. 나는 "add information to a file using perl"질문에 게시 된 스크립트를 사용하여이 작업을 수행했습니다. 지금 나는 string.In 내 스크립트에서 나는 문자열 앞에 추가 오전 발견하면 C 파일의 beginging에서 정보를 추가해야합니다. 지금 어떻게해야합니까? 사전에 감사합니다. perl을 사용하여 파일의 시작 부분에 정보를 추가하는 방법

답변

0

(. 난 그냥 같은 질문 것으로 보인다 무엇을 the SitePoint forums에 준 대답에서 크로스 게시)

슬프게도, 전체를 다시 작성할 필요없이 파일의 시작 부분에 정보를 삽입 할 수있는 방법이 없습니다 한 번에 하나의 줄이 아닌 전체 파일을 읽고 내용에 나타나는 문자열을 확인하고 해당 정보 항목을 새 파일에 쓰고 (마침내!) 원래 내용을 새 파일에 쓰십시오.

#!/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'; 
+0

안녕하세요, 난 당신의 코드를 시도하지만 그 질문 엔 두 개의 해시 테이블을 가지고 내가 "펄을 사용하여 파일에 정보를 추가"에 게시하고 무엇을 내 코드를 볼 수 also.if는 오류 및 출력을 제공 나던 그 두 가지를 사용하고 나는 c 파일에서 찌르는 것을 발견했고 c 파일의 문자열 앞에 정보를 추가했습니다. 그러나 코드에서 dint는 어디에서 찾았습니까? @ Dave – viswa

+0

@viswa : 새로운 정보는'for $ my string (sort keys % found) '루프에 의해 파일에 기록됩니다. SitePoint에 대한 질문에서 기존 파일의 시작 부분에 정보를 추가하도록 지정했기 때문에이 코드는 디스크의 파일을 수정하기 만하고 터미널에 출력을 제공하지 않습니다. 변경된 버전을 대신 화면에 표시하려면 두 개의'print $ out ...'문에서'$ out'을 제거하십시오. –

+0

도움을 주셔서 대단히 감사 드리며 지금은 노력하고 있습니다. – viswa

관련 문제