从数组中输出CSV字符串最常用/最常用的方法是什么?

时间:2010-08-05 19:27:06

标签: language-agnostic

尝试保持完全与语言无关,并避免使用Split()和Join()等内置方法,构建CSV字符串的最常用或最常用的方法是什么?我经常遇到这样的情况,我很好奇Split()这样的方法是如何实现的呢?我通常做这样的事情:

for(int i = 0; i < list.length; i++)
{
    if(i == list.length - 1)
    {
        Write(list[i]);
    }
    else
    {
        Write(list[i] + ',');
    }
}

但似乎应该有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:3)

我见过的大多数实现更像是:

if (list.length > 0)
{
    Write(list[0]);
    for(int i = 1; i < list.length; i++)
    {
        Write(','); // Write separator character(s)
        Write(list[i]);
    }
}

这可以避免在for循环中进行检查。 .NET Framework的Join()方法使用这种基本方法(当然还有更多检查)。

答案 1 :(得分:0)

您可能不想使用Split,Join或任何简单的东西。如果您的值包含逗号或引号怎么办?

如果可能,请使用库。否则,如:

string escapeForCsv(string s) {
    if s.contains("\",\n") {
      needs_quotes = true
      s.replace("\"", "\"\"")
    }
    if needs_quotes {
      s = "\"" + s + "\""
    }
    return s
}

for (i := 0; i < array.length; i++) {
    elt = array[i]
    if i > 0 {
       Write(',')
    }
    Write(escapeForCsv(elt))
}