Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350

Из переменной типа std::string записать в файл большое количество данных (2 Mb)

19.02.2016, 18:25. Показов 1005. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно записать в файл большое количество данных. Предполагается, что в переменной большое количество строк следовательно `>>` не подойдет(если только не в цикле). как это сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2016, 18:25
Ответы с готовыми решениями:

Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
Знаю как записывать объекты в файл в бинарном виде, но как быть, когда у них динамические поля? Какой метод использовать? Можете привести...

Не выходит вернуть и записать в файл значение переменной типа string
Здравствуйте. Не вижу где ошибка в программе, много уже что перепробовал, но, увы, одно и тоже. Программа записывает ровно ничего. Буду...

Присвоение переменной типа std::string значение bool
Объясните, почему компилируется такой код: std::string str; str = true; а такой нет:

13
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
19.02.2016, 18:39
Цитата Сообщение от Nik- Посмотреть сообщение
записать в файл
Записать в файл откуда?

Цитата Сообщение от Nik- Посмотреть сообщение
большое количество данных
Насколько большое?
0
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 19:05  [ТС]
Из string. Возможно больше 2 мб, но обычно <= 1мб.
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
19.02.2016, 19:58
Nik-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string outString = "qwerasd asd asf sa ffsd f\n"
            "ssadf sdf sadf sa fsdf sdf sddf \n"
            "s fsadf sad fsad fsd fasdf sdf \n";
    std::ofstream outFile("file");
 
    std::copy(std::begin(outString), std::end(outString),
            std::ostreambuf_iterator<char>(outFile));
    return 0;
}
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 20:44  [ТС]
Пишет, что данные ф-ции не найдены. Я изменил на
C++
1
2
std::copy(outString.begin(), outString.end(),
            std::ostreambuf_iterator<char>(outFile));
, и теперь в файле ничего не остается, просто становится пустым.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
19.02.2016, 20:47
Nik-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::string outString = "qwerasd asd asf sa ffsd f\n"
            "ssadf sdf sadf sa fsdf sdf sddf \n"
            "s fsadf sad fsad fsd fasdf sdf \n";
    std::ofstream outFile("file");
 
    std::copy(outString.begin(),outString.end(),
            std::ostream_iterator<char>(outFile));
    return 0;
}
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 20:51  [ТС]
Ой, это ошибка в коде. Получилось, спасибо.

Добавлено через 2 минуты
Но он все же обрезает строку, а теперь вообще все, крому одного символа. ВОт мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ifstream f(pathToFile);
 
    string data1;
    while(!f.eof())
        getline(f , data1);
 
    f.close();
    ofstream review1(pathToFile, ofstream::trunc);
    Form1->ADOQuery1->First();
    for(int i = 0; i<strNumber; i++)
    {
        Form1->ADOQuery1->Next();
    }
 
    data1.erase(virPlace, virLenght);
 
    copy(data1.begin(), data1.end(), ostreambuf_iterator<char>(review1));
    review1.close();
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
19.02.2016, 20:52
Цитата Сообщение от Nik- Посмотреть сообщение
C++
1
copy(data1.begin(), data1.end(), ostreambuf_iterator<char>(review1));
C++
1
copy(data1.begin(), data1.end(), ostream_iterator<char>(review1));
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 20:55  [ТС]
Нет, все так же обрезает.
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
19.02.2016, 21:02
makfak,
ostreambuf_iterator - неформатированный вывод.
ostream_iterator - форматированный.
Для вывода строки как есть, лучше использовать первый вариант.

Nik-, Смотрите ваш код в дебагере, в вашей логике ошибка, по приведённому коду я ничего не понимаю.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
19.02.2016, 21:03
Цитата Сообщение от Nik- Посмотреть сообщение
C++
1
2
3
string data1;
* * while(!f.eof())
* * * * getline(f , data1);
После этого цикла в строке data1 остаётся последняя строка файла.

Добавлено через 34 секунды
Nosey, Да? Ну ладно.
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 23:17  [ТС]
Не понимаю, что не понятного. Этот код немного для определенной цело, но кратко так: записываем ИЗ файла в string, удаляем нужный кусок из этой переменной и записываем обратно измененные данный а файл, предварительно очистив его.

Добавлено через 22 минуты
Я понял, что в string не записывается текст построчно, только одна строка пишется. Как записывать полностью текст, именно в string ?
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
19.02.2016, 23:20
Цитата Сообщение от Nik- Посмотреть сообщение
Я понял, что в string не записывается текст построчно, только одна строка пишется. Как записывать полностью текст, именно в string ?
Почти также как и записываете
C++
1
2
3
4
    std::ifstream inFile("file");
    std::istreambuf_iterator<char> inFileBegin(inFile);
    std::istreambuf_iterator<char> inFileEnd;
    std::string outString(inFileBegin, inFileEnd);
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
19.02.2016, 23:31  [ТС]
А как обратно в файл записать ?

Добавлено через 3 минуты
А все, спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.02.2016, 23:31
Помогаю со студенческими работами здесь

Присваивание целочисленного значения переменной типа std::string
имеется вот такой синтаксис: int tmp=0; std::string a=tmp++; if(max&gt;var) cout&lt;&lt;a&lt;&lt;edl; тут в строку string добавляются...

Поменять значение по указанному адресу в переменной типа std::string
Здравствуйте форумчане. Не получается никак правильно использовать средства С++. Задача такова: Например есть две строки типа...

Как текст из заданного файла присвоить переменной типа std::string?
Здравствуйте, у меня есть файл с текстом, нужно этот текст присвоить переменной string, как это сделать? самый простой вариант желательно

Операция std::cout для Объекта типа std::string
Кто детально объяснит почему не выводит ? Дает вот так &quot;Отсутствует оператор &quot;&lt;&lt;&quot;, соответствующий этим операндам&quot; ...

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //using namespace std; class string { private: int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru