日期:2014-05-16 浏览次数:20841 次
我在做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个空格。