2011-01-20 3 views
0

Я рассмотрел several methods для автоматизации процесса увеличения номера версии, хранящейся в файле, но ни один из них не является достаточно значительным (или у меня недостаточно знаний о конкретном языке), чтобы помочь.Сценарий для увеличения номера версии в файле

У меня есть файл (это инсталлятор скрипт NSIS, если вам интересно) с линией

!define REVISION "10" 

Когда я увеличиваю версию, мне нужен скрипт, который заменяет эту строку с

!define REVISION "11" 

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

Было бы здорово, если бы скрипт мог работать только на окнах, но Python или AutoHotKey или подобные языки тоже были бы в порядке.

Это одна из тех проблем, которая является огромной болью, но найти решение занимает слишком много времени.

ответ

0

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

`# calling the perl interpreter indirectly on the next line but executable file` `permissions must be set` 
#! /usr/local/bin/perl 

$searchTerm = $ARGV[0]; # this is the term we will search for and ARGV[0] represents first argument that is placed in the command line 

$directory = $ARGV[1]; # this is the directory we would like to search for our term in 
        # ARGV[1] referes to the arguments that represents the sec- 
         # ond argument's place in the command line 

$extension = $ARGV[2]; # allows the user to specify the extension 

print "\n\nChecking all files in ".$directory." with ".$extension." extension for ".$searchTerm."...\n"; 

@fileInDir = <$directory*.$extension>; #takes the directory appends a * wildcard and the extension 

foreach $fileInDir (@fileInDir) { 

open("IN", "<".$fileInDir) or die ("File " .$fileInDir." - Not Found.\n"); #open allows you to use readline 

#print "Searching for \"$searchTerm\"\n\n"; 

$ctr = 0; # initialize the counter 

    while ($searchLineOfText = readline(IN)) { #readline(IN) evaluates to false when the end of file, EOF, character is reached 

     if ($searchLineOfText =~ /$searchTerm/) { # if the line we're searching contains the search term 
     print $searchLineOfText; # we're looking for than the line the term is found in is printed 
     $ctr++; 
     } 
    } 
    if ($ctr > 0) { 
     print "\nTerm \"$searchTerm\" has been found $ctr time(s) in ".$fileInDir."\n----------------------------------------------------\n\n"; 
    } 
} 
print "program terminated\n\n"; 
Смежные вопросы