LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 4773|回复: 8

文本模式下手动画表格的脚本

[复制链接]
发表于 2004-1-9 13:19:01 | 显示全部楼层 |阅读模式
我正在写一个在文本下绘制表格的脚本程序,现在可以画表了,难题是如果保存到一个文本文件中,而且是可以编辑的?
我尝试了用script制作副本的方法,可以无法在vi中编辑,用>>到文件的方法还没有理出头绪?请大家一起动手,尽力完善,出谋划策
  1. [/home/javalee/myshell]cat mytab
  2. #!/bin/ksh
  3. #scriptname:mytab
  4. #author:javalee
  5. #
  6. ######begin
  7. function char {
  8. stty cbreak  -echo
  9. dd if=/dev/tty bs=1 count=1 2>/dev/null
  10. stty  -cbreak echo
  11. }
  12. clear
  13. #
  14. echo -n "\\033[1;1HTable Guide:"
  15. echo -n "\\033[2;1H----------------------------------------------------------------------------------------------------
  16. CONTROLKEY:
  17.         [Key-i=UP]      [Key-k=DOWN]    [Key-j=LEFT]    [Key-l=RIGHT]   [Key-q=EXIT]
  18.         [Key-A=\\0311]  [Key-B=\\0315]  [Key-C=\\0273]  [Key-D=\\0272]  [Key-E=\\0314]
  19.         [Key-F=\\0271]  [Key-G=\\0316]  [Key-W=\\0274]  [Key-S=\\0310]  [Key-R=\\0313]\n----------------------------------------------------------------------------------------------------"
  20. #设定光标初始位置
  21. echo -n "\\033[8;1HBEGIN:"
  22. #这个循环里定义了一些按键
  23. while true;do
  24.         case $(char) in
  25.         i)      echo -n "\\033[1A";echo -n "\\033[s"
  26.                 ;;
  27.         k)      echo -n "\\033[1B";echo -n "\\033[s"
  28.                 ;;
  29.         j)      echo -n "\\033[1D";echo -n "\\033[s"
  30.                 ;;
  31.         l)      echo -n "\\033[1C";echo -n "\\033[s"
  32.                 ;;
  33.         a)      echo -n "\\0311";echo -n "\\033[s"
  34.                 ;;
  35.         b)      echo -n "\\0315";echo -n "\\033[s"
  36.                 ;;
  37.         c)      echo -n "\\0273";echo -n "\\033[s"
  38.                 ;;
  39.         d)      echo -n "\\0272";echo -n "\\033[s"
  40.                 ;;
  41.         e)      echo -n "\\0314";echo -n "\\033[s"
  42.                 ;;
  43.         f)      echo -n "\\0271";echo -n "\\033[s"
  44.                 ;;
  45.         g)      echo -n "\\0316";echo -n "\\033[s"
  46.                 ;;
  47.         w)      echo -n "\\0274";echo -n "\\033[s"
  48.                 ;;
  49.         s)      echo -n "\\0310";echo -n "\\033[s"
  50.                 ;;
  51.         r)      echo -n "\\0313";echo -n "\\033[s"
  52.                 ;;
  53.          )      echo -n "\\0331D"
  54.                 ;;
  55.         q)      echo -n "\\033[8;1HQuit?[y/n]"
  56.                 read answer
  57.                         case $answer in
  58.                         y)      exit;;
  59.                         *)      echo -n "\033[u";continue;;
  60.                 esac
  61.                 ;;
  62.        esac
  63. done
复制代码
BTW:基于文本方式,可以显示这些制表符. ;)
 楼主| 发表于 2004-1-9 15:13:28 | 显示全部楼层
现在可以用>>的方法添加到文件,而且可以编辑并加入文字了,
现在作的是要解决制表符错位和光标位置的计算的难题了
  1. ...
  2. echo -n "\\033[8;1HName:"
  3. read tab
  4. touch $tab
  5. ...
  6. a)      echo -n "\\0311";echo $(echo -n "\\0311")|tr -d "\n">>$tab;echo -n "\\033[s"
  7. ...
复制代码
感兴趣的可以试一试!至少锻炼你驾驭光标的能力~~~
 楼主| 发表于 2004-1-27 01:02:19 | 显示全部楼层
用tee可以生成文件啦,用cat也可以看到画的表格,可是用vi编辑出现了很多控制字符,:ask
见附件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2004-1-27 13:45:22 | 显示全部楼层
修改后的,在字符下可以画出表格,而且也可以用vi编辑,但是问题在红色的地方 :ask
  1. [/home/javalee/myshell]cat mytab
  2. #!/bin/ksh
  3. #
  4. #
  5. function char {
  6. stty cbreak  -echo
  7. dd if=/dev/tty bs=1 count=1 2>/dev/null
  8. stty  -cbreak echo
  9. }
  10. clear
  11. echo -n "\\033[1;1HTable Guide:"
  12. echo -n "\\033[2;1H----------------------------------------------------------------------------------------------------
  13. CONTROLKEY:
  14. [Key-K=DOWN] [Key-SPACE=RIGHT] [Key-BACK=L-MOVE 1 STR] [Key-Q=EXIT] [Key-TAB=R-MOVE 8 STRS]
  15. [Key-A=\\0311]  [Key-B=\\0315]  [Key-C=\\0273]  [Key-D=\\0272]  [Key-E=\\0314]
  16. [Key-F=\\0271]  [Key-G=\\0316]  [Key-W=\\0274]  [Key-S=\\0310]  [Key-R=\\0313][Key-H=\\0312]\n----------------------------------------------------------------------------------------------------"
  17. echo -n "\\033[8;1HName:"
  18. read myfile
  19. touch $myfile
  20. echo -n "\\033[9;1HBEGIN:\n"
  21. while true;do
  22.         case $(char) in
  23.         k)      echo -n "\n"
  24.                 ;;[color=red]
  25.         )      echo -n "\\033[1D"[/color]#这个用ctrl+shift+/得到,他就是退格键
  26.                 ;;
  27.         " ")    echo -n " "
  28.                 ;;
  29.         "       ")      echo -n "\\033[8C"
  30.                 ;;
  31.         a)      echo -n "\\0311"
  32.                 ;;
  33.         b)      echo -n "\\0315"
  34.                 ;;
  35.         c)      echo -n "\\0273"
  36.                 ;;
  37.         d)      echo -n "\\0272"
  38.                 ;;
  39.         e)      echo -n "\\0314"
  40.                 ;;
  41.         f)      echo -n "\\0271"
  42.                 ;;
  43.         g)      echo -n "\\0316"
  44.                 ;;
  45.         h)      echo -n "\\0312"
  46.                 ;;
  47.         w)      echo -n "\\0274"
  48.                 ;;
  49.         s)      echo -n "\\0310"
  50.                 ;;
  51.         r)      echo -n "\\0313"
  52.                 ;;
  53.         q)      break
  54.                 ;;
  55.         esac
  56. done|tee $myfile;cat $myfile|tr -d |tr -d  |tr -d "[1D8C" >tmp$$;mv tmp$$ $myfile #tr后面有控制字符,所以无法显示
  57. echo
复制代码
希望大家给改进改进~~,谢谢 :thank

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2004-1-27 21:03:02 | 显示全部楼层
emacs 有画文本表格的功能。
发表于 2004-2-4 21:16:07 | 显示全部楼层
keisen-mode是一个用来绘制表格的好工具, 尤其是绘制中文表格, 比起那个table.el来说好多了
http://zhdotemacs.sourceforge.net/emacs/x431.html

sketch.vim : Draw with mouse: boxes, arrows, lines, fills. Transparent/opaque drag and drop.
http://vim.sourceforge.net/scripts/script.php?script_id=705

boxdraw : Draw diagrams and tables using boxdrawing characters
http://vim.sourceforge.net/scripts/script.php?script_id=173
 楼主| 发表于 2004-2-4 21:30:33 | 显示全部楼层
:thank 原来有那么多好东东~~
发表于 2004-2-5 14:17:35 | 显示全部楼层
呵呵,是呀,所以说需要一个软件时最好先到网上找找,往往已经有人做出来了,这不就省掉重复做轮子的时间了吗
 楼主| 发表于 2004-2-5 14:59:14 | 显示全部楼层
最初由 idkey 发表
呵呵,是呀,所以说需要一个软件时最好先到网上找找,往往已经有人做出来了,这不就省掉重复做轮子的时间了吗

当然,不过自己做出来的更有成就感~~ ;)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表