Каков наилучший способ записи части буфера с цитированием? - PullRequest
0 голосов
/ 19 августа 2011

Например, у меня есть некоторый буфер: const char* buf со следующим содержимым (пакет mysql):

72 00 00 00 select * from `db` where (`name` = "Bill's car")

, и мне нужно написать запрос в ostream only с кавычками.Итак, результат должен быть следующим:

select * from `db` where (`name` = \"Bill\'s car\")

Я знаю, что << quote << сделает кавычки и ostream.write(buf,len) напишет нужную мне часть.

Но какое лучшее решение для обоих?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Что-то вроде этого должно быть сделано:

std::copy(buffer + index_of_start_of_sql, buffer + index_of_end_of_sql, std::ostream_iterator<char>(std::cout, ""));

Это копирует содержимое буфера символ за символом в выходной поток (в данном случае std::cout).Тогда вам не нужно беспокоиться об обработке кавычек.

Единственное, что вам нужно, чтобы убедиться в правильности, это два индекса (начало и конец фрагмента sql).

ПРИМЕЧАНИЕ: этораспечатает то, что находится в буфере, но не будет экранировать кавычки.Если вам нужно избежать кавычек, то вам нужно будет использовать другой подход.например, используйте for_each и пользовательский функтор, чтобы проверить, является ли символ ' или " и экранировать при необходимости ...

0 голосов
/ 19 августа 2011

Я думаю, это был бы прекрасный пример использования регулярного выражения.

...