1

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

пример: список записывается в файл (fun_list.txt) как:

CLK_A_0
CLK_A_1
CLK_B_0
CLK_B_1
CLK_B_2
..
..

и мой шаблон функции определен в (fun_template.txt)

uint32 enable_###(boolean val)
{
   ### =  val;
}

ожидаемый результат в одном выходном файле как (fun_clock.c):

uint32 enable_CLK_A_0(boolean val)
{
   CLK_A_0 =  val;
}
uint32 enable_CLK_A_1(boolean val)
{
   CLK_A_1 =  val;
}
uint32 enable_CLK_B_0(boolean val)
{
   CLK_B_0 =  val;
}
uint32 enable_CLK_B_1(boolean val)
{
   CLK_B_1 =  val;
}
uint32 enable_CLK_B_2(boolean val)
{
   CLK_B_2 =  val;
}
..

Как мне добиться этого в блокноте ++. Я предполагаю, что с помощью макросов мы должны быть в состоянии сделать это.

У меня нет никаких ограничений для имен файлов (или для отдельных файлов), я хочу легко создавать эти функции, а не копировать их вручную.

Если нет в notepad++, если есть какое-то простое решение в Windows (CMD) или Linux, это тоже было бы хорошо.

1 ответ1

3

Этот небольшой скрипт на Perl делает свою работу:

#!/usr/bin/perl 
use strict;
use warnings;

# define and open the three files
my $file_lst = 'fun_list.txt';         # give the full path if doesn't run in the same dir
my $file_tpl = 'fun_template.txt';
my $file_out = 'fun_clock.c';

open my $fh_l, '<', $file_lst or die "Unable to open '$file_lst': $!";
open my $fh_t, '<', $file_tpl or die "Unable to open '$file_tpl': $!";
open my $fh_o, '>', $file_out or die "Unable to open '$file_out': $!";

# read template file in "slurp" mode
my $tpl;
{
    local $/ = undef;
    $tpl =  <$fh_t>;
}
# read the list file and replace all ### in the template with the line in  list file
while(<$fh_l>) {
    chomp;
    (my $tmp = $tpl) =~ s/###/$_/g;
    print $fh_o $tmp;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .