如何在perl脚本中合并两行
我正在尝试编写一个Perl脚本来转换输入如何在perl脚本中合并两行,perl,perl-module,Perl,Perl Module,我正在尝试编写一个Perl脚本来转换输入 ( name ( type .... ) ) 输入到输出中 ( name ( type ... ) ) 也就是说,所有匹配()的行都合并到一行中,我想更新原始文件本身 提前感谢是否保证((..)语法?如果是这样的话,我建议将整件事合并成一行,然后根据(s)进行拆分 my$line=”“; while() { $\uz=~s=+$==g;#删除结束空格。 $line.=$\ux; } $line=~s=\n==g; my@l
( name
( type ....
)
)
输入到输出中
( name ( type ... ) )
也就是说,所有匹配()
的行都合并到一行中,我想更新原始文件本身
提前感谢是否保证((..)语法?如果是这样的话,我建议将整件事合并成一行,然后根据(s)进行拆分
my$line=”“;
while()
{
$\uz=~s=+$==g;#删除结束空格。
$line.=$\ux;
}
$line=~s=\n==g;
my@lines=split/\)\(/,$line;
my$resulttext=join“)\n(“,@行;
打印$resulttext;
__结束__
(姓名)
(键入…)。。。。
)
)
(姓名2)
(第2类…)。。。。
)
)
(姓名3)
(第3类…)。。。。
)
)
严格使用;
使用警告;
my$file=“t.txt”#或shift(ARGV);用于命令行输入
我的$new_格式=未定义;
打开读取文件;
本地$/=undf;#表示读取到文件末尾
$new_format=;
$new_format=~s/\n//g;#用零替换所有换行符,aka删除所有换行符\n
关闭(读取);
打开写入,“>$file”#打开写入(覆盖)
打印写入$new_格式;
闭合写入;
假设整个文件都是一个大表达式,那么这是可行的。作为参考,要删除所有空白,请使用$new\u format=~s/\s//g;
而不是$new\u format=~s/\n//g;
。它可以很容易地修改,以考虑多个表达式。所有这些操作都必须重新定义$/
,以使其成为用于分离的任何内容ate表达式(例如,如果只是一个空行:local$/=/^\s+$/;
)并将所有内容放入while循环。对于每次迭代,将字符串推入数组,在文件完成处理后,以所需格式将数组内容写入文件。这里是另一个选项:
use strict;
use warnings;
while (<>) {
chomp unless /^\)/;
print;
}
输出:
( name ( type .... ) )
( name_a ( type_a .... ) )
( name_b ( type_b .... ) )
脚本将删除输入记录分隔符,除非读取的行包含最后一个右结束符(与行上的第一个字符匹配)
希望这有帮助!这是4行。看起来您只是想将换行符转换为空格。您可能需要查看核心模块,尽管对于您当前的问题来说,这可能有点过头了。我相信我的回答应该可以帮助您解决问题。如果在4行集合中有注释交错,您必须小心,如containi行中的注释NG<代码>(名称<代码> >。我用C++做了一些类似的事情,必须确保引导代码<>代码///<代码>没有结束在合并行的中间。
use strict;
use warnings;
while (<>) {
chomp unless /^\)/;
print;
}
( name
( type ....
)
)
( name_a
( type_a ....
)
)
( name_b
( type_b ....
)
)
( name ( type .... ) )
( name_a ( type_a .... ) )
( name_b ( type_b .... ) )