看板Programming
标 题Re: [问题] 这样的需求得要自己写程式吗?
发信站SayYA 资讯站 (Sat Sep 29 15:24:45 2007)
转信站ptt!ctu-reader!ctu-peer!news.nctu!News.Math.NCTU!SayYa
※ 引述《[email protected] (眠月..)》之铭言:
> ※ 引述《[email protected] (期待2008!)》之铭言:
> > 有一个2MB多的Unicode纯文字档,当中有很多重覆的字串"1"、"2"、"3"..."200",
> > 如果想将"85"之後的字串其数值都+1,也就是处理後"1"~"84"不变,"85"变"86"、
> > "86"变"87"...."200"变"201",那麽这有什麽现成的Editor可以使用吗?还是非得
> > 自己写个程式来处理?如果只能自己写的话,各位板友建议用哪一种语言写,对
> > 初学者来说比较容易?处理速度又以哪一种语言最快呢?还是速度都差不多?
> 我会的语言不多,
> 不过我觉得 Python 处理这个很快
> 速度的话,我不知道...
> > 谢谢大家的指导!
> 大家好像都假定问题是用 \n 分隔的单纯数字?
> 原 po 好像没有讲单纯是这样?
> 那我会用 Python 配合 regex 来作...
-.o 挖~大家讨论的好像独缺php..
<?php
# $file = file_get_contents("filename.txt"); // 读出
$file = '"1","2","3"..."200","201","202"'; // 模拟
echo $data = preg_replace_callback('/\"([[:digit:]]+)\"/s', "func", $file);
# file_put_contents("filename.txt", $data); // 写回
function func ($file)
{
return '"'.($file[1] >= 85 ? $file[1]+1 : $file[1]).'"';
}
?>
(逃)...:x
> import re
> s = open(filename).read()
> n = re.findall('\d+', s) # n 存放所有的数字 token
> t = re.split('\d+', s) # t 存放所有的非数字 token
> o = '' # o 存放结果
> # 把切好的数字跟非数字接起来
> for i in range(len(n)) :
> o += t[i]
> # 如果数字大於 84 那就 +1
> if int(n[i]) > 84 :
> o += str( int( n[i] + 1 ) )
> else :
> o += n[i]
> o += t[len(n)]
--
※ Origin: SayYA 资讯站 <bbs.sayya.org>
◆ From: 61-221-116-50.hinet-ip.hinet.net