【问题标题】:Issue in string formatting with c#使用 c# 进行字符串格式化的问题
【发布时间】:2013-07-10 03:52:44
【问题描述】:

具有 4 列 col1,col2,col3,col4 的数据表 DT。

str = String.Format("{0,-30}{0,-30}{0,-30}{0,-30}", "Col1", "Col2", "Col3", "Col4");

如果我们将 str 写入文件,它将生成输出

Col1                         Col2                         Col3                         Col4 

我需要以编程方式进行

string str = "";
Boolean fst = true;
string q = Convert.ToString('"');
string frmt = "";
foreach (DataColumn co in DT.Columns)
{

    if (fst)
    {
        colname = colname + q + co.ColumnName + q;
        fst = false;
    }
    else
    {
        colname = colname + "," + q + co.ColumnName + q;
    }

    frmt = frmt + "{0,-30}";
}
str = String.Format(frmt, colname);

这里的值为frmt="{0,-30}{0,-30}{0,-30}{0,-30}"; colname="Col1", "Col2", "Col3", "Col4";的值

但是如果我将 str 写入文件,它会给出错误的输出。关于如何实现它的任何指示?

【问题讨论】:

    标签: c# string format


    【解决方案1】:

    不确定我是否理解您的要求,但这可能是您需要的

    string frmt = "";
    int columnCount = 0;
    var values = new List<string>();
    foreach (DataColumn co in DT.Columns)
    {
        values.Add(co.ColumnName);
        frmt += string.Format("{0}{2}, -30{1}", "{", "}", columnCount);
        columnCount++;
    }
    string str = string.Format(frmt, values.ToArray());
    

    【讨论】:

    • 实际上,最后一行应该是:str = String.Format(frmt, values.ToArray());
    • @Curt,哎呀,谢谢,更新了,String.Join 允许 IEnumerable,我认为 String.Format 是一样的 :)
    • 存在一个根本问题,即格式字符串中的参数 ID 始终为零(即使在 OP 示例中也是如此),因此生成的字符串将只是第一个列名,重复次数与列数一样多:即,仅使用 FIRST 参数。
    • @sa_ddam213 谢谢,但它只使用 col1 的 aray 的第一个值
    • @Curt,是的,我真的不明白这种情况下的要求是什么,而且我远离 VisualStudio,所以我直接写在答案中,哈哈,只是想帮忙:)感谢您的输入
    【解决方案2】:

    嗯..你给的格式会产生:

    Col1          Col1         Col1          Col1
    

    此外,String.Format() 方法需要一个对象数组作为参数。你传递给它的是一个字符串,单词用逗号分隔。

    为什么不这样做:

    StringBuilder sb = new StringBuilder()
    
    foreach (DataColumn co in DT.Columns)
       sb.Append(String.Format("{0,-30}", co.ColumnName));
    
    return sb.ToString();
    

    【讨论】:

    • 请参见 msdn 中的示例 String header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3 ,14}","城市", "年份", "人口", "变化 (%)")
    • 我只是想以编程方式创建这个输入
    • 您的第二个参数只是一个字符串,而不是该示例中的 4 个单独的字符串。
    • @Mike Precup 如果我使用 messageBox 打印第二个参数,我可以将其视为 4 个单独的引号中的字符串,就像在示例中一样。
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2013-05-13
    • 1970-01-01
    • 2023-03-30
    • 2012-05-31
    • 2020-06-11
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多