Форум программистов, компьютерный форум CyberForum.ru

Cохранение очень большого массива в текстовый файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию, которая сортирует переданный ей динамический массив "быстрой" сортировкой http://www.cyberforum.ru/cpp-beginners/thread1244219.html
#include <iostream> #include <vector> using namespace std; void qSort( vector <int> &A,int nStart, int nEnd) { int L,R,c,X; if (nStart>=nEnd) return; L=nStart; R=nEnd; X=A; while (L<=R)
C++ Как вывести фигуру в окне? Всем доброго дня. Я знаком с C++ довольно поверхностно, но на уровне консольного приложения знаю, возможно, все. Начал изучать DirectX по книгам Горнакова С.Г., для пущего реализма поставил VC++6.0 и DX9 под WinXP - все, как у него. И все же постоянно приходится адаптировать код, чтобы избавиться от ошибок. До сего момента справлялся, однако теперь в тупике. Следующий код... http://www.cyberforum.ru/cpp-beginners/thread1244215.html
Класс "Множество" и операции над ним C++
Не хватает опыта понять ошибку Здравствуйте! Никак не получается тот же результат хотя проверял несколько раз вот само задание: #include <iostream> using namespace std; const int MaxSize = 100; class Set{ int len; char members; int find(char ch);
Определить, какие вершины достижимы из заданной вершины S C++
Подскажите алгоритм для этой задачи, пожалуйста. Достижимые вершины Имя входного файла: graph.in Имя выходного файла: graph.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта Задан неориентированный граф, нужно определить, какие вершины достижимы
C++ Как правильно очищать вектор указателей http://www.cyberforum.ru/cpp-beginners/thread1244154.html
Привет Всем! Есть вопрос по вектору указателей, как правильно очищать память при таком случае очищение происходит существенно медленнее чем инициализация, но память очищается: #include <vector> void creat(std::vector<int*> &p) { for (int i(0); i<5000000; i++) {
C++ Защита 2д онлайн игры от взломов Здравствуйте, вообщем, я пытаюсь написать 2д рпг онлайн игру, которую в будущем хотелось бы переделать под андроид и выпустить в маркет, но речь не об этом. На данный момент игра реализована как обычная 2д рпг. Позже переделаю её под клиент, который будет общаться с сервером и все необходимые данные будут заноситься сервером в БД. Больше всего беспокоюсь по поводу защиты. В принципе, уже... подробнее

Показать сообщение отдельно
Vaiz
 Аватар для Vaiz
103 / 97 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
18.08.2014, 21:45     Cохранение очень большого массива в текстовый файл
Цитата Сообщение от AlexVRud Посмотреть сообщение
Сохранение больших массивов чисел в текстовый файл - плохая идея, особенно если это float/double. Мало того, что требуется много времени на преобразование числа в строку и обратно, так ещё тебе никто не гарантирует, что ты получишь тоже число. Для таких задач есть тот же BSON
Добавлено через 3 минуты
З.Ы.: Нашёл в загашниках ссылочку http://leopard.in.ua/2013/10/13/bina...ation-formats/
А как организовывать логику: самостоятельно все прописывать или уже есть готовые библиотеки?

Добавлено через 6 минут
C++
1
2
3
file = fopen(fileName.data(), "w");
fwrite((void*)&Region.blocks[i][j][k], sizeof(int), 1, file);
fclose(file);
fwrite как раз вроде записывает в бинарном виде. Ну и фрагмент выше наверное был бы правильнее в таком виде без цикла по k.
C++
1
2
3
file = fopen(fileName.data(), "w");
fwrite((void*)Region.blocks[i][j], sizeof(int), 5, file);
fclose(file);
Добавлено через 4 минуты
И чуть не забыл, открывайте файл один раз до начала всех циклов, а то мне кажется у вас он каждый раз заново создается и все прошлое содержимое стирается. Или уж открывайте в режиме "a", а не "w"

Добавлено через 9 минут
А вообще наверное вы хотели что-то вроде такого.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SaveRegion(cRegion& Region, int x, int y)
{
    char xPos[3];
    char yPos[3];
    wsprintf(xPos, "%d", x);
    wsprintf(yPos, "%d", y);
    string fileName;
    fileName.append(xPos); fileName.append("_"); fileName.append(yPos); fileName.append(".txt");    
    FILE* file;
    file = fopen(fileName.data(), "w");
    for(int i = 0; i < 50; i++)
    {
        for(int j = 0; j < 50; j++)
        {
              for(int k = 0; k < 5; k++)
              {
                    fprintf(file, "%d ",Region.blocks[i][j][k]);
              }
              fprintf(file, "\n");
        }
    }
    fclose(file);
}
 
Текущее время: 09:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru