2011年05月26日 星期四 09:28
给力... 我第一时间想到的实现就是用c一个字符一个字符的读取,然后强制写到屏幕的指定位置... 2011/5/26 Zhang Weiwu <almustafa在realss.com> > > On Wed, 25 May 2011, 高增琦 wrote: > > 抱歉,说的不太清楚,其实是这么个意思: >> > > > 我原以为你说的算法实现起来比说清楚容易,如今发现实践起来也花了我一些时间, > 肯定多于文字说明的时间了。 > > 实践效果基本令人满意!但仅测试了一个文本. 注意为了测试这个文本,你需要能一字不差拷贝粘贴的软件,有些邮件软件会把下 > 面文本中的tab换为空格。 > > filename is /tmp/input.txt: > > The sun went down with practiced bravado. Twilight crawled across the sky, > laden with foreboding. After Y2K, the end of the world had become a > cliché. But who was I to talk, a brooding underdog avenger alone against an > empire of evil out to right a grave injustice. Everything was subjective. > There were only personal apocalypses. Nothing is a cliché when it is > happening to you. > It was a lucky break. The goons inside were spooked, but luck always came > with a price tag. It was not about how good you were. It was chaos and > luck and anyone who thought differently was a fool. > Snow fell like ash from post-apocalyptic skies. Who was I kidding, the best > I was, was superman on kryptonite. > > > $ foldcol.awk width=72 pass=1 /tmp/input.txt pass=2 /tmp/input.txt > [The sun went down with ][After Y2K, the end of the world had become a ] > [practiced bravado. ][cliché. But who was I to talk, a brooding ] > [Twilight crawled across ][underdog avenger alone against an empire of ] > [the sky, laden with ][evil out to right a grave injustice. ] > [foreboding. ][Everything was subjective. There were only ] > [ ][personal apocalypses. Nothing is a cliché ] > [ ][when it is happening to you. ] > [ ][ ] > [It was a lucky break. ][It was not about how good you were. It was ] > [The goons inside were ][chaos and luck and anyone who thought ] > [spooked, but luck ][differently was a fool. ] > [always came with a ][ ] > [price tag. ][ ] > [ ][ ] > [Snow fell like ash from ][Who was I kidding, the best I was, was ] > [post-apocalyptic skies. ][superman on kryptonite. ] > [ ][ ] > > > The source code: > > #!/usr/bin/awk -f > # foldcol.awk: perform like fold(1) plus column(1) > # example: foldcol.awk width=72 pass=1 /tmp/input.txt pass=2 /tmp/input.txt > BEGIN { FS="\t"; width=80; } # table default to 80 columns wide > > pass==1 { > for (i=1; i<=NF; i++) { > c[i] += length($i); # count of number of chars in each > column > t += length($i); # total chars in all columns > } > } > > pass==2 { > for (i=1; i<=NF; i++) { > cmd[i] = "echo '" $i "' | " "fold -sw" int(c[i]/t*width) > } > tr = 1 # number of columns that has output of fold(1) > while (tr > 0) { # go on until no column has output from fold(1) > tr = 0 > for (i=1; i<=NF; i++) { > l = ""; > tr += (cmd[i] | getline l) > printf "[%-" int(c[i]/t*width) "s]", l > } > print ""; > } > for (i=1; i<=NF; i++) { > close(cmd[i]) > } > } -- GaoZengqi pgf00a在gmail.com zengqigao在gmail.com -------------- 下一部分 -------------- 一个HTML附件被移除... URL: <http://www.zeuux.org/pipermail/zeuux-universe/attachments/20110526/7d4626f0/attachment-0001.html>
Zeuux © 2024
京ICP备05028076号