近期工作
根据需求实现了所有基本功能(除去包含硬回车和浮点数精度处理),对代码进行了简单测试及优化整理(接下来继续),同时对前面博客内容根据具体实现进行了相应修改。
存在问题
浮点数精度问题
浮点数要右对齐,主要问题是怎样识别浮点数,我认为要是每次输出都识别是否是浮点数会影响效率,而且数字占多少比例按浮点数处理(比如 "300.5元可买500个" 怎样处理)。简单的方法是用户指定哪些列是数字(目前的做法),或者是根据第一行该列是否是数字来决定。
此问题已在张老师的指导下找到了解决的方法,在实现中。
列宽调整优化问题
从文件读入数据时,可以使用先读入一遍文件,按各列字符宽度比例确定列宽。在输出时实现了贪婪法自动换行(参见自动换行-最小长度),但是这种情况下列尾可能会存在很多空白字符,需要稍微调整列宽减少空字符,暂时还没找到好的方法。
程序中尽量不要exit
这点我开始没能体会到,在张老师的指点下,感觉这样是有必要的,原因如下:
foldcolumn作为命令行绘制表格工具,肯定会和其他命令实现绘制表格,其他命令提供数据源,是关键业务,表格输出只是辅助功能,如果foldcolum中某些条件不符合就退出的话,会导致终止关键业务(准确说应该是foldcolum获取了其他命令的输出,又没打印出来),所以不应该exit,而是要容忍这些不符合条件的数据,比如原样输出。
常见linux平台移植性问题
主要是考虑
(1)用到的非标准C函数
(2)C99中的宽字符处理函数:heirloom/fold中直接使用,breaktext.c中是通过USE_WCHAR_FUNCTIONS宏来判断有无宽字符处理函数的。
(3)Unix,CP/M,BBS绘制表格的移植性
学到知识
字符编码与C宽字符处理相关
Libunibreak库与自动换行算法,参见自动换行算法
常用命令行绘制表格方法,参见绘制表格
Git原理与使用
下一步计划
(1)进一步测试、完善功能
(2)相似项目的兼容性优化,如Heirloom、groff
(3)*inux平台移植性考虑
(4)完善Makefile,使其适于常见Linux环境
(5)manpage
(6)rpm