Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 00:41   #1
zzydd
 
Регистрация: 01.05.2012
Сообщений: 6
Восклицание Вывод массивов a файл в формате xls

Имеется следующий код цель которого записывать массив N*N в файл формата xls:
Код:
//------------------------------------------------------------------------
void TMain::Folder(void)
{
 AnsiString S1, S2, S3, S5, S6, S7, S9, S10, S11, S12, S13, Sxt;
 TimeSeparator = '-';
 ShortDateFormat = "dd/mm/yy h:nn";
 S14 = ".xls";
 S15 = "_" ;
 S0 = S15;
 Sxt =DateToStr(Now());
 Sd = Sxt;
 CreateDir(Sd.c_str());
}
//------------------------------------------------------------------------
void TMain::Print(void)
{
 AnsiString Fname, S1, Soz;
 S1 = FloatToStrF(time, ffFixed, 3, 2);
 Fname = Sd+"\\"+S0+S14;
 ofstream outfile(Fname.c_str());
 outfile<<"Qmax"<<'\t';
 outfile<<"tau"<<'\t';
 outfile<<"timeov"<<'\t';
 outfile<<"dtime"<<'\t';
 outfile<<"RadF"<<'\t';
 outfile<<"P0"<<'\t';
 outfile<<"T0"<<'\t';
 outfile<<"Ro0"<<endl;
 outfile<<(FloatToStr(Qmax)).c_str()<<'\t';
 outfile<<(FloatToStr(tau)).c_str()<<'\t';
 outfile<<(FloatToStr(timeov)).c_str()<<'\t';
 outfile<<(FloatToStr(dtime)).c_str()<<'\t';
 outfile<<(FloatToStr(RadF)).c_str()<<'\t';
 outfile<<(FloatToStr(P0)).c_str()<<'\t';
 outfile<<(FloatToStr(T0)).c_str()<<'\t';
 outfile<<(FloatToStr(Ro0)).c_str()<<endl;
 outfile<<"time"<<'\t';
 outfile<<(FloatToStr(time)).c_str()<<'\t';
 outfile<<"Шаг"<<'\t';
 outfile<<(FloatToStr(step)).c_str()<<'\t';
 outfile<<" "<<'\t';
 outfile<<"Temperature"<<endl;
 outfile<<" "<<'\t';
 for (int i=1; i<=Imax; i++)
     {
      outfile<<(FloatToStr(i)).c_str()<<'\t';
     }
 outfile<<" "<<endl;
 for (int j=1; j<=Jmax; j++)
     {
      outfile<<(FloatToStr(j)).c_str()<<'\t';
      for (int i=1; i<=Imax; i++) { outfile<<(FloatToStr(T[i][j])).c_str()<<'\t'; }
      outfile<<endl;
     }
 outfile<<endl;
}
//------------------------------------------------------------------------
В результате выполнения основной программы по времени на каждом временном шаге из основной программы идет обращение в указанные подпрограммы для вывода значений элементов массива для данного временного шага в файл с расширением xls. Однако на выходе получается что на каждом последующем шаге программа перезаписывает данные предыдущего шага. Мне же необходимо иметь данные для каждого шага. Подскажите как грамотнее организовать вывод?

Последний раз редактировалось Stilet; 01.05.2012 в 11:00.
zzydd вне форума Ответить с цитированием
Старый 01.05.2012, 02:42   #2
Kaela
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 36
По умолчанию

почему outile<<...<<`/t`;
когда надо бы outfile<<...<<endl;
Kaela вне форума Ответить с цитированием
Старый 01.05.2012, 12:27   #3
zzydd
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Kaela Посмотреть сообщение
почему outile<<...<<`/t`;
когда надо бы outfile<<...<<endl;
Это технические моменты. На суть проблемы они не влияют. Перед циклами я вывожу начальные данные, после этого поток закрывается <<endl; Далее для корректного отображения курсор смещается на одну ячейку вправо, т. к. один из циклов нумерует ячейки и столбцы. Другой непосредственно выводит массив.
zzydd вне форума Ответить с цитированием
Старый 01.05.2012, 13:07   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Где наглядность? Я так и не понял, в один это файл должно писаться или нет.
Должны быть функции, принимающие параметры и возвращающие значения.
А не void func (void) с кучей переменных внутри и рябящем в глазах outfile<<
Может для Вас это тоже мелочи и технические моменты, но я бы описал вначале структуру.
struct MYDATA
{
float Qmax; // или что там у Вас;
float RadF;
//.... ИТД
};

Написал бы функцию принимающую параметром эту структуру и заполняюшую ее поля
int FillStruct(MYDATA*); и может быть возвращающую что-то полезное.

Перегрузил бы оператор <<
чтобы можно было написать так:

MYDATA md;
outfile << md; // записать всю структуру в файл.

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

И мне почему-то кажется, что сама логика должна при таком подходе уместится в пять строк.

Подготовить данные ()
Открыть файл ()
Записать файл ()
Закрыть файл ()
Вернуться на начало цикла.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 00:22   #5
zzydd
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Значения одной переменной, представляющие собой массив N*N для каждого временного шага необходимо записывать в один и тот же файл. На самом деле таких переменных несколько, соответственно должно выводиться несколько идентичных файлов.
Что подразумевает подготовка данных?
zzydd вне форума Ответить с цитированием
Старый 02.05.2012, 01:26   #6
Kaela
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 36
По умолчанию

Цитата:
Перегрузил бы оператор <<
чтобы можно было написать так:

MYDATA md;
outfile << md; // записать всю структуру в файл
Откр
а можно поподробнее,как реализовать перегрузку этого оператора
Kaela вне форума Ответить с цитированием
Старый 02.05.2012, 14:05   #7
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Условно так:
Код:
#include <fstream>

using namespace std;

struct DAT
{
    int x;
    float y;
};

ostream & operator << ( ostream& os, DAT& dt )
{
	os << dt.x << '\t' << dt.y << endl;
	return os;
}

void FillDT(DAT& dt)
{
	dt.x = 777;
	dt.y = 0.125f;
}

int main()
{
	DAT dt;
	FillDT(dt);
	ofstream ofs("qwerty.dat", ios::app);
	ofs << dt;
	ofs.close();
    return 0;
}
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 17:37   #8
Kaela
Пользователь
 
Регистрация: 29.04.2012
Сообщений: 36
По умолчанию

значит operator можно применять не только к классам, что-то новенькое для меня

а можно тогда вопрос
этот оператор теперь может просто выводить текст?
ведь он получается перегружен только для ofstream?

и значок & после задания аргументов функции значит, что мы берём их по ссылке?
Kaela вне форума Ответить с цитированием
Старый 02.05.2012, 18:20   #9
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
значит operator можно применять не только к классам, что-то новенькое для меня

а можно тогда вопрос
этот оператор теперь может просто выводить текст?
ведь он получается перегружен только для ofstream?

и значок & после задания аргументов функции значит, что мы берём их по ссылке?
Он перегружен для пары:
//LEFT << RIGHT;

void operator << (LEFT &, RIGHT &)
{
// Что захотим, чтобы делал этот оператор, то и получим.
}

Единственно, хотя бы один из параметров LEFT или RIGHT должен быть типом структура или класс.

Значок & означает передачу аргумента по ссылке, чтобы при передаче параметров не создавалась новая копия объекта LEFT или RIGHT.
Можно передавать и по указателю, в принципе это одно и тоже.
У автора засада, судя по всему в том, что он заново открывал файл, но не в режиме добавления в него ios::app.
EUGY вне форума Ответить с цитированием
Старый 02.05.2012, 22:32   #10
zzydd
 
Регистрация: 01.05.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
У автора засада, судя по всему в том, что он заново открывал файл, но не в режиме добавления в него ios::app.
Все, спасибо разобрался.

Последний раз редактировалось zzydd; 02.05.2012 в 23:01.
zzydd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, преобразующую файл *.csv в файл *.xls Lamer_ok Фриланс 1 17.12.2011 14:24
Программа, выполняющая поиск отказов в выписках (в формате RTF) и формирующая реестр отказников в формате XLS (на делфи) avtoritetbikov@mai Фриланс 5 08.11.2011 00:20
поиск отказов в выписках (в формате RTF) и формирующую реестр отказников в формате XLS avtoritetbikov@mai Фриланс 3 03.10.2011 09:03
Поиск ячейки и вывод в ТМемо из xls файла BBOBAHH Общие вопросы Delphi 4 07.12.2010 19:25
как текстовый файл в формате word 2007 переделать в файл в формате ZAY JULIA Microsoft Office Word 13 09.06.2010 19:43