我想到了两种方法:
(1)自动识别表格第一行(非原样输出的行,后面在不引起混淆的前提下,都是指的非原样输出的第一行)各列,后序行各列以此为准;
(2)用户指定哪些列是数值列;
在张老师的指导下,选择第二种方法,原因如下:若使用第一种方法,用户在初次使用foldcolumn 时,可能通过第一行识别,工作的很好,但是不能保证以后用户再次使用时依旧工作良好,这样会给用户造成困惑。
注:完全是整数的数值列,因不需要处理精度,没必要去指定为数值列,直接原样输出就行了。
前面表格列数的确定使用的以第一行为准,需要修改成以用户指定为准,在用户不指定的情况下,再以第一行的列数为主。
表格的某列被用户指定为数值列,但是这列的某些行可能不是纯粹的数值,如下面几种情况
+23.6%
-1400.8859%
前缀可以是正负号(可以有空白字符,当然可以没有前缀,目前程序中将数字前面的字符当作前缀考虑,未判断前缀),后缀是出去数值后面的字符串,后缀原样输出,后缀规则见(2)包含多数值的列
85m2 (用户数据中用m2后缀表示平方米)
10m × 20lm × 4cm
如果只识别第一个数值,把后面当作后缀输出,85m2能工作良好,但是后面的例子就有点不妥了,所以将整体当作文本串原样输出,对齐方式还是遵循用户指定的对齐方式,即列中只能包含一个数值,否则原样输出。
1.对前后缀非法的数值认为是非数值,按原样输出(代码中只识别了前后缀,暂未判断有效性)
2.对非法数值认为只非数值,原样输出,如100.8.8
3.double范围内不能表示的数值,同样认为是非数值,原样输出
普通文本列超宽实现了自动换行,数值列超宽,仍自动换行,如:
12345.6789m ,列宽7,如果超宽换行,右对齐会如下输出:
12345.6
789m
左对齐效如下:
12345.6
789m
用户可以指定哪些列是右对齐,不指定右对齐的列使用左对齐方式,对齐方式通过填充半角空格实现。
借鉴linux下的cut命令参数的解析参见cut命令行参数解析
-aLIST 指定LIST列为右对齐
-fLIST 指定LIST列为数值列
LIST是用逗号分隔符分开的数字,从1开始,如下:
N 第N列
N-M 第N到第M列(包括M列)
N- 第N列到最后列
-N 第1列到第N列
-f1,3 表示第1、3列为数值列
-f1-5,表示第1到5列为数值列