文件内容中每一列的长度固定(不够的右边补空格),即内容显示每一列都是左对齐的。
但有一个棘手的问题,就是用户的数据里面偶尔包含有特殊字符(比如“αФ×’—φ),会导致错位(如图)。
我的程序中是用utf-8读取字符串的字节数来判断每一列需补多少空格,但是当有这些特殊符号时,它们的字节数都不一样的,所以会导致错位。
在用户需求以及数据内容不能改变的情况下,有什么方法可以解决?
22 个解决方案
#1
可以导出到excel
#2
Txt接口是跟用户第三方系统交互用的,不能改变格式
#3
这里可能要明确下“每一列的长度固定”中,长度的含义。
是指字节个数呢,还是普通的字符串长度?
如果是字节个数,则所有字符串都转字节,再取字节数组length。
如果是字符串长度,直接取字符串length()。
#4
问题是你的文本编辑器不是根据UTF8字节的长度来显示每个字符的占位空间的。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。
#5
#6
能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢
#7
#8
与字节多长无关.
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...
#9
通过控制字符编码格式可以控制字节数吧!
#10
神路过。。。
#11
#12
learning~
#13
数据分为几段对齐 是这个意思吧
每段取 可能的最大长度
填入数据 不足的地方用空格补足
每段取 可能的最大长度
填入数据 不足的地方用空格补足
#14
这是什么里面的?
#15
int length = "“αФ×’—φ".getBytes().length;
根据字符串的字节长度补位
根据字符串的字节长度补位
#16
#17
这样试下, 列与列之间,用制表符\t分隔。。。
#18
学习学习下。。。。。
#19
还是头一次见拿TXT做交互的。。。。
#20
LZ你遇到的问题应该不是特别复杂吧。
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤
#21
需要确认需求 如果是字节一定 就填充字节 如果是字符一定 就填充字符
#22
你看你的数据格式差不多都一样,就第二列和第三列的数据可能影响格式,你自己大致估算一下这两列中最长的字符有多少,然后定一个标准比,不足的用空格补齐就好了
#1
可以导出到excel
#2
Txt接口是跟用户第三方系统交互用的,不能改变格式
#3
这里可能要明确下“每一列的长度固定”中,长度的含义。
是指字节个数呢,还是普通的字符串长度?
如果是字节个数,则所有字符串都转字节,再取字节数组length。
如果是字符串长度,直接取字符串length()。
#4
问题是你的文本编辑器不是根据UTF8字节的长度来显示每个字符的占位空间的。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。
#5
#6
能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢
#7
#8
与字节多长无关.
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...
#9
通过控制字符编码格式可以控制字节数吧!
#10
神路过。。。
#11
#12
learning~
#13
数据分为几段对齐 是这个意思吧
每段取 可能的最大长度
填入数据 不足的地方用空格补足
每段取 可能的最大长度
填入数据 不足的地方用空格补足
#14
这是什么里面的?
#15
int length = "“αФ×’—φ".getBytes().length;
根据字符串的字节长度补位
根据字符串的字节长度补位
#16
#17
这样试下, 列与列之间,用制表符\t分隔。。。
#18
学习学习下。。。。。
#19
还是头一次见拿TXT做交互的。。。。
#20
LZ你遇到的问题应该不是特别复杂吧。
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤
#21
需要确认需求 如果是字节一定 就填充字节 如果是字符一定 就填充字符
#22
你看你的数据格式差不多都一样,就第二列和第三列的数据可能影响格式,你自己大致估算一下这两列中最长的字符有多少,然后定一个标准比,不足的用空格补齐就好了