日期:2014-05-16 浏览次数:21015 次
我在做SEHLL编程时,遇到了一个非常棘手的问题,就是字符串(任意字符全角半角都会有,数字也有,符号也有)前面补足
16位,不足16位的补空格。这样我就必须先知道我的字符串的字节数。LINUX中也没有一个合理的求字节的函数。类似于
windows系统中,全角两个字节,半角一个字节。最终采用了下面的方式。
我用awk处理一个文件,求文件中的某一列的字节长度(不是字符个数,也不是单纯的字节长度,而是全角算2位,半角算1
位)。因为字符编码要转换为SJIS-WIN,这里的处理要传给shell通过wc -c来解决,不能用awk内置的函数length来求字符长
度,否则求的长度不准确。
代码如下:
cmd="echo \""$11 NR"\" | iconv -t SJIS-WIN |wc -c"; cmd| getline lena;a=sprintf("%-"16-lena"s","");
最终在处理时,一列中没有重复的或者重复的在一起没有问题,但是一列中重复与重复的之间有别的字符就会错误。第二个重
复的会参照它紧挨得上面的字符的长度。
测试用例:
我是菜鸟求帮助 ,
我是菜鸟求帮助 ,
帮助 ,
我是菜鸟求帮助 ,
上面数据中最后一列很明显补的长度参照了他紧挨着的上面的长度16-4=12。最终被错误的补了12个空格。