Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
1

Запись больших массивов информации в текстовый файл

28.05.2016, 16:02. Показов 761. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужно записывать большие массивы информации в текстовый файл.

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

в main() открываю файл
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
ofstream filestr; //создали объект класса
 
   filestr.open ("test.txt", ios_base::trunc| ios_base::app  ); //связываем объект с файлом, открываем файл для записи в конец файл, маркер ::app
 
     if(filestr == NULL)
         {
             cout << "error! didn't open the file!"<<endl;
             return -1;
         }
     else cout<<"The file has been opened!"<<endl;

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void compute_u() // вычисляем u[ ][ ][ ] на всей решётке
{
ofstream filestr("test.txt",ios::app); //маркер ::app - для записи в конец файла
    for (int x = 1; x <= Nx; x++){
       for (int y = 1; y <= Ny; y++){
           for (int d = 0; d < 2; d++){
                u[x][y][d] = 0;
                for (int i = 1; i < Nc; i++){
                 u[x][y][d] += n[x][y][i] * c[i][d];
                 u[x][y][d] /= rho;}
            }
        }
 
       //запись в файл
       filestr<<setprecision(5)<<u[x][Ny][0]<<setprecision(5)<<setw(15)<<u[x][Ny-5][0]
       <<setprecision(5)<<setw(15)<<u[x][Ny-10][0]<<setprecision(5)<<setw(15)<<u[x][Ny/2][0]
       <<setprecision(5) <<setw(15)<<u[x][10][0]<<setprecision(5)<<setw(15)<<u[x][5][0]
       <<setprecision(5)<<setw(15)<<u[x][1][0]<<endl;
    }
}
И хочу, чтобы в цикле перед тем, как отрабатывала функция compute_u(), которая записывает данные в файл, печаталась строка, возвещающая о начале нового цикла записи.
Для этого в Main() пишу:
C++ (Qt)
1
2
3
4
5
6
7
8
9
for(int stepTime=1;stepTime<50;++stepTime){
          filestr<<endl<<"stepTime= "<<stepTime<<endl<<endl;
          filestr<<setprecision(5)<<"u[x][Ny][0]"<<setprecision(5)<<setw(15)<<"u[x][Ny-5][0]"
          <<setprecision(5)<<setw(15)<<"u[x][Ny-10][0]"<<setprecision(5)<<setw(15)<<"u[x][Ny/2][0]"
          <<setprecision(5) <<setw(15)<<"u[x][10][0]"<<setprecision(5)<<setw(15)<<"u[x][5][0]"
          <<setprecision(5)<<setw(15)<<"u[x][1][0]"<<endl<<endl;
 
    takeStep();  // шаг по времени с графическим выводом профиля течения
    }
хочу, чтобы в файл записывалось так
stepTime= 1

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]

******** данные из функции compute_u*********************

stepTime= 2

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]
******** данные из функции compute_u*********************

stepTime= 3

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]
******** данные из функции compute_u*********************

и т.д.

Вместо этого, почему то печатается так:
stepTime= 1

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]


stepTime= 2

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]


stepTime= 3

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]


stepTime= 4

u[x][Ny][0] u[x][Ny-5][0] u[x][Ny-10][0] u[x][Ny/2][0] u[x][10][0] u[x][5][0] u[x][1][0]

и т.д.

и лишь потом записывается то, что считается в compute_u...

Почему так ? и как это исправить?
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2016, 16:02
Ответы с готовыми решениями:

Запись в текстовый файл информации о студентах, поиск информации, сортировка
Здравствуйте помогите пожалуйста:( 3.1 Для записи в текстовый файл информации о студентах Вашей...

Запись информации в текстовый файл
программа, которая позволит записывать в текстовый файл информацию (марка, модель, год выпуска)....

Запись в текстовый файл информации
Здравствуйте! Подскажите, пожалуйста, как можно записывать информацию в текстовый файл,...

запись информации в текстовый файл
Здравствуйте. Помогите пожалуйста исправить код php-файла, который должен осуществлять запись...

14
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
28.05.2016, 17:59 2
Где вызов compute_u() в цикле?
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
28.05.2016, 18:07  [ТС] 3
В takeStep() она вызывается
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
28.05.2016, 18:18 4
Ты открываешь один и тот же файл в нескольких местах. Сделай, чтобы файл открывался один раз, а в функции передавай ссылку на ifstream.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
28.05.2016, 18:31  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
чтобы файл открывался один раз
в main() ?
Цитата Сообщение от nmcf Посмотреть сообщение
а в функции передавай ссылку на ifstream.
это в функции compute_u передавать ссылку? на что?
почему на ifstream?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
28.05.2016, 18:44 6
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
в main() ?
Да.
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
почему на ifstream?
Ну а на что ещё? Ты же через ifstream записываешь.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
28.05.2016, 19:06  [ТС] 7
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void compute_u(ifstream & filestr) // вычисляем u[ ][ ][ ] на всей решётке
{
    for (int x = 1; x <= Nx; x++){
       for (int y = 1; y <= Ny; y++){
           for (int d = 0; d < 2; d++){
                u[x][y][d] = 0;
                for (int i = 1; i < Nc; i++){
                 u[x][y][d] += n[x][y][i] * c[i][d];
                 u[x][y][d] /= rho;}
            }
        }
 
       //запись в файл
       filestr<<setprecision(5)<<u[x][Ny][0]<<setprecision(5)<<setw(15)<<u[x][Ny-5][0]
       <<setprecision(5)<<setw(15)<<u[x][Ny-10][0]<<setprecision(5)<<setw(15)<<u[x][Ny/2][0]
       <<setprecision(5) <<setw(15)<<u[x][10][0]<<setprecision(5)<<setw(15)<<u[x][5][0]
       <<setprecision(5)<<setw(15)<<u[x][1][0]<<endl;
    }
}
Неужели так?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
28.05.2016, 19:21 8
Да.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
28.05.2016, 19:29  [ТС] 9
А как быть с тем, что выдает ошибку на этой строчке
C++ (Qt)
1
 filestr<<setprecision(5)<<u[x][Ny][0]<<setprecision(5)<<setw(15)<<u[x][Ny-5][0]
и говорит, что не понимает оператор << ?

функция compute_u входит в takeStep, я исправил аргумент, который она принимает вот так:
compute_u(ifstream &);
и что-то не получается тут.
Что нужно изменить?
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
29.05.2016, 08:33 10
ifstream сначала передаётся в takeStep(), оттуда уже в compute_u().
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
29.05.2016, 15:03  [ТС] 11
C++ (Qt)
1
takeStep(ifstream & filestr)
C++ (Qt)
1
    compute_u(ifstream &  );
те же ошибки выдает
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
29.05.2016, 17:05 12
Программу покажи.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
29.05.2016, 17:16  [ТС] 13
C++ (Qt)
1
2
3
4
5
void takeStep() {
//*** 3 подпрограммы, где нет записи в файл
    compute_u();
//*** 2 подпрограммы, где нет записи в файл 
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void compute_u() // вычисляем u[ ][ ][ ] на всей решётке
{
ofstream filestr("test.txt",ios::app); //маркер ::app - для записи в конец файла
   for (int y = 1; y <= Ny; y++){
      for (int x = 1; x <= Nx; x++){
 
           for (int d = 0; d < 2; d++){
                u[x][y][d] = 0;
                for (int i = 1; i < Nc; i++){
                 u[x][y][d] += n[x][y][i] * c[i][d];
                 u[x][y][d] /= rho;}
            }
        }
 
       //запись в файл
       filestr<<"u["<<Nx-20<<"]["<< y<<"] = "<<setprecision(5)<<u[Nx-20][y][0]<<endl;
    }
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main() {
 
ofstream filestr; //создали объект класса
 //  filestr.open("test.txt", ios_base::trunc);
   filestr.open ("test.txt", ios_base::app  ); //связываем объект с файлом, открываем файл для записи в конец файл, маркер ::app
 
     if(filestr == NULL)
         {
             cout << "error! didn't open the file!"<<endl;
             return -1;
         }
     else cout<<"The file has been opened!"<<endl;
   for(int stepTime=1;stepTime<100; ++stepTime){
          filestr<<endl<<"stepTime= "<<stepTime<<endl<<endl;
    takeStep();  
    }
 
   filestr.close();
}
0
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
29.05.2016, 17:28 14
Ну и где параметр?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void takeStep(ofstream & filestr)
 
compute_u(ofstream & filestr)
 
int main() {
 
ofstream filestr; //создали объект класса
 //  filestr.open("test.txt", ios_base::trunc);
   filestr.open ("test.txt", ios_base::app  ); //связываем объект с файлом, открываем файл для записи в конец файл, маркер ::app
 
     if(filestr == NULL)
         {
             cout << "error! didn't open the file!"<<endl;
             return -1;
         }
     else cout<<"The file has been opened!"<<endl;
   for(int stepTime=1;stepTime<100; ++stepTime){
          filestr<<endl<<"stepTime= "<<stepTime<<endl<<endl;
 
    takeStep(filestr);  
    }
 
   filestr.close();
}
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
29.05.2016, 17:42  [ТС] 15
Ну да, это я просто самую первую версию отправил. Я так и сделал, как вы сказали.
и выводит ошибки
expected primary-expression before & token
0
29.05.2016, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2016, 17:42
Помогаю со студенческими работами здесь

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

vbs. запись информации в текстовый файл
Есть скрипт, который выводит в сообщении имя машины, и его ip адрес, дату и в время. Нужно...

Запись нескольких массивов в текстовый файл
Имеется 3 массива одинаковой размерности A, B, C. Как записвать их в файл, чтобы каждый массив...

Как записывать несколько одномерных массивов, и несколько двумерных массивов в один единственный текстовый файл
Как записывать несколько одномерных массивов, и несколько двумерных массивов в один единственный...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru