【发布时间】:2012-06-08 21:57:25
【问题描述】:
我需要将一个文件拆分成不同的文件。
示例(原始文件):
*****3123123*****RAW
text1
text2
*****2312354***RAW
text3
期望的输出:
[文件1.txt]
*****3123123*****RAW
text1
text2
[文件2.txt]
*****312312354***RAW
text3
我尝试使用拆分,但我总是在数组中得到一些额外的白色字符
open FILE, "<file";
@file= <FILE>;
close FILE;
@lines = split (/(RAW\n)/, "@file");
foreach $value (@lines) {
if ($value =~ /[a-z]|[A-Z]|[1-9]/) {
print ("$value\n");
}
}
输出:
*****3123123*****RAW
text1
text2
*****312312354***RAW
text3
编辑:如果我使用 print ("$value") 而不是 print ("$value\n") 这是输出(注意值之前的 1 个额外空格:
*****3123123*****RAW
text1
text2
*****12354***RAW
text3
【问题讨论】:
-
不就是在拆分的时候,并没有去掉换行符,所以当你添加
print ("$value\n")的时候,就是多加了一个换行符。这就是为什么它看起来有额外的空白。 -
没有 \n 我在每个值的开头得到 1 个额外的空格。
-
额外的空格是因为您将
@file插入到单个字符串中,默认情况下会在元素之间插入一个空格字符。通常最好逐行读取文件,除非它真的很小,但如果你坚持一次读取它,你可以写@lines = split (/(RAW\n)/, join '', @file或使用 `my $data = do {local $/; }; @lines = split (/(RAW\n)/, $data;
标签: perl