免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zhouhaiming
打印 上一主题 下一主题

大家好!请问用什么办法能把这段文本拆解啊? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-09-04 17:27 |只看该作者
原帖由 zhouhaiming 于 2007-9-4 13:35 发表
下面是最终完美版!

请列书说明我的为什么不比你的完美,谢谢!

论坛徽章:
0
22 [报告]
发表于 2007-09-04 17:57 |只看该作者
原帖由 vio 于 2007-9-4 17:27 发表

请列书说明我的为什么不比你的完美,谢谢!

朋友,你好!关键是你的方法不完整啊,我不能看到结果!现在这个帖子已经有3个解决方案了!都好用

论坛徽章:
0
23 [报告]
发表于 2007-09-04 18:35 |只看该作者
原帖由 coolend 于 2007-9-4 17:16 发表
借用redspider大哥的代码,用堆栈...

#!/usr/bin/perl


use strict;

my (@head,@data);
my $stack_point = -1;

open(FILE, 'data.txt') or die $!;

while () {
    my @characters = split( ...


coolend朋友的代码太精妙了,稍微有点小瑕疵,$4是没用的,不过那不算什么!!

好玩,读这段代码真是一种享受!

请版主把这个帖子加精吧,这个帖子的代码体现的思想太好了,让其他网有友也看看!!

[ 本帖最后由 zhouhaiming 于 2007-9-4 18:39 编辑 ]

论坛徽章:
0
24 [报告]
发表于 2007-09-04 19:20 |只看该作者
呵呵~~~ LZ细心,已经去掉 $4 了

论坛徽章:
0
25 [报告]
发表于 2007-09-04 20:06 |只看该作者
:wink:

  1. open WENJIAN,"haha.txt" || die;
  2. @alldata=<WENJIAN>;
  3. $alldata=join('',@alldata);
  4. @lalala=$alldata=~/\s*?(\S*?)\s*?=\s*?\(\s*?DESCRIPTION\s*?=\s*?\(\s*?ADDRESS_LIST\s*?=\s*?\(\s*?ADDRESS\s*?=\s*?\(\s*?PROTOCOL\s*?=\s*?TCP\s*?\)\s*?\(\s*?HOST\s*?=\s*?(.*?)\s*?\)\s*?\(\s*?PORT\s*?=\s*?(.*?)\s*?\)\s*?\)\s*?\)\s*?\(\s*?CONNECT_DATA\s*?=\s*?\(\s*?SERVICE_NAME\s*?=\s*?(.*?)\s*?\)\s*?\)\s*?\)\s*?/igs;
  5. while(@lalala)
  6. {
  7.         $name=shift @lalala;
  8.         $host=shift @lalala;
  9.         $port=shift @lalala;
  10.         $service_name=shift @lalala;
  11.         print "$name\t$host\t$port\t$service_name\n";
  12. }
  13. close(WENJIAN);
复制代码

[ 本帖最后由 doiob 于 2007-9-4 20:15 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2007-09-04 20:17 |只看该作者
原帖由 doiob 于 2007-9-4 20:06 发表
:wink:

open WENJIAN,"haha.txt" || die;
@alldata=;
$alldata=join('',@alldata);
@lalala=$alldata=~/\s*?(\S*?)\s*?=\s*?\(\s*?DESCRIPTION\s*?=\s*?\(\s*?ADDRESS_LIST\s*?=\s*?\(\s*?ADDR ...


好用,不过代码不好理解!我得仔细钻研钻研!!

  1. @alldata=<WENJIAN>;
  2. $alldata=join('',@alldata);
  3. @lalala=$alldata=~/\s*?(\S*?)\s*?=\s*?\(\s*?DESCRIPTION\s*?=\s*?\(\s*?ADDRESS_LIST\s*?=\s*?\(\s*?ADDRESS\s*?=\s*?\(\s*?PROTOCOL\s*?=\s*?TCP\s*?\)\s*?\(\s*?HOST\s*?=\s*?(.*?)\s*?\)\s*?\(\s*?PORT\s*?=\s*?(.*?)\s*?\)\s*?\)\s*?\)\s*?\(\s*?CONNECT_DATA\s*?=\s*?\(\s*?SERVICE_NAME\s*?=\s*?(.*?)\s*?\)\s*?\)\s*?\)\s*?/igs;
复制代码

太不好理解了,还没理解

论坛徽章:
0
27 [报告]
发表于 2007-09-04 20:19 |只看该作者
doiob朋友能给解释一下吗?也没有循环,咋把文件读进去的?

论坛徽章:
0
28 [报告]
发表于 2007-09-04 20:38 |只看该作者
就这句啊,@alldata=<WENJIAN>,把整个文件存入一个数组。

论坛徽章:
0
29 [报告]
发表于 2007-09-04 20:40 |只看该作者
整个文件就是@alldata数组的一个元素吗?就是$alldata[0]?
刚做了一个试验

  1. open WENJIAN,"c:\\tnsnames.ora" || die;
  2. @alldata=<WENJIAN>;
  3. print "$alldata[0]\n";
  4. print "$alldata[1]\n";
  5. print "$alldata[2]\n";
  6. print "$alldata[3]\n";
  7. print "$alldata[4]\n";
  8. print "$alldata[5]\n";
  9. close(WENJIAN);
复制代码

tnsnames.ora文件的每一行是@alldata数组的一个元素

[ 本帖最后由 zhouhaiming 于 2007-9-4 20:45 编辑 ]

论坛徽章:
0
30 [报告]
发表于 2007-09-04 20:45 |只看该作者
看来你基本的东西还没来得及看啊,整个文件的每一行是数组的一个元素。然后将整个数组(也就是整个文件的内容)转换成一个标量$alldata,用正则进行提取,将结果存入@lalala。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP