免费注册 查看新帖 |

Chinaunix

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

求助,如何把fomat格式输出嵌套进while循环 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-12 15:36 |只看该作者 |倒序浏览
我想将一行很长的字符串按每行一定个数输出,于是想到了format格式输出,我写的代码如下。
#在文件中查询,并输出
my $first;
my $second;
open (READIN, "/var/www/ibi/phylogenedb/download/$last.txt") or die "Cannot read $last: $!";
open (WRITEOUT,">/var/www/ibi/phylogenedb/download/sequence.fasta") or die "Cannot read $last: $!";
#while (<READIN>){
#       print $_;
#}
select WRITEOUT;
$~="WRITEOUT"
write;
while (chomp($first=<READIN>),chomp($second=<READIN>)){
        $_ = $first;
        if (/]$match.$last/){
                format WRITEOUT=
                ~~^<<<<<<<<<<<<<<<<<<<<<<<<
                $second;
                .
        }
}

select STDOUT;
close (READIN);
close (WRITEOUT);
}

但是运行的时候并不会成功输出,错误提示为
Format not terminated at seq_screen.cgi line 60, at end of line
syntax error at seq_screen.cgi line 60, at EOF
Execution of seq_screen.cgi aborted due to compilation errors.

求解为什么?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2015-05-12 16:14 |只看该作者
不要用 format write select 这功能能早该从 Perl 里面删除了,既复杂又难用,是为了在早期的终端中做表格而设计的功能。不要想起 format 了,每次想起都是错误的。

把字符串按定宽度输出把它截断或分段取不就好了。

1.
while ($str =~ /\G(.{1,你要的宽度})/g) {
    say $1;
}

2.
say for split /(?:.{你要的宽度})\K/, $str;

3.
用 substr 好像要麻烦点不会写

论坛徽章:
0
3 [报告]
发表于 2015-05-12 19:44 |只看该作者
回复 2# zhlong8


    前两种就够了~~~谢谢版主大大了~

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-05-12 23:01 |只看该作者

论坛徽章:
2
巳蛇
日期:2013-12-31 14:13:002015年亚洲杯之沙特阿拉伯
日期:2015-03-26 13:30:50
5 [报告]
发表于 2015-05-14 10:11 |只看该作者
$str =~ s/(.{30})/$1\n/g;

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
6 [报告]
发表于 2015-05-15 01:10 |只看该作者
zhlong8 发表于 2015-05-12 12:14

say for split /(?:.{你要的宽度})\K/, $str;

3  Q ~ ~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP