大家好!请问用什么办法能把这段文本拆解啊?

大家好!请问用什么办法能把这段文本拆解啊?

# 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
数据结构课本 - 栈 - 计算器示例 - 表达式解析

或者 直接正则匹配
俺不是学计算机的哥们!能具体点吗?先谢了!另外补充说明一下:各个段之间不一定有空行

把括弧压到栈里,以此分隔各段,在各段内做正则匹配。
兄弟能写段示意代码吗?先谢了!
帅锅,我很懒的啊
把左括弧压到栈里,遇到右括弧就弹一个出来,栈空了就说明这一段读完了。
真不懂哥们!你教我一下吧能学到不少东西,不行到大连了我请你搓一顿!菜你点,就把你那个思想用代码表达一下就行

等我下班吧
先谢谢了!兄弟,到大连了一定找我,我的MSN:zhenbo@163.com
献丑了~~~~

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl

use strict;

my $data_file = "data.txt";

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

my ($record,$name);

while (<DATA>) {

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

    ### 提取 IP 和 PORT 信息
    if (/HOST\s+=\s+([\d\.]+)\)\(PORT\s+=\s+(\d+)\)/) {
        $record->{ $name }->{ 'ip' } = $1;
        $record->{ $name }->{ 'port' } = $2;
    }
    ### 提取 SERVICE_NAME 信息
    elsif (/SERVICE_NAME\s+=\s+(\S+)\)/) {
        $record->{ $name }->{ 'service_name' } = $1;
    }
}
close (DATA);

foreach $name (keys %$record) {

    print "$name\t" .
            $record->{ $name }->{ 'ip' } . "\t" .
            $record->{ $name }->{ 'port' } . "\t" .
            $record->{ $name }->{ 'service_name' } . "\n";
}

抛砖引玉,期待更好的代码....