代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

如何使用C#正确对齐带选项卡的CSV数据文本文件?

  •  2
  • JL. Hans Passant  · 技术社区  · 14 年前

    我使用以下stringBuilder作为Log4net日志布局的一部分。

    var sb = new StringBuilder(DateTime.Now.ToString(DateFormatString, CultureInfo.InvariantCulture));
                sb.Append("\t");
                sb.Append(log.EventAction);
                sb.Append("\t");
                sb.Append(log.Id);
                sb.Append("\t");
                sb.Append(log.MessageId);
                sb.Append("\t");
                sb.Append(log.CodeBlock);
                sb.Append("\t");
                sb.Append(log.Details);
    

    列没有对齐,当我在msword中打开文本文件并“显示特殊字符”时,我看到相同的选项卡条目似乎存在,但在记事本中,列没有对齐。

    我真的很困惑,也许我需要回顾一下tab的定义,有没有人能提供这个问题的见解或解决方法?

    更新:

    我注意到,如果我有长度相同的字符串,那么列会对齐,例如:

    string1(len5) TAB string2(len5) TAB string3(len5)
    string1(len5) TAB string2(len5) TAB string3(len5)
    string1(len5) TAB string2(len5) TAB string3(len5)
    

    string1(len5) TAB string2(len5) TAB string3(len5)
    string1(len10) TAB     string2(len5) TAB string3(len5)
    string1(len5) TAB string2(len5) TAB string3(len5)
    string1(len10) TAB     string2(len5) TAB string3(len5)
    

    像这样的。。。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Marc Gravell    14 年前

    制表符只是一个逻辑分隔符。它没有魔法能力 要对齐的数据,这取决于查看器如何解释选项卡;它可能意味着“缩进4个字符”,也可能意味着“填充四舍五入到最接近的第8个字符”。因此,它通常非常依赖于现有的数据长度。在Word中,它通常被解释为“移动到下一个预定义的选项卡”,但这取决于a:Word中定义了哪些选项卡,以及b:数据已经有多宽(即“下一个”是什么)。

    那么,你用的是什么查看器?