Language agnostic 从数组中输出CSV字符串最被接受/使用的方法是什么?

Language agnostic 从数组中输出CSV字符串最被接受/使用的方法是什么?,language-agnostic,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

试图保持完全的语言不可知性,避免使用诸如Split()和Join()之类的内置方法,构建CSV字符串最常用或被接受的方法是什么?我经常遇到这样的情况,我很好奇像Split()这样的方法是如何实现的?我通常会这样做:

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

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

我看到的大多数实现更像:

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

这避免了for循环内部的检查。.NET Framework的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))
}
字符串转义forcsv(字符串s){
如果s.包含(“\”,\n”){
需要加引号=真
s、 替换(“\”,“\”\”)
}
如果需要报价{
s=“\”“+s+”\“”
}
返回s
}
对于(i:=0;i0{
写入(',')
}
写(escapeForCsv(elt))
}

为什么要问?你反对分裂和加入?在大多数现代语言中都可以使用这种方式。不反对拆分和联接,我一直在使用它们。我只是好奇它们通常是如何实现的。这让我想起了大学一年级我不得不做这种事情的时候,这似乎是一个老师可能会问的有点普通的问题,但我从来都不知道“官方”的方法。这正是我想要的,谢谢!