免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11591 | 回复: 12
打印 上一主题 下一主题

PERL中怎么删除一空行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-30 15:44 |只看该作者 |倒序浏览
5可用积分
open(READ,"sz_ci.log"||die "Can not write!";       
                while (<READ> {
                chomp;
                @array=<READ>;
                                #print @array;  
                }
                close(READ);
                for (my $i=0;$i<@array ;$i++) {
                        print $array[$i],"\n";
                }

输出:11032

11932

12741

12761

12801
问题:在chomp;@array=<READ>;这之后输出发现没有空行.但是通过一个FOR循环之后输出却有空行了?怎样才能取掉空行呢?

论坛徽章:
0
2 [报告]
发表于 2008-11-30 16:16 |只看该作者
你不是打印了空行吗?
"\n";
问得太奇怪了

论坛徽章:
0
3 [报告]
发表于 2008-11-30 16:37 |只看该作者

回复 #2 dl0622 的帖子

是空行,输出结果帖出来了.

论坛徽章:
0
4 [报告]
发表于 2008-11-30 16:37 |只看该作者
while (<READ> {
                chomp;
                @array=<READ>;
                                #print @array;  
                }
你这程序我不有点读不懂。
想去空行这样不就行了:

while (<READ> {
               s/^\s*$//g;
               print;  
                }

论坛徽章:
0
5 [报告]
发表于 2008-11-30 16:43 |只看该作者

回复 #4 machine 的帖子

呵呵,通过FOR循环输出发现是有空行.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
6 [报告]
发表于 2008-11-30 16:53 |只看该作者
原帖由 HF.SKY000 于 2008-11-30 15:44 发表
open(READ,"sz_ci.log"||die "Can not write!";       
                while () {
                chomp;
                @array=;
                                #print @array;  
                }
                close(READ);
                for (my $i=0;$i

楼主没注意两个print的区别, 可能是for循环里写print语句加上,"\n";写习惯了。

@array=<READ>;
这句中<>在列表环境,会把文件内容从第二行到文件结尾一次读入@array;所以chomp只对第一行有效。
for循环里print $array[$i],"\n"; 中$array[$i]已经包含一个'\n'(没有被chomp), 再输出一个\n,就会多输出一个空行.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
7 [报告]
发表于 2008-11-30 17:09 |只看该作者
删除空行,
  1. open(READ,"sz_ci.log")||die "Can not write!";   
  2. while (<READ>) {
  3.     print if !/^$/;
  4. #  print if !/^\s*$/;#删除包含空格,tab的空白行
  5. }
  6. close(READ);
复制代码

论坛徽章:
0
8 [报告]
发表于 2008-11-30 17:29 |只看该作者

回复 #6 ynchnluiti 的帖子

说得对,在FOR循环PRINT多带了一个"\N".
再请教个问题:

for (my $i=0;$i<@array ;$i++) {
my $s="select ne_id from ne_cell where n_confirm<>1 and ci=$array[$i] and city_id='114' order by 1";
$sth=$dbh->prepare($s);
$sth->execute;
while (my $line=$sth->fetchrow_array) {
push @ne_id_sz,"$line\n";
my $size=@ne_id_sz;
print $size,"\n";
$sth->finish;
}
}
打印结果怎么会是:
1
2
3
4
5
..
N
应该输出数据的长度(大小)才是呀?

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2008-11-30 17:50 |只看该作者
原帖由 HF.SKY000 于 2008-11-30 17:29 发表
说得对,在FOR循环PRINT多带了一个"\N".
再请教个问题:

for (my $i=0;$iprepare($s);
$sth->execute;
while (my $line=$sth->fetchrow_array) {
push @ne_id_sz,"$line\n";
my $size=@ne_id_sz;
print  ...

my $size=@ne_id_sz;#这个得到的是数组元素个数,$size是个标量。

论坛徽章:
0
10 [报告]
发表于 2008-11-30 17:54 |只看该作者

回复 #9 ynchnluiti 的帖子

应该输出数组的个数,是一个值才对呀,怎么会输出1 2 3 4 5 等等呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP