[二星]格式化输出,欢迎各种脚本或者语言

除了美化之外,还可以来尝试挑战一下任务
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#16

帖子 eexpress » 2009-09-23 13:22

结果这样的啊。

叶子改一个读入过程中输出的吧。我比较下。逐行读入的。
● 鸣学
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: ★★格式化输出,欢迎各种脚本或者语言

#17

帖子 oneleaf » 2009-09-23 13:28

增加了检查是否为空的

代码: 全选

#!/bin/python
import re
r=r'ID.*?ICON'
d=open("a.txt").read()
g=re.findall(r,d,re.S)
for a in g:
    r=r'MAIL=(.*?)\n.*?PHONE=(.*?)\n'
    x=re.search(r,a,re.S)
    if x : 
         m,p=(x.group(1).strip(),x.group(2).strip())
         if m and p:
             print "%s,%s"%(m,p)
逐行读入的

代码: 全选

#!/bin/python
d=open("a.txt")
e=False
m=p=None
for a in d:
    if a.find('ICON')==0: e=True
    if a.find('MAIL')==0: m=a[5:].strip()
    if a.find('PHONE')==0: p=a[6:].strip()
    if e and m and p: 
        print "%s,%s"%(m,p)
        e=False
        m=p=None
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#18

帖子 eexpress » 2009-09-23 13:30

这样ok。有空改逐行读入的吧。 :D
● 鸣学
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: ★★格式化输出,欢迎各种脚本或者语言

#19

帖子 BigSnake.NET » 2009-09-23 13:32

代码: 全选

import sys

c = sys.stdin.read()

for i in c.split('#CONTACT'):
    d = {}
    for j in i.split('\n'):
        if j.find('=') >= 0:
            key, value = j.split('=', 1)
            d[key] = value
    if d.has_key('NAME') and d.has_key('PHONE'):
        sys.stdout.write('%s,%s\n' % (d['NAME'], d['PHONE']))

^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: ★★格式化输出,欢迎各种脚本或者语言

#20

帖子 oneleaf » 2009-09-23 13:37

eexpress 写了:这样ok。有空改逐行读入的吧。 :D
在上面已经贴出。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#21

帖子 eexpress » 2009-09-23 13:42

额。第2个没输出。球猫的也没。球猫的是管道吧,没输出。文件作参数,也是“死机”。
● 鸣学
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: ★★格式化输出,欢迎各种脚本或者语言

#22

帖子 oneleaf » 2009-09-23 13:46

eexpress 写了:额。第2个没输出。球猫的也没。球猫的是管道吧,没输出。文件作参数,也是“死机”。
我稍微改了下,你检查是是不是 ICON/MAIL/PHONE 的大小写问题?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#23

帖子 eexpress » 2009-09-23 13:48

额。叶子怎么检查icon mail phone啊。奇怪了。我是去name phone
不是大小写的事情。
● 鸣学
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: ★★格式化输出,欢迎各种脚本或者语言

#24

帖子 cnkilior » 2009-09-23 13:49

ee你太变态了~~~~~~那么多空格要整死我啊!!!

代码: 全选

#!/bin/sh

#ALL Variables
cleaner(){
     NAME=
     PHONE=


       #需要补全,我偷个懒好吧!只清空关键字段。
}
writer(){
[ -z "$NAME" ]||[ -z "$PHONE" ]&&return    ##其中有一个关键字段空,就不输出。
echo ${NAME},$PHONE >>  b.txt
}
while read LINE;do
    case "$LINE" in
         "")
             continue
             ;;
          \#CONTACT)
                writer
                cleaner
                ;;
            *)
                VAR=${LINE%%=*}
                VUL=${LINE##*=}
                if [ "$VAR" = "NAME" ];then
                    NAME="$VUL"
                elif [ "$VAR" = "PHONE" ];then
                    PHONE="$VUL"
                fi
                 ;;
        esac
done   < $1
writer         #保证最后一组数据写入
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: ★★格式化输出,欢迎各种脚本或者语言

#25

帖子 oneleaf » 2009-09-23 13:52

eexpress 写了:额。叶子怎么检查icon mail phone啊。奇怪了。我是去name phone
不是大小写的事情。
检查你的文件里面是不是这几个参数是不是都是大写的?你要name?ok.

代码: 全选

#!/bin/python
import re
r=r'CONTACT.*?ICON'
d=open("a.txt").read()
g=re.findall(r,d,re.S)
for a in g:
    r=r'NAME=(.*?)\n.*?PHONE=(.*?)\n'
    x=re.search(r,a,re.S)
    if x : 
         n,p=(x.group(1).strip(),x.group(2).strip())
         if n and p:
             print "%s,%s"%(n,p)
逐行读入的

代码: 全选

#!/bin/python
d=open("a.txt")
e=False
n=p=None
for a in d:
    if a.find('NAME')==0: 
       n=a[5:].strip()
       e=True
    if a.find('PHONE')==0: p=a[6:].strip()
    if e and n and p: 
        print "%s,%s"%(n,p)
        e=False
        n=p=None
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: ★★格式化输出,欢迎各种脚本或者语言

#26

帖子 cnkilior » 2009-09-23 14:03

eexpress 写了:额。第2个没输出。球猫的也没。球猫的是管道吧,没输出。文件作参数,也是“死机”。

猫球的可以

代码: 全选

cat b |python a.py 
binsos@googlegroups.com,1xxxxx999901
python的字典果然强大。

我还是习惯shell。

eval居然不接受IFS控制……奇特的性质!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#27

帖子 eexpress » 2009-09-23 14:25

多谢各位研究。

残局结束了。谢谢各位让我知道,我选择了最正确的perl。

4行有效代码。

代码: 全选

● cat t.pl
#!/usr/bin/perl

while(<>){
chomp;
$name=$',next if /NAME=/;
print $name.",".$'."\n" if /PHONE=/ && $';
}
:em11
● 鸣学
头像
oneleaf
论坛管理员
帖子: 10441
注册时间: 2005-03-27 0:06
系统: Ubuntu 12.04

Re: ★★格式化输出,欢迎各种脚本或者语言

#28

帖子 oneleaf » 2009-09-23 14:34

:em01 EE 显摆
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: ★★格式化输出,欢迎各种脚本或者语言

#29

帖子 eexpress » 2009-09-23 14:43

经常在irc说这些。就想比较下效率。下次开一个大型的比较。

下次请大家吃鱼。 :D
● 鸣学
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: ★★格式化输出,欢迎各种脚本或者语言

#30

帖子 cnkilior » 2009-09-23 14:49

臭显摆!
回复