免费注册 查看新帖 |

Chinaunix

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

高手来帮忙解两道题,在线等!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-08 16:19 |只看该作者 |倒序浏览
1.Write a perl script called perl_digits.pl which takes any number of
arguments. The script should return the number found by deleting all
non-digits.

Example:

"./perl_digits.pl and1 pan2d 30rr and 4"

will return 12304

[Note: return, not output]

2.Write a perl script called perl_friends.pl called with two arguments:
<phonebook> (a file) and <string> (a string). The function prints out each line of the
file <phonebook> beginning with "name:" and for which the rest of the
line matches <string> case insensitively.  

Example:

$ ./perl_friends.pl /usr/local/unixexam-data/newstuff/phonebook.txt and
name:Andrew Phillip
name:Naomi Andrews
$


本人刚接触Unix不久,多谢大家赐教,谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-05-08 16:41 |只看该作者
高手们呢?

论坛徽章:
0
3 [报告]
发表于 2009-05-08 16:44 |只看该作者
#!/usr/bin/perl
use strict;
use warnings;

##declaration of variables
my @args = ();
my $argument;
my $ret_str = "";
@args = @ARGV;

foreach  $argument ( @args ) {
        $argument =~ s/\D*//g;
        $ret_str .= $argument;
}

print $ret_str;

论坛徽章:
0
4 [报告]
发表于 2009-05-08 17:00 |只看该作者

回复 #1 ForeverZJay 的帖子

#!/usr/bin/perl
use strict;
use warnings;

##declaration of variables
my $FILENAME = "";
my $string = "";
my @lines = ();
my $item = "";

($FILENAME,$string) = @ARGV;

sub Get_Contents_From_File(){
        my $filename = shift;
        my @contents = ();
        open(FH,$filename) or die "can not open file $filename, $!";
        @contents = <FH>;
        close(FH);
        return @contents;
}

@lines = &Get_Contents_From_File($FILENAME);

foreach $item ( @lines ) {
        if ( $item =~ /^name\:.*$string.*/i) {
                print $item ;
        }
}

论坛徽章:
0
5 [报告]
发表于 2009-05-08 17:06 |只看该作者
我执行一下 ,谢谢Shell_Er 了先!!!!

论坛徽章:
0
6 [报告]
发表于 2009-05-08 17:12 |只看该作者
提问的基本原则

QUOTE:
请确保自己已尝试过写代码,并且在写的过程遇到了问题,才在这里提问。
纯粹的"do my homework for me"的提问方式,在本版绝不欢迎。
这里不是code writer,这里只是help解决问题的地方。

偶保留对这样的提问帖子封贴的权利,请见:
http://bbs.chinaunix.net/viewthr ... &extra=page%3D2


--兰花仙子

[ 本帖最后由 兰花仙子 于 2006-3-14 19:41 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

论坛徽章:
0
7 [报告]
发表于 2009-05-08 17:13 |只看该作者
对于第一个问题,执行后应该直接得出的是数字 ,为什么你的脚本执行后数字出现的是在 $符号的前面
例如我运行 ./perl_digits.pl 2sdakj30dakj2
执行结果是: 2302-bash-4.0.$ , 而不是直接得到2302??

迫切且得到解答 !!~~谢谢!

论坛徽章:
0
8 [报告]
发表于 2009-05-08 17:16 |只看该作者
我已经尝试写着两个问题的代码,都无法成功执行,我再一下提供我做的两个代码,如果可以请高手帮忙指教,指出那里的错误,谢谢!
1.foreach $arg (@ARGV)
{
if($arg=~m/(\d+)/)
{
  $result.=$1;
  while ($'=~m/(\d+)/)
   {
     $result.=$1;
   }
}
}

2.#!/usr/bin/perl

open (INFILE, $ARGV[0]) || die "can't open the file $!\n";
while (<INFILE>
{
  if ($_=~m/^name\w*).*$ARGV[1]/i)
  {
   print $_;
  }
}

论坛徽章:
0
9 [报告]
发表于 2009-05-08 17:18 |只看该作者
我已经被这两道问题困扰两天了,所以请不要封我的帖子,我只是请教,不是直接来问答案,谢谢版主。

论坛徽章:
0
10 [报告]
发表于 2009-05-08 18:07 |只看该作者
原帖由 ForeverZJay 于 2009-5-8 17:16 发表
我已经尝试写着两个问题的代码,都无法成功执行,我再一下提供我做的两个代码,如果可以请高手帮忙指教,指出那里的错误,谢谢!
1.foreach $arg (@ARGV)
{
if($arg=~m/(\d+)/)
{
  $result.=$1;
  wh ...

第一段程序是可行的,不知LZ执行时是出什么错误,但既然知道$',为何不直接用$&
第二段程序,看题目只是说要匹配的字串是大小写不敏感,并没有说name是大小写不敏感的,而且如果命令行参数传的字串带有特殊字符,这个正则就有可能出错

#!/usr/bin/perl -w


use strict;

my $result;
foreach my $arg (@ARGV) {
    while($arg =~ m/\d+/g){
        $result .= $&;
    }
}
print "result=$result\n";


#!/usr/bin/perl -w


use strict;

open (INFILE, $ARGV[0]) || die "can't open the file $!n";
while (<INFILE>){
    if ($_ =~ m/^name:.*(?i)\Q$ARGV[1]/){
        print $_;
    }
}


BTW, "-bash-4.0.$"是shell提示符,因为打印2302的时候没有换行
执行结果是: 2302-bash-4.0.$ , 而不是直接得到2302??

[ 本帖最后由 iceberg77 于 2009-5-18 15:20 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP