Общее решение - использовать stringWithFormat:
для форматирования каждой строки. Предположительно, вы записываете это в файл или сокет, и в этом случае вы записываете представление данных каждой строки (см. dataUsingEncoding:
) в дескриптор файла при его создании.
Если вы форматируете много строк, вы можете использовать initWithFormat:
и явные release
сообщения, чтобы избежать нехватки памяти из-за накопления слишком большого количества строковых объектов в пуле автоматического выпуска.
И всегда, всегда, всегда не забывайте корректно экранировать значения перед передачей их в метод форматирования.
Экранирование (вместе с эскейпингом) - это действительно хорошая вещь для написания юнит-тестов. Напишите функцию для CSV-форматирования одной строки и получите контрольные примеры, которые сравнивают ее результат с правильным выводом. Если у вас под рукой есть синтаксический анализатор CSV, или он вам понадобится, или вы просто хотите быть уверены, что ваше экранирование правильное, напишите модульные тесты для синтаксического анализа и эскапинга, а также экранирования и форматирования.
Если вы можете начать с одной записи, содержащей любую комбинацию CSV-специальных и / или SQL-специальных символов, отформатируйте ее, проанализируйте отформатированную строку и в итоге получите запись, равную той, с которой вы начали, вы знаете, ваш код хороший.
(Все вышеперечисленное в равной степени относится и к CSV, и к HTML. Если возможно, вы можете рассмотреть возможность использования XHTML, чтобы можно было использовать инструменты проверки XML и анализаторы, включая NSXMLParser.)