首页 新闻 会员 周边

StreamWriter 写入 WriteLine对齐的问题?

0
悬赏园豆:10 [已解决问题] 解决于 2009-09-17 09:48

用的是C# Winform 开发的:

用StreamWriter写入txt文件中 后面的单价对不起,输出来的格式如下,请问,如何才能对齐单价呢

 在程序中加了很多空格也是不行,有没有什么方法格式化让单价这一列对齐?

数量   物品                                            单价(¥)
----------------------------------------------------------------
    1  C#数据大全                                       26.5
    1  数据结构                                       36.8
    1  台式电脑                                       4000.15
    1  联想笔记本                                       3500.58
--------------------------------------------------------------- 

其中 程序如下

    for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                string name = dataGridView1.Rows[i].Cells["ProName"].Value.ToString();
                string num = dataGridView1.Rows[i].Cells["ProNum"].Value.ToString();
                string price = dataGridView1.Rows[i].Cells["ProPrice"].Value.ToString();
                sw.WriteLine("    " + num + "  " + name +  "               

ggbbeyou的主页 ggbbeyou | 初学一级 | 园豆:54
提问于:2009-09-17 00:07
< >
分享
最佳答案
0

因为物品列的长度不同,所以后面才会产生错位现象的。

你需要设置一个标准值,例如30,其意义为:如果物品列字符为0时,将插入30个半角空格以作分隔

然后计算一下物品列字符串实际占位长度,因为汉字是全角字符,会占据两个英文字母、数字所占的位置,这与他们的字节数占用比例是相同的,所以可以通过计算字节数的方法来计算它实际的占位长度,可以通过这个方法来计算:

Encoding.Default.GetBytes(字符串).Length

比如 Encoding.Default.GetBytes("测试abc").Length 的结果就是7

然后再使用标准值减去这个计算得出的值,就是你需要插入的半角空格数了,这样就能保证单价列对齐。

 

另外,列是否能够对齐,还会受到字体影响,在某些非等宽字体中,各个字母所占据的宽度是不同的,那样你基本无法很好地控制对齐。

比如使用Thoma字体:

收获园豆:9
斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-09-17 02:54
其他回答(2)
0

一定是你数据取出来的数据,二个列里面带有空格字符,导致不整齐,在后面加上.Trim()

 

 for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                string name = dataGridView1.Rows[i].Cells["ProName"].Value.ToString().Trim();
                string num = dataGridView1.Rows[i].Cells["ProNum"].Value.ToString().Trim();
                string price = dataGridView1.Rows[i].Cells["ProPrice"].Value.ToString().Trim();
                sw.WriteLine("    " + num + "  " + name +  "   "+ price)

}

这样就可以了

收获园豆:1
风浪 | 园豆:2996 (老鸟四级) | 2009-09-17 09:27
很感谢 斯克迪亚 根据你提供的思路,可以对齐了, 设定一个固定的长度,再计算输出的变量的长度,根据相差的结果增加空格 程序中取出数据的时候,已经用trim了,贴出来的代码没有带trim 也感谢FengLang
支持(0) 反对(0) ggbbeyou | 园豆:54 (初学一级) | 2009-09-17 09:51
0

正愁找不到解决方法呢,谢谢 斯克迪亚 的解答,终于知道怎么写了

阿斐 | 园豆:202 (菜鸟二级) | 2012-04-10 15:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册