免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-03 15:57 |只看该作者 |倒序浏览
# tnsnames.ora Network Configuration File: c:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.


PSDSS249 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.33.249)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PSDSS)
    )
  )

PSDSS248 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.33.248)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PSDSS)
    )
  )


FZJC =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.136.33.3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = fzjc)
    )
  )

我最后要得到

PSDSS249   10.136.33.249  1521  PSDSS
PSDSS248   10.136.33.248  1521  PSDSS
FZJC            10.136.33.3      1521  fzjc

论坛徽章:
0
2 [报告]
发表于 2007-09-03 16:05 |只看该作者
数据结构课本 - 栈 - 计算器示例 - 表达式解析

或者 直接正则匹配

论坛徽章:
0
3 [报告]
发表于 2007-09-03 16:06 |只看该作者
俺不是学计算机的哥们!能具体点吗?先谢了!另外补充说明一下:各个段之间不一定有空行

[ 本帖最后由 zhouhaiming 于 2007-9-3 16:09 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-09-03 16:30 |只看该作者
把括弧压到栈里,以此分隔各段,在各段内做正则匹配。

论坛徽章:
0
5 [报告]
发表于 2007-09-03 16:38 |只看该作者
兄弟能写段示意代码吗?先谢了!

论坛徽章:
0
6 [报告]
发表于 2007-09-03 16:47 |只看该作者
帅锅,我很懒的啊
把左括弧压到栈里,遇到右括弧就弹一个出来,栈空了就说明这一段读完了。

论坛徽章:
0
7 [报告]
发表于 2007-09-03 16:49 |只看该作者
真不懂哥们!你教我一下吧能学到不少东西,不行到大连了我请你搓一顿!菜你点,就把你那个思想用代码表达一下就行

[ 本帖最后由 zhouhaiming 于 2007-9-3 16:50 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-09-03 16:54 |只看该作者
等我下班吧

论坛徽章:
0
9 [报告]
发表于 2007-09-03 16:55 |只看该作者
先谢谢了!兄弟,到大连了一定找我,我的MSN:zhenbo@163.com

论坛徽章:
0
10 [报告]
发表于 2007-09-03 17:18 |只看该作者
献丑了~~~~


  1. #!/usr/bin/perl

  2. use strict;

  3. my $data_file = "data.txt";

  4. open (DATA,$data_file) or
  5.     die "ERR: Cannot open data file: $!\n";

  6. my ($record,$name);

  7. while (<DATA>) {

  8.     ### 一个记录开始
  9.     if (/^(\S+) =\s*$/) {
  10.         $name = $1; $record->{ $name } = {};
  11.     }

  12.     ### 提取 IP 和 PORT 信息
  13.     if (/HOST\s+=\s+([\d\.]+)\)\(PORT\s+=\s+(\d+)\)/) {
  14.         $record->{ $name }->{ 'ip' } = $1;
  15.         $record->{ $name }->{ 'port' } = $2;
  16.     }
  17.     ### 提取 SERVICE_NAME 信息
  18.     elsif (/SERVICE_NAME\s+=\s+(\S+)\)/) {
  19.         $record->{ $name }->{ 'service_name' } = $1;
  20.     }
  21. }
  22. close (DATA);

  23. foreach $name (keys %$record) {

  24.     print "$name\t" .
  25.             $record->{ $name }->{ 'ip' } . "\t" .
  26.             $record->{ $name }->{ 'port' } . "\t" .
  27.             $record->{ $name }->{ 'service_name' } . "\n";
  28. }
复制代码

抛砖引玉,期待更好的代码....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP