none
如何格式化对齐输出 RRS feed

  • 问题

  • 如何格式化对齐输出

    比如原文如下

    123,1234,123456

    56789,asdfghjk,msdn

    输出以后应该是

    123      1234        123456

    56789   asdfghjk   msdn

    writeline左对齐,右对齐,等方式都试过了不行,这应该是从指定位置输出吧,请高手指点一下

    2010年7月8日 3:52

答案

  • 直接输出到屏幕确实没有问题,但是写入文件就出问题了

    打开文件就是notepad,我的字符都是数字,编码都是默认的

    问题应该在于“ 67”下面这个“2”,只要出了一个单字符,就不能再对齐了

          47          67      0x43
          47          2      0x02


    你将记事本的字体改为Courier New
    http://feiyun0112.cnblogs.com/
    • 已标记为答案 abnerle 2010年7月16日 6:50
    2010年7月14日 6:29
    版主

全部回复

  • String.Format("{0,10}{1,10}{2,10}", "123","1234","123456")

    http://feiyun0112.cnblogs.com/
    2010年7月8日 6:24
    版主
  •   还是不行这只是右对齐而已,一样的不整齐啦

            47        67      0x43
            47        67      0x43
            46        67      0x43
            47        67      0x43
            47         2      0x02
            47         2      0x02
            62         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            47         2      0x02
            63         2      0x02
            47         2      0x02
            62         2      0x02
            47         2      0x02
            47         2      0x02
            47         3      0x03
            47        73      0x49
            47        67      0x43
            47        67      0x43
            63        73      0x49
            63         8      0x08

    2010年7月9日 7:57
  • 你好!

         我没有看出你的这个样式的对齐规律是:

    123      1234        123456

    56789   asdfghjk   msdn

         请进一步说明你的要求啊?


    周雪峰
    2010年7月10日 6:36
    版主
  • 就是说不论每个字符串长度是多少,输出以后他们的左端都应该是对齐的

    123   4567dfg   7890fg

    1      123          6ffgdgfdgfdhg

     

    应该这样不论字符串多长,左端都是对齐的,但是普通方式的左对齐{0,-10},这种是不行的,我试过了

    2010年7月11日 1:10
  • 你好!

         普通的左对齐是可以的,你没有对齐可能是宽度设置问题,你把宽度设置的大一点。

         另外,你全要求左对其的话,如果其中某个字符串很长,就会出现大量的空格。


    周雪峰
    2010年7月11日 2:11
    版主
  • 我的字符串最大宽度是6,我设成了10,但是输出也没有对齐,我想这应该是指定位置输出吧,相当于都从第10个位置开始输出,这样应该就是整齐的,字符串不是上面的示例,而是这些4位以下的16进制数字 47        67      0x43
    • 已编辑 abnerle 2010年7月12日 3:10 叙述不详细
    2010年7月12日 3:07
  • 你好!

         左对齐没有任何问题的,我用你的数据做了测试了:

                Console.WriteLine("{0,-10}{1,-10}{2,-10}","47","67","0x43");
                Console.WriteLine("{0,-10}{1,-10}{2,-10}", "47", "2", "0x02");
                Console.WriteLine("{0,-10}{1,-10}{2,-10}", "47", "73", "0x49");
                Console.WriteLine("{0,-10}{1,-10}{2,-10}", "63", "8", "0x08");

         你的数据无法对其的原因,很可能是你的那些数据中有“空格”,然后给你造成了没有对齐的假象,你检查一下看看。


    周雪峰
    2010年7月12日 6:15
    版主
  • 我是WriteLine()到一个文件里去了,在屏幕上显示出来确实是对齐的,但是写到文件之后,就不是对齐的
    2010年7月12日 10:48
  • 那你检查一下写入文件的代码,另外你使用String.Format("{0,-10}{1,-10}{2,-10}", "123","1234","123456")这个方法先把字符串格式化,然后再把字符串写入文件。

    具体你用的哪个类的WriteLine,写入什么文件,最好提供一下源代码。


    周雪峰
    2010年7月12日 10:57
    版主
  • 源代码如下:

    写的是txt文本文件,realdelay, No(cunt1), IrCode(cunt1),几个变量的最大长度是6

    autofileWriter = New StreamWriter(autofilepath) ‘保存文件路径

    realdelay = delaytime.ToString  ‘realdelay是时间的秒和毫秒转换成的字符串,长度小于6

    No(cunt1)         ’字符串数组,就是数字序号,最大255

    IrCode(cunt1)   ’字符串数组,十六进制数,最大255

    For cunt1 As Integer = 0 To maxline Step 1

    utofileWriter.WriteLine(String.Format("{0,-10}{1,-10}{2,-10}", realdelay, No(cunt1), IrCode(cunt1)))

    next

    2010年7月12日 11:26
  • 你好!

         写入文件也是没有问题的,我做了如下测试,可以左对齐:

                StreamWriter sw = new StreamWriter(@"D:\a.txt");
                sw.WriteLine(String.Format("{0,-10}{1,-10}{2,-10}", "47", "67", "0x43"));
                sw.WriteLine(String.Format("{0,-10}{1,-10}{2,-10}", "47", "2", "0x02"));
                sw.WriteLine(String.Format("{0,-10}{1,-10}{2,-10}", "47", "73", "0x49"));
                sw.WriteLine(String.Format("{0,-10}{1,-10}{2,-10}", "63", "8", "0x08"));

        我是直接硬编码的测试数据,没有任何问题,所以我还是怀疑你的变量的值,你可以打断点看看那些值,或是直接把那些值输出,看看是否和你期望的一样。



    周雪峰
    2010年7月12日 13:43
    版主
  • 我是WriteLine()到一个文件里去了,在屏幕上显示出来确实是对齐的,但是写到文件之后,就不是对齐的
    你用什么打开的文件,和显示字体有关系,每个字符不是一样宽度
    http://feiyun0112.cnblogs.com/
    2010年7月13日 3:31
    版主
  • 直接输出到屏幕确实没有问题,但是写入文件就出问题了

    打开文件就是notepad,我的字符都是数字,编码都是默认的

    问题应该在于“ 67”下面这个“2”,只要出了一个单字符,就不能再对齐了

          47          67      0x43
          47          2      0x02

    2010年7月13日 5:01
  • 我上面做了测试了,写入文件也没有问题啊,是可以左对齐的。
    周雪峰
    2010年7月13日 11:17
    版主
  • 直接输出到屏幕确实没有问题,但是写入文件就出问题了

    打开文件就是notepad,我的字符都是数字,编码都是默认的

    问题应该在于“ 67”下面这个“2”,只要出了一个单字符,就不能再对齐了

          47          67      0x43
          47          2      0x02


    你将记事本的字体改为Courier New
    http://feiyun0112.cnblogs.com/
    • 已标记为答案 abnerle 2010年7月16日 6:50
    2010年7月14日 6:29
    版主
  • 谢谢了

    不过这个问题真的很奇怪

    下面这2种字体也是可以对齐的

    Consolas
    Courier

    • 已编辑 abnerle 2010年7月16日 6:52 写错字了
    2010年7月16日 6:52