我想创建类似的函数,其名称从文件列表中获取。其内容也将使用列表中的名称。
例如:列表在文件(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++ 中实现这一点?我认为使用宏我们应该能够做到这一点。
我对文件名没有任何限制(或在单独的文件中),我想轻松创建这些功能而不是手动复制。
如果 notepad++ 中没有,那么如果 windows(cmd)或 linux 中有一些简单的解决方案那就太好了。
答案1
这个小的 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;
}