Каков наиболее приемлемый / используемый метод для вывода строки CSV из массива? - PullRequest
1 голос
/ 05 августа 2010

Стараясь не зависеть от языка и избегая встроенных методов, таких как 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 ]

3 голосов
/ 05 августа 2010

Большинство реализаций, которые я видел, делают что-то вроде:

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

Это позволяет избежать проверки внутри цикла for. Метод Join () .NET Framework использует этот базовый подход (конечно, с гораздо большей проверкой).

0 голосов
/ 06 августа 2010

Вы, вероятно, не хотите использовать 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...