这是我输入的C档
/**
********************************************************************************
* @fn ChainCtrlSetJpgSnapshotFile
* @brief
* @param[in ]
* @return
********************************************************************************
*/
eErrorT ChainCtrlSetJpgSnapshotFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *jpg_file_path)
{
...
}
/**
********************************************************************************
* @fn ChainCtrlSetBgFile
* @brief
* @param[in ]
* @return
********************************************************************************
*/
eErrorT ChainCtrlSetBgFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *bg_file_path)
{
...
}
我的Perl代码
use strict;
use warnings;
use vars qw(@temp $index);
open(my $FILE, "< a.c") or die $!; ;
my @arr = <$FILE>;
my $pos = 0;
foreach(@arr){
$pos++;
if ($_ =~ /^ \S+ \s+ \S+ \s* \( (.+?) \) /xsmg) {
my $arg = $1;
$index = $pos;
my @arr = map /(\w+)$/, split /\W*?,\W*/, $arg;
@temp = map ' * @param[in/out] '."$_\n", @arr;
}
}
$arr[$index - 5] = "";
splice @arr,$index-4,0,@temp;
print @arr;
close($FILE);
我得到的错误输出
/**
********************************************************************************
* @fn ChainCtrlSetJpgSnapshotFile
* @brief
* @param[in ]
* @return
********************************************************************************
*/
eErrorT ChainCtrlSetJpgSnapshotFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *jpg_file_path)
{
...
}
/**
********************************************************************************
* @fn ChainCtrlSetBgFile
* @brief
* @param[in/out] pChainCtrl
* @param[in/out] pRoute
* @param[in/out] dst_chain
* @param[in/out] bg_file_path
* @return
********************************************************************************
*/
eErrorT ChainCtrlSetBgFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *bg_file_path)
{ ....
}
我正在尝试将每个函数的参数名称添加到它上面的注释部分。
我的代码仅适用于最后一个函数定义,但我需要它才能用于C文件中的所有函数。
我想我在使用splice
时犯了一个错误,但在splice
循环中使用foreach
会使其无限期地运行而没有输出。
答案 0 :(得分:2)
我花了半个小时看你的程序,下面是正确的答案。看来这只是因为一个简单的逻辑错误。所以,如果你喜欢,请给我一些分数。
use strict;
use warnings;
use vars qw(@temp $index);
open(my $FILE, "< a.c") or die $!; ;
my @arr = <$FILE>;
my $pos = 0;
foreach(@arr){
$pos++;
if ($_ =~ /^ \S+ \s+ \S+ \s* \( (.+?) \) /xsmg) {
my $arg = $1;
$index = $pos;
my @arr = map /(\w+)$/, split /\W*?,\W*/, $arg;
@temp = map ' * @param[in/out] '."$_\n", @arr;
$arr[$index - 5] = "";
splice @arr,$index-4,0,@temp;
}
}
print @arr;
close($FILE);
答案 1 :(得分:0)
包含splice
的三行写在for循环和if之外。因此,它们只在文件关闭之前执行一次。
将for
循环的两个结束花括号和if
移到close
语句之前。
循环在其内部与接头一起运行,因为它每次在循环中向阵列中添加更多行。
编写代码的方式的一个根本问题是数组@arr
正由foreach (@arr)
循环处理,并且额外的元素被拼接到循环内的数组中。当编写类似代码时,Perl擅长做“正确的事”。您的代码通过计数将索引保存到数组中(即$pos
和$index
)。在索引引用的元素之前将元素拼接到数组中时,不会调整这些计数。