Как заставить работать новую строку внутри c-строки, возвращаемой текстовым столбцом sqlite3? - PullRequest
1 голос
/ 01 июня 2011

Я хотел бы знать, как заставить работать управляющий символ новой строки внутри c-строки, возвращаемой sqlite3_column_text. Например, это текст, возвращаемый из запроса в базу данных sqlite:

"Lorem ipsum\ndolor sit amet,\nconsectetur\nadipiscing elit."

и вот код, который я использую для его получения:

char *body = (char *)sqlite3_column_text(statement, 1);
NSString *str = (body)?[NSString stringWithUTF8String:body]:@"";

Проблема возникает, когда я пытаюсь распечатать ее, потому что взамен это:

Lorem ipsum\ndolor sit amet,\nconsectetur\nadipiscing elit.

вместо:

Lorem ipsum
dolor sit amet,
consectetur
adipiscing elit.

Использование того же текста, но возвращенного из строкового столбца в Core Data, работает должным образом, но я не знаю, почему его нет в sqlite3. Я надеюсь, что кто-то может дать указания, потому что это очень расстраивает.

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Просматривая буквенные значения в документации по SQLite, я обнаружил, что причина, по которой он возвращает двухсимвольный \n вместо newline, заключается в том, что в стиле C выходит за пределыиспользование символа обратной косой черты не поддерживается, поскольку они не являются стандартными SQL .Поэтому я попробовал другой подход, используя NSString вместо использования SQLite напрямую:

char *body = (char *)sqlite3_column_text(statement, 1);
NSString *str = (body)?[NSString stringWithUTF8String:body]:@"";
NSString *container = [str stringByReplacingOccurrencesOfString:@"\\n"    
                                                     withString:@"\n"];

Благодаря this двум сообщениям, у меня появилась идея использовать \\n правильно заменить \n в последней строке NSString, поэтому можно использовать другие допустимые управляющие символы.

1 голос
/ 01 июня 2011

Проблема заключается в том, что значение, хранящееся в sqllite DB, является двухсимвольным \n, а не самим newline. Вам нужно будет либо преобразовать \n в символ новой строки (ASCII 10) перед добавлением строки в БД, либо обработать строку после запроса SELECT в вашем коде Objective-C.

См. Следующие ответы для получения дополнительной информации:

Проблема с символом перевода строки при программировании для iPhone

Предотвращение выхода sqlite из обратной косой черты

...