作者归档:贝贝爸

你叫我一声

上网时间长了,难免各种im工具都用,什么msn,qq,gtalk,旺旺啥的。上面的好友列表也是越来越长,尽管可能经常说话的人不到10%,甚至有些人都不知道是谁。
列表上人多,如果分类不科学,或者没有好的搜索方法,就会在找人的时候找不到。
这天老D有事儿找老L,要发文件给老L,可以列表里一时找不到,就对老L说:你叫我一下。
老L看看老D,尽管有些疑惑,还是喊了一声:老D。

众同事安静片刻,突然爆笑。。。。

python读有文件结束符的txt文本文件

一直用python读文件都是文本文件。用的方法是:

lines=open('ft.txt')

但是前两天读一个几百兆的大文件的时候,遇到了奇怪的问题,觉得是内容没有读完。定位最后读到的行,用emeditor打开,发现有一个怪字符“”。编码是“\x001a”,一查,原来是文件结束符号。
一直郁闷,奇怪为啥文本文件里面有文件结束符,试了好多办法,都不行,最后经limodou指点,原来这种情况要当成二进制文件来读。

lines=open('ft.txt','rb')

文件内容如下:

abcdefg

两种不同情况的结果如下:

>>> f=open('ft.txt')
>>> f.read()
'abc'
>>> f=open('ft.txt','rb')
>>> f.read()
'abc\x1adefg'

jquery货币数值排序

jquery是个好东西,现在有很多基于它的plugin,tablesorter 就是一个。
上面有好多例子,就不转贴了。最近做了一个小东西,用到了它。
因为是财务的东西,金额用到了千分位,就是每多三位,加一个逗号。原来用都是按照数字来的,加了这个逗号之后,tablesorter不认为它是数字了,他认为234.00比1,234.53大。这也难怪,看了例子,如果是这种货币格式,前面如果是$符号的话,这种格式排序是没问题的。
仔细看了一下文档,原来人家已经考虑到了这样的问题,加下面代码就可以了。

$("#myTable").tablesorter({
	headers: { 4: {sorter:"currency"}}
});

测试通过

另:推荐一篇关于中国教育讨论的文章

python非贪婪、多行匹配正则表达式例子

一些regular的tips:

1 非贪婪flag

 >>> re.findall(r"a(\d+?)", "a23b")
        ['2']
>>> re.findall(r"a(\d+)", "a23b")
        ['23']

注意比较这种情况:

      >>> re.findall(r"a(\d+)b", "a23b")
        ['23']
>>> re.findall(r"a(\d+?)b", "a23b")
        ['23']

2 如果你要多行匹配,那么加上re.S和re.M标志
re.S:.将会匹配换行符,默认.不会匹配换行符

       >>> re.findall(r"a(\d+)b.+a(\d+)b", "a23b\na34b")
        []
>>> re.findall(r"a(\d+)b.+a(\d+)b", "a23b\na34b", re.S)
        [('23', '34')]
>>>

re.M:^$标志将会匹配每一行,默认^和$只会匹配第一行

 >>> re.findall(r"^a(\d+)b", "a23b\na34b")
        ['23']
>>> re.findall(r"^a(\d+)b", "a23b\na34b", re.M)
        ['23', '34']

但是,如果没有^标志,

>>> re.findall(r"a(\d+)b", "a23b\na23b")
        ['23', '23']

可见,是无需re.M

oracle pl/sql身份证15位转15位的function

工作中经常遇到身份证要从15位转换到18位的数据,朋友给了一个这样的oracle,pl/sql的函数。测试过,没问题贴出来,备用。

create or replace function f_15to18(idCardNum varchar2) return varchar2 is
  Result varchar2(20);
i smallint;
num smallint:=0;
sNum varchar2(2);
code char(1);
temp17 varchar2(20);
begin
  
  if length(idCardNum)=18 or idCardNum is null then 
   Result:=upper(idCardNum);
  elsif length(idCardNum)=15 then 
  temp17:=substr(idCardNum,1,6) || '19' || substr(idCardNum,7,9);
  i:=18;
  

  while i>1 loop
  num:=num+mod(power(2,i-1),11)*substr(temp17,19-i,1) ;
  i:=i-1;
  end loop;
  
  num:=mod(num,11);
  
  sNum:=num || '';
  if num=0 then
    code:='1';
    elsif num=1 then
    code:='0';
    elsif num=2 then
    code:='X';
    else
    code:=(12-num) || '';
  end if;
     Result:=temp17 || code;
  else 
     Result:= idCardNum;
  end if;
  return Result;
  exception 
  when others then
  dbms_output.put_line(idCardNum);
  
end f_15to18;
/

笑话两则

昨天喝酒,一哥们带一个朋友来,有气质!!!哥们介绍说,这位朋友炒601857的,都炒成百万富翁了。哇靠!!!厉害,大家佩服,一美眉不禁问道,大哥您原来是干啥的啊?该朋友说,我原来是他妈千万富翁!

一日在taobao上买冲值卡,找到一卖家,因为担心有些号码段不能重,我问”150的可以冲么?”
老板说:“可以,冲一个100的,再冲一个50的”