Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
#1

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

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

Нужно записать в файл большое количество данных. Предполагается, что в переменной большое количество строк следовательно `>>` не подойдет(если только не в цикле). как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2016, 18:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из переменной типа std::string записать в файл большое количество данных (2 Mb) (C++):

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

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

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

Операция std::cout для Объекта типа std::string - C++
Кто детально объяснит почему не выводит ? Дает вот так "Отсутствует оператор "<<", соответствующий этим операндам" void...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri - C++
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

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

13
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
19.02.2016, 18:39 #2
Цитата Сообщение от Nik- Посмотреть сообщение
записать в файл
Записать в файл откуда?

Цитата Сообщение от Nik- Посмотреть сообщение
большое количество данных
Насколько большое?
0
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
19.02.2016, 19:05  [ТС] #3
Из string. Возможно больше 2 мб, но обычно <= 1мб.
0
Nosey
1349 / 400 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
19.02.2016, 19:58 #4
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
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
19.02.2016, 20:44  [ТС] #5
Пишет, что данные ф-ции не найдены. Я изменил на
C++
1
2
std::copy(outString.begin(), outString.end(),
            std::ostreambuf_iterator<char>(outFile));
, и теперь в файле ничего не остается, просто становится пустым.
0
GbaLog-
Любитель чаепитий
3074 / 1413 / 341
Регистрация: 24.08.2014
Сообщений: 5,015
Записей в блоге: 1
Завершенные тесты: 2
19.02.2016, 20:47 #6
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
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
19.02.2016, 20:51  [ТС] #7
Ой, это ошибка в коде. Получилось, спасибо.

Добавлено через 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-
Любитель чаепитий
3074 / 1413 / 341
Регистрация: 24.08.2014
Сообщений: 5,015
Записей в блоге: 1
Завершенные тесты: 2
19.02.2016, 20:52 #8
Цитата Сообщение от Nik- Посмотреть сообщение
C++
1
copy(data1.begin(), data1.end(), ostreambuf_iterator<char>(review1));
C++
1
copy(data1.begin(), data1.end(), ostream_iterator<char>(review1));
1
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
19.02.2016, 20:55  [ТС] #9
Нет, все так же обрезает.
0
Nosey
1349 / 400 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
19.02.2016, 21:02 #10
makfak,
ostreambuf_iterator - неформатированный вывод.
ostream_iterator - форматированный.
Для вывода строки как есть, лучше использовать первый вариант.

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

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

Добавлено через 22 минуты
Я понял, что в string не записывается текст построчно, только одна строка пишется. Как записывать полностью текст, именно в string ?
0
Nosey
1349 / 400 / 107
Регистрация: 22.10.2014
Сообщений: 863
Завершенные тесты: 2
19.02.2016, 23:20 #13
Цитата Сообщение от 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
Nik-
20 / 20 / 9
Регистрация: 12.07.2015
Сообщений: 339
19.02.2016, 23:31  [ТС] #14
А как обратно в файл записать ?

Добавлено через 3 минуты
А все, спасибо большое
0
19.02.2016, 23:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2016, 23:31
Привет! Вот еще темы с ответами:

Как скопировать строку типа std::string в другую строку такого же типа? - C++
Хотел скопировать строку #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int _tmain(int...

Инициализировать массив строк типа std::string - C++
Есть массив из строк, надо присвоить ему значения. Возникла странная проблема. Вот код: string StrName; i = 1; while ( i...

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Объявить в заголовочном файле переменную типа std::string - C++
Почему я не могу в хедер файле объявит переменную стринг если писать std::string s=&quot;1111&quot;; &quot;лог ошибок будет писать что std...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.