Страница 1 из 2

Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 10:36
paolo64
Добрый день!

Опять проблема с потоковым выводом...

Код: Выделить всё

res = stmt->executeQuery("SELECT id, label FROM test ORDER BY id ASC");
while (res->next()) {
// You can use either numeric offsets...
cout << "id = " << res->getInt(1); // getInt(1) returns the first column
// ... or column names for accessing results.
// The latter is recommended.
cout << ", label = '" << res->getString("label"); << "'" << endl;
}
Как можно превратить res->getString("label"); в обычную строку char??

С уважением,
Павел.

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 10:46
Romeo
ResultSet::getString возвращает std::string, а для этого типа оператор вывода в поток перегружен, так что всё должно работать без каких-либо дополнительных ухищрений.

Подозреваю, что ошибка компиляции, на самом деле, возникает из-за лишней точки с запятой, поставленной после res->getString("label").

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 10:53
paolo64
Romeo писал(а):ResultSet::getString возвращает std::string, а для этого типа оператор вывода в поток перегружен, так что всё должно работать без каких-либо дополнительных ухищрений.

Подозреваю, что ошибка компиляции, на самом деле, возникает из-за лишней точки с запятой, поставленной после res->getString("label").

Да этот пример компилируется нормально.
Мне нужно только превратить res->getString("label") в строку дальнейшей обработки. Я честно говоря никогда не работал с потоками... :(

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:03
Romeo
Так а при чём тут потоки? Поток - это std::cout. Как раз для того, чтобы вывести в него std::string никаких знаний по потокам не требуется, так как всё уже реализовано. Результат, возвращаемый ResultSet::getString имеет тип std::string и это всего лишь удобная обёртка для строки, не имеющая никакой связи с потоками.

Какая именно дальнейшая обработка подразумевается с возвращённой строкой и в какую "другую" строку имеется желание превратить std::string? В обычную C-шную? А зачем? Методы класса std::string практически полностью покрывают весь набор функций для работы с обычными С-строками. Почему не воспользоваться методами класса?

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:11
paolo64
Romeo писал(а):Так а при чём тут потоки? Поток - это std::cout. Как раз для того, чтобы вывести в него std::string никаких знаний по потокам не требуется, так как всё уже реализовано. Результат, возвращаемый ResultSet::getString имеет тип std::string и это всего лишь удобная обёртка для строки, не имеющая никакой связи с потоками.

Какая именно дальнейшая обработка подразумевается с возвращённой строкой и в какую "другую" строку имеется желание превратить std::string? В обычную C-шную? А зачем? Методы класса std::string практически полностью покрывают весь набор функций для работы с обычными С-строками. Почему не воспользоваться методами класса?

Я всю жизнь работал только с обычные с-шными строками. Мне уже очень много лет (52), перестраиваться...

"Так какую кнопку мне нажимать" (Кин Дза-Дза).

С уважением,
Павел.

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:16
paolo64
"Так какую кнопку мне нажимать?" (Кин Дза-Дза)

Я всю жизнь работал с обычными С-шными строками....
Подскажите как изменить программу, что бы результат res->getString("label"); превратился в обычную С-шную строку.

С уважением,
Павел.

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:21
paolo64
Дело в том, что я переделываю уже написанную программу под новый интерфейс вывода данных MySQL. А переделывать всю обработку во всех текстах.... Это жжжуть....
Вот.

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:23
Romeo
Если вам очень хочется в С-шную строку преобразовать, то можно сделать так:

Код: Выделить всё

char str[256];
strncpy(str, ret->getString("label").c_str(), 256);
Но я всё же настоятельно рекомендую не выполнять никаких преобразований и работать с std::string дальше. Это более правильно и с точки зрения производительности приложения (отказываемся от лишнего копирования), и с точки зрения удобства. Если вы расскажете, какая именно обработка строки предполагается, я подскажу какие методы вызвать - в этом действительно нет ничего сложного. А на счёт перестраиваться вы не правы, как мне кажется. Глоток нового полезен в любом возрасте :)

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:25
Romeo
paolo64 писал(а):Дело в том, что я переделываю уже написанную программу под новый интерфейс вывода данных MySQL. А переделывать всю обработку во всех текстах.... Это жжжуть....
Вот.
Тогда вы правы. Нужно делать преобразование.

Re: Как превратить потоковый вывод в строку?

Добавлено: 23 сен 2015, 11:30
paolo64
Romeo писал(а):Тогда вы правы. Нужно делать преобразование.

Аааа!!!! Заработало....!!!!

Спасибо Вам большое!!!!

С искренним уважением,
Павел.