免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24624052 | 回复: 24624052

sed终极脚本--dc计算器 [复制链接]

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2011-01-11 09:41 |显示全部楼层
本帖最后由 ly5066113 于 2011-01-12 10:40 编辑

1、如果你是sed初学者,请先读sed1line:
http://bbs.chinaunix.net/viewthread.php?tid=336126

2、如果你对sed已经有一定了解,请读:
http://bbs.chinaunix.net/thread-1762006-1-1.html

3、如果你觉得自己的sed已经炉火纯青了,那么请读本文吧


注意!如果sed水平没有相当高度,请不要读,因为那等于自虐!
原文地址:
http://sed.sourceforge.net/grabbag/scripts/dc.sed
  1. #! /bin/sed -nf
  2. #  dc.sed - an arbitrary precision RPN calculator
  3. #  Created by Greg Ubben <gsu@romulus.ncsc.mil> early 1995, late 1996
  4. #
  5. #  Dedicated to MAC's memory of the IBM 1620 ("CADET") computer.
  6. #  @(#)GSU dc.sed 1.1 06-Mar-1999 [non-explanatory]
  7. #
  8. #  Examples:
  9. #        sqrt(2) to 10 digits:        echo "10k 2vp" | dc.sed
  10. #        20 factorial:                echo "[d1-d1<!*]s! 20l!xp" | dc.sed
  11. #        sin(ln(7)):                echo "s(l(7))" | bc -c /usr/lib/lib.b | dc.sed
  12. #        hex to base 60:                echo "60o16i 6B407.CAFE p" | dc.sed
  13. #        tests most of dc.sed:        echo 16oAk2vp | dc.sed
  14. #
  15. #  To debug or analyze, give the dc Y command as input or add it to
  16. #  embedded dc routines, or add the sed p command to the beginning of
  17. #  the main loop or at various points in the low-level sed routines.
  18. #  If you need to allow [|~] characters in the input, filter this
  19. #  script through "tr '|~' '\36\37'" first (or use dc.pl).
  20. #
  21. #  Not implemented:        ! \
  22. #  But implemented:        K Y t # !< !> != fractional-bases
  23. #  SunOS limits:        199/199 commands (though could pack in 10-20 more)
  24. #  Limitations:                scale <= 999; |obase| >= 1; input digits in [0..F]
  25. #  Completed:                1am Feb 4, 1997

  26. s/^/|P|K0|I10|O10|?~/

  27. :next
  28. s/|?./|?/
  29. s/|?#[         -}]*/|?/
  30. /|?!*[lLsS;:<>=]\{0,1\}$/N
  31. /|?!*[-+*/%^<>=]/b binop
  32. /^|.*|?[dpPfQXZvxkiosStT;:]/b binop
  33. /|?[_0-9A-F.]/b number
  34. /|?\[/b string
  35. /|?l/b load
  36. /|?L/b Load
  37. /|?[sS]/b save
  38. /|?c/ s/[^|]*//
  39. /|?d/ s/[^~]*~/&&/
  40. /|?f/ s//&[pSbz0<aLb]dSaxsaLa/
  41. /|?x/ s/\([^~]*~\)\(.*|?x\)~*/\2\1/
  42. /|?[KIO]/ s/.*|\([KIO]\)\([^|]*\).*|?\1/\2~&/
  43. /|?T/ s/\.*0*~/~/
  44. #  a slow, non-stackable array implementation in dc, just for completeness
  45. #  A fast, stackable, associative array implementation could be done in sed
  46. #  (format: {key}value{key}value...), but would be longer, like load & save.
  47. /|?;/ s/|?;\([^{}]\)/|?~[s}s{L{s}q]S}[S}l\1L}1-d0>}s\1L\1l{xS\1]dS{xL}/
  48. /|?:/ s/|?:\([^{}]\)/|?~[s}L{s}L{s}L}s\1q]S}S}S{[L}1-d0>}S}l\1s\1L\1l{xS\1]dS{x/
  49. /|?[ ~        cdfxKIOT]/b next
  50. /|?\n/b next
  51. /|?[pP]/b print
  52. /|?k/ s/^\([0-9]\{1,3\}\)\([.~].*|K\)[^|]*/\2\1/
  53. /|?i/ s/^\(-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}\)\(~.*|I\)[^|]*/\2\1/
  54. /|?o/ s/^\(-\{0,1\}[1-9][0-9]*\.\{0,1\}[0-9]*\)\(~.*|O\)[^|]*/\2\1/
  55. /|?[kio]/b pop
  56. /|?t/b trunc
  57. /|??/b input
  58. /|?Q/b break
  59. /|?q/b quit
  60. h
  61. /|?[XZz]/b count
  62. /|?v/b sqrt
  63. s/.*|?\([^Y]\).*/\1 is unimplemented/
  64. s/\n/\\n/g
  65. l
  66. g
  67. b next

  68. :print
  69. /^-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}~.*|?p/!b Print
  70. /|O10|/b Print

  71. #  Print a number in a non-decimal output base.  Uses registers a,b,c,d.
  72. #  Handles fractional output bases (O<-1 or O>=1), unlike other dc's.
  73. #  Converts the fraction correctly on negative output bases, unlike
  74. #  UNIX dc.  Also scales the fraction more accurately than UNIX dc.
  75. #
  76. s,|?p,&KSa0kd[[-]Psa0la-]Sad0>a[0P]sad0=a[A*2+]saOtd0>a1-ZSd[[[[ ]P]sclb1\
  77. !=cSbLdlbtZ[[[-]P0lb-sb]sclb0>c1+]sclb0!<c[0P1+dld>c]scdld>cscSdLbP]q]Sb\
  78. [t[1P1-d0<c]scd0<c]ScO_1>bO1!<cO[16]<bOX0<b[[q]sc[dSbdA>c[A]sbdA=c[B]sbd\
  79. B=c[C]sbdC=c[D]sbdD=c[E]sbdE=c[F]sb]xscLbP]~Sd[dtdZOZ+k1O/Tdsb[.5]*[.1]O\
  80. X^*dZkdXK-1+ktsc0kdSb-[Lbdlb*lc+tdSbO*-lb0!=aldx]dsaxLbsb]sad1!>a[[.]POX\
  81. +sb1[SbO*dtdldx-LbO*dZlb!<a]dsax]sadXd0<asbsasaLasbLbscLcsdLdsdLdLak[]pP,
  82. b next

  83. :Print
  84. /|?p/s/[^~]*/&\
  85. ~&/
  86. s/\(.*|P\)\([^|]*\)/\
  87. \2\1/
  88. s/\([^~]*\)\n\([^~]*\)\(.*|P\)/\1\3\2/
  89. h
  90. s/~.*//
  91. /./{ s/.//; p; }
  92. #  Just s/.//p would work if we knew we were running under the -n option.
  93. #  Using l vs p would kind of do \ continuations, but would break strings.
  94. g

  95. :pop
  96. s/[^~]*~//
  97. b next

  98. :load
  99. s/\(.*|?.\)\(.\)/\20~\1/
  100. s/^\(.\)0\(.*|r\1\([^~|]*\)~\)/\1\3\2/
  101. s/.//
  102. b next

  103. :Load
  104. s/\(.*|?.\)\(.\)/\2\1/
  105. s/^\(.\)\(.*|r\1\)\([^~|]*~\)/|\3\2/
  106. /^|/!i\
  107. register empty
  108. s/.//
  109. b next

  110. :save
  111. s/\(.*|?.\)\(.\)/\2\1/
  112. /^\(.\).*|r\1/ !s/\(.\).*|/&r\1|/
  113. /|?S/ s/\(.\).*|r\1/&~/
  114. s/\(.\)\([^~]*~\)\(.*|r\1\)[^~|]*~\{0,1\}/\3\2/
  115. b next

  116. :quit
  117. t quit
  118. s/|?[^~]*~[^~]*~/|?q/
  119. t next
  120. #  Really should be using the -n option to avoid printing a final newline.
  121. s/.*|P\([^|]*\).*/\1/
  122. q

  123. :break
  124. s/[0-9]*/&;987654321009;/
  125. :break1
  126. s/^\([^;]*\)\([1-9]\)\(0*\)\([^1]*\2\(.\)[^;]*\3\(9*\).*|?.\)[^~]*~/\1\5\6\4/
  127. t break1
  128. b pop

  129. :input
  130. N
  131. s/|??\(.*\)\(\n.*\)/|?\2~\1/
  132. b next

  133. :count
  134. /|?Z/ s/~.*//
  135. /^-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}$/ s/[-.0]*\([^.]*\)\.*/\1/
  136. /|?X/ s/-*[0-9A-F]*\.*\([0-9A-F]*\).*/\1/
  137. s/|.*//
  138. /~/ s/[^~]//g

  139. s/./a/g
  140. :count1
  141.         s/a\{10\}/b/g
  142.         s/b*a*/&a9876543210;/
  143.         s/a.\{9\}\(.\).*;/\1/
  144.         y/b/a/
  145. /a/b count1
  146. G
  147. /|?z/ s/\n/&~/
  148. s/\n[^~]*//
  149. b next

  150. :trunc
  151. #  for efficiency, doesn't pad with 0s, so 10k 2 5/ returns just .40
  152. #  The X* here and in a couple other places works around a SunOS 4.x sed bug.
  153. s/\([^.~]*\.*\)\(.*|K\([^|]*\)\)/\3;9876543210009909:\1,\2/
  154. :trunc1
  155.         s/^\([^;]*\)\([1-9]\)\(0*\)\([^1]*\2\(.\)[^:]*X*\3\(9*\)[^,]*\),\([0-9]\)/\1\5\6\4\7,/
  156. t trunc1
  157. s/[^:]*:\([^,]*\)[^~]*/\1/
  158. b normal

  159. :number
  160. s/\(.*|?\)\(_\{0,1\}[0-9A-F]*\.\{0,1\}[0-9A-F]*\)/\2~\1~/
  161. s/^_/-/
  162. /^[^A-F~]*~.*|I10|/b normal
  163. /^[-0.]*~/b normal
  164. s:\([^.~]*\)\.*\([^~]*\):[Ilb^lbk/,\1\2~0A1B2C3D4E5F1=11223344556677889900;.\2:
  165. :digit
  166.     s/^\([^,]*\),\(-*\)\([0-F]\)\([^;]*\(.\)\3[^1;]*\(1*\)\)/I*+\1\2\6\5~,\2\4/
  167. t digit
  168. s:...\([^/]*.\)\([^,]*\)[^.]*\(.*|?.\):\2\3KSb[99]k\1]SaSaXSbLalb0<aLakLbktLbk:
  169. b next

  170. :string
  171. /|?[^]]*$/N
  172. s/\(|?[^]]*\)\[\([^]]*\)]/\1|{\2|}/
  173. /|?\[/b string
  174. s/\(.*|?\)|{\(.*\)|}/\2~\1[/
  175. s/|{/[/g
  176. s/|}/]/g
  177. b next

  178. :binop
  179. /^[^~|]*~[^|]/ !i\
  180. stack empty
  181. //!b next
  182. /^-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}~/ !s/[^~]*\(.*|?!*[^!=<>]\)/0\1/
  183. /^[^~]*~-\{0,1\}[0-9]*\.\{0,1\}[0-9]\{1,\}~/ !s/~[^~]*\(.*|?!*[^!=<>]\)/~0\1/
  184. h
  185. /|?\*/b mul
  186. /|?\//b div
  187. /|?%/b rem
  188. /|?^/b exp

  189. /|?[+-]/ s/^\(-*\)\([^~]*~\)\(-*\)\([^~]*~\).*|?\(-\{0,1\}\).*/\2\4s\3o\1\3\5/
  190. s/\([^.~]*\)\([^~]*~[^.~]*\)\(.*\)/<\1,\2,\3|=-~.0,123456789<></
  191. /^<\([^,]*,[^~]*\)\.*0*~\1\.*0*~/ s/</=/
  192. :cmp1
  193.         s/^\(<[^,]*\)\([0-9]\),\([^,]*\)\([0-9]\),/\1,\2\3,\4/
  194. t cmp1
  195. /^<\([^~]*\)\([^~]\)[^~]*~\1\(.\).*|=.*\3.*\2/ s/</>/
  196. /|?/{
  197.         s/^\([<>]\)\(-[^~]*~-.*\1\)\(.\)/\3\2/
  198.         s/^\(.\)\(.*|?!*\)\1/\2!\1/
  199.         s/|?![^!]\(.\)/&l\1x/
  200.         s/[^~]*~[^~]*~\(.*|?\)!*.\(.*\)|=.*/\1\2/
  201.         b next
  202. }
  203. s/\(-*\)\1|=.*/;9876543210;9876543210/
  204. /o-/ s/;9876543210/;0123456789/
  205. s/^>\([^~]*~\)\([^~]*~\)s\(-*\)\(-*o\3\(-*\)\)/>\2\1s\5\4/

  206. s/,\([0-9]*\)\.*\([^,]*\),\([0-9]*\)\.*\([0-9]*\)/\1,\2\3.,\4;0/
  207. :right1
  208.         s/,\([0-9]\)\([^,]*\),;*\([0-9]\)\([0-9]*\);*0*/\1,\2\3,\4;0/
  209. t right1
  210. s/.\([^,]*\),~\(.*\);0~s\(-*\)o-*/\1~\30\2~/

  211. :addsub1
  212.         s/\(.\{0,1\}\)\(~[^,]*\)\([0-9]\)\(\.*\),\([^;]*\)\(;\([^;]*\(\3[^;]*\)\).*X*\1\(.*\)\)/\2,\4\5\9\8\7\6/
  213.         s/,\([^~]*~\).\{10\}\(.\)[^;]\{0,9\}\([^;]\{0,1\}\)[^;]*/,\2\1\3/
  214. #          could be done in one s/// if we could have >9 back-refs...
  215. /^~.*~;/!b addsub1

  216. :endbin
  217. s/.\([^,]*\),\([0-9.]*\).*/\1\2/
  218. G
  219. s/\n[^~]*~[^~]*//

  220. :normal
  221. s/^\(-*\)0*\([0-9.]*[0-9]\)[^~]*/\1\2/
  222. s/^[^1-9~]*~/0~/
  223. b next

  224. :mul
  225. s/\(-*\)\([0-9]*\)\.*\([0-9]*\)~\(-*\)\([0-9]*\)\.*\([0-9]*\).*|K\([^|]*\).*/\1\4\2\5.!\3\6,|\2<\3~\5>\6:\7;9876543210009909/

  226. :mul1
  227.     s/![0-9]\([^<]*\)<\([0-9]\{0,1\}\)\([^>]*\)>\([0-9]\{0,1\}\)/0!\1\2<\3\4>/
  228.     /![0-9]/ s/\(:[^;]*\)\([1-9]\)\(0*\)\([^0]*\2\(.\).*X*\3\(9*\)\)/\1\5\6\4/
  229. /<~[^>]*>:0*;/!t mul1

  230. s/\(-*\)\1\([^>]*\).*/;\2^>:9876543210aaaaaaaaa/

  231. :mul2
  232.     s/\([0-9]~*\)^/^\1/
  233.     s/<\([0-9]*\)\(.*[~^]\)\([0-9]*\)>/\1<\2>\3/

  234.     :mul3
  235.         s/>\([0-9]\)\(.*\1.\{9\}\(a*\)\)/\1>\2;9\38\37\36\35\34\33\32\31\30/
  236.         s/\(;[^<]*\)\([0-9]\)<\([^;]*\).*\2[0-9]*\(.*\)/\4\1<\2\3/
  237.         s/a[0-9]/a/g
  238.         s/a\{10\}/b/g
  239.         s/b\{10\}/c/g
  240.     /|0*[1-9][^>]*>0*[1-9]/b mul3

  241.     s/;/a9876543210;/
  242.     s/a.\{9\}\(.\)[^;]*\([^,]*\)[0-9]\([.!]*\),/\2,\1\3/
  243.     y/cb/ba/
  244. /|<^/!b mul2
  245. b endbin

  246. :div
  247. #  CDDET
  248. /^[-.0]*[1-9]/ !i\
  249. divide by 0
  250. //!b pop
  251. s/\(-*\)\([0-9]*\)\.*\([^~]*~-*\)\([0-9]*\)\.*\([^~]*\)/\2.\3\1;0\4.\5;0/
  252. :div1
  253.         s/^\.0\([^.]*\)\.;*\([0-9]\)\([0-9]*\);*0*/.\1\2.\3;0/
  254.         s/^\([^.]*\)\([0-9]\)\.\([^;]*;\)0*\([0-9]*\)\([0-9]\)\./\1.\2\30\4.\5/
  255. t div1
  256. s/~\(-*\)\1\(-*\);0*\([^;]*[0-9]\)[^~]*/~123456789743222111~\2\3/
  257. s/\(.\(.\)[^~]*\)[^9]*\2.\{8\}\(.\)[^~]*/\3~\1/
  258. s,|?.,&SaSadSaKdlaZ+LaX-1+[sb1]Sbd1>bkLatsbLa[dSa2lbla*-*dLa!=a]dSaxsakLasbLb*t,
  259. b next

  260. :rem
  261. s,|?%,&Sadla/LaKSa[999]k*Lak-,
  262. b next

  263. :exp
  264. #  This decimal method is just a little faster than the binary method done
  265. #  totally in dc:  1LaKLb [kdSb*LbK]Sb [[.5]*d0ktdSa<bkd*KLad1<a]Sa d1<a kk*
  266. /^[^~]*\./i\
  267. fraction in exponent ignored
  268. s,[^-0-9].*,;9d**dd*8*d*d7dd**d*6d**d5d*d*4*d3d*2lbd**1lb*0,
  269. :exp1
  270.         s/\([0-9]\);\(.*\1\([d*]*\)[^l]*\([^*]*\)\(\**\)\)/;dd*d**d*\4\3\5\2/
  271. t exp1
  272. G
  273. s,-*.\{9\}\([^9]*\)[^0]*0.\(.*|?.\),\2~saSaKdsaLb0kLbkK*+k1\1LaktsbkLax,
  274. s,|?.,&SadSbdXSaZla-SbKLaLadSb[0Lb-d1lb-*d+K+0kkSb[1Lb/]q]Sa0>a[dk]sadK<a[Lb],
  275. b next

  276. :sqrt
  277. #  first square root using sed:  8k2v at 1:30am Dec 17, 1996
  278. /^-/i\
  279. square root of negative number
  280. /^[-0]/b next
  281. s/~.*//
  282. /^\./ s/0\([0-9]\)/\1/g
  283. /^\./ !s/[0-9][0-9]/7/g
  284. G
  285. s/\n/~/
  286. s,|?.,&K1+k KSbSb[dk]SadXdK<asadlb/lb+[.5]*[sbdlb/lb+[.5]*dlb>a]dsaxsasaLbsaLatLbk K1-kt,
  287. b next

  288. #  END OF GSU dc.sed
复制代码
好吧,接下来我们来看这300多行的sed代码能做什么?
将上述脚本保存为 dc.sed ,并赋予可执行权限。
  1. $ echo '123 45 + p' | dc.sed
  2. 168
  3. $ echo '123 45 - p' | dc.sed
  4. 78
  5. $ echo '123 45 * p' | dc.sed
  6. 5535
  7. $ echo '10k 123 45 / p' | dc.sed
  8. 2.7333333333
  9. $ echo '123 45 % p' | dc.sed
  10. 33
  11. $ echo '2 10 ^ p' | dc.sed  
  12. 1024
  13. $ echo '10k 2vp' | dc.sed  
  14. 1.4142135623
  15. $ echo '[d1-d1<!*]s! 20l!xp' | dc.sed
  16. 2432902008176640000
复制代码
没错,你没有看错!!!
它实现了加、减、乘、除、幂、开方、阶乘。。。。。。
一切 dc 命令能实现的运算,它都实现了

更重要的,它的性能很好,并且没有计算位数的上限
  1. $ time echo '123456789012345123456789 456789123456789 * p' | dc.sed
  2. 56393718437738868313313492304750190521

  3. real    0m0.00s
  4. user    0m0.02s
  5. sys     0m0.00s
  6. $ time echo '123456789012345123456789 456789123456789 / p' | dc.sed
  7. 270270859

  8. real    0m0.10s
  9. user    0m0.10s
  10. sys     0m0.00s
  11. $ time echo "[d1-d1<!*]s! 90l!xp" | dc.sed
  12. 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000

  13. real    0m1.67s
  14. user    0m1.54s
  15. sys     0m0.00s
  16. $ time echo "[d1-d1<!*]s! 90l!xp" | dc   
  17. 14857159644817614973095227336208257378855699612846887669422168637049\
  18. 85393094065876545992131370884059645617234469978112000000000000000000\
  19. 000

  20. real    0m0.01s
  21. user    0m0.00s
  22. sys     0m0.01s
  23. $ time echo "[d1-d1<!*]s! 100l!xp" | dc.sed
  24. 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

  25. real    0m2.77s
  26. user    0m1.63s
  27. sys     0m0.00s
  28. $ time echo "[d1-d1<!*]s! 100l!xp" | dc   
  29. 0705-009: out of stack space
  30. stack empty
  31. 15554369240657358780283206476044450081785994710730270244765493982536\
  32. 26666553831926815691066269275304770894965347120395970853086848614400\
  33. 0000000000000000000000

  34. real    0m0.01s
  35. user    0m0.00s
  36. sys     0m0.01s
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-01-11 09:43 |显示全部楼层
哇,Tim又有大作了,先占个位子!

论坛徽章:
0
发表于 2011-01-11 09:44 |显示全部楼层
Orz

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-01-11 09:48 |显示全部楼层

被虐出快感了

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-01-11 10:24 |显示全部楼层
OMG
太牛了,实在太牛了,我已经不去再想那个乘法了.
虽然我想,我也可以用我的方法把实现dc的sed写出来,但实在是漫长的过程,并且不可能写的如此简洁.
受打击了

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-01-11 10:25 |显示全部楼层
OMG
太牛了,实在太牛了,我已经不去再想那个乘法了.
虽然我想,我也可以用我的方法把实现dc的sed写出来,但实 ...
cjaizss 发表于 2011-01-11 10:24



    性能如此之高,找机会一定看看sed终极骨灰玩家的作品,拜读

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-01-11 10:27 |显示全部楼层
It's so incredible

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
发表于 2011-01-11 10:27 |显示全部楼层
回复 5# cjaizss


没错,不但简洁,而且高效!
效率真的很高,100的介乘只要短短2、3秒!

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-01-11 10:27 |显示全部楼层
哇,Tim又有大作了,先占个位子!
yinyuemi 发表于 2011-01-11 09:43



    不是,老外写的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-01-11 10:40 |显示全部楼层
这么牛的程序,回去一定要好好学习一下,开拓一下思路,太强了,我真的只能用震惊两个字形容
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP