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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2014, 03:08   #1
Gellert
Новичок
Джуниор
 
Регистрация: 14.01.2014
Сообщений: 1
По умолчанию Программа по обработке данных из файла. Подскажите!

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

T[s] GYRO_X GYRO_Y GYRO_Z
0.050691 1.204773 1.013245 0.081604
0.058691 0.431396 0.554199 0.130066

Еще несколько столбцов вправо и очень много строк вниз (по времени).
Необходимо забрать из этого файла данные, в каждом столбце находить среднее каждые 100 значений, полученную строки из усредненных значений переписать в другой файл.

Собственно, написанный код под это:
Код:
char* strToMass(char *sLine, int n)
{
    int i;
	char *ptrEnd,*ptrEnd2;                     //указатели для функции strtod
	double mas[100][20], avrgMas[20];          //массив для 100 знач. и для их среднего
	mas[n][0]=strtod(sLine,&ptrEnd);         //в первую ячейку первое значение из строки
	avrgMas[0]=0;
		for(i=1; i<20; i++)
		{ 
			mas[n][i]=strtod(ptrEnd,&ptrEnd2);     //в остальные ячейки все значения после первого числа из строки
			*ptrEnd=*ptrEnd2;
			avrgMas[i]+=mas[n][i];         //добавляем в каждую ячейку значение из соотв. столбца
		}
		if(n==100)
		{
			for(int k=0;k<20;k++)
			{
				avrgMas[k]=avrgMas[k]/100;     // на 100м значении
                                _snprintf(sLine, 256, "%.10g ", avrgMas[k]);  //вот здесь вобще туплю. не знаю, как в строку добавить все значения из массива со средними
			}
			
		}
		return sLine;
}

int _tmain(int argc, _TCHAR* argv[])
{
	ifstream ifs;
	ofstream ofs;
	int n=0, flag=0;
	int i;
	char *ptrEnd,*ptrEnd2;  
	char sLine[256];
	double mas[20][100], avrgMas[20];
	mas[0][n]=strtod(sLine,&ptrEnd);
	avrgMas[0]=0;

	ifs.open("polet.txt",ios::in);           //открываем файл на чтение
	if(!ifs)
		std::cout<<"Open error to read";      // проверяем на ошибки
	else
		ofs.open("polet1.txt",ios::out);     //открываем файл на запись
	if(!ofs)
		std::cout<<"Open error to write";
	else
	{
		while(!ifs.eof())           //поток идет до конца файла
		{
			ifs.getline(sLine,256);  //берем строку из файла
			if(flag==0)              
			{
				ofs<<sLine<<endl;   //по флагу проходим первую строчку с текстом, записываем ее и не заходим сюда больше
				flag=1;
			}
			else
			{
				strToMass(sLine,n);   //передаем строку в функцию. Функция теоретически идет по указателю и должна менять исходное значение sLine
				n++;                  //счетчик до 100, он же количество строк в массиве
				if(n==100)            
				{
					ofs<<sLine<<endl; //на 100 итерации строку из средних знач. записываем во второй файл.
					n=0;              //обнуляем n, чтобы опять отсчитывать 100 значений
				}
			}
		}
		ifs.close();                  //закрываем потоки
		ofs.close();
	}
	std::cout<<"\r\nPress any key\r\n";
	_getch();
	return 0;
Проблема: проблема в функции strToMass. На выходе получаются данные в нужном формате (запись только каждого 100 числа), но записывает не среднее, а последнее из 100 значений. Я не знаю, как корректно вытащить из массива char значения, обработать их, а потом запихнуть обратно в строку уже среднее и передать на запись. Посмотрите, помогите!

Последний раз редактировалось Gellert; 14.01.2014 в 03:22.
Gellert вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа по обработке TXT файла. sergio1984 Помощь студентам 11 05.06.2013 00:25
Программа по обработке строк david-95 Паскаль, Turbo Pascal, PascalABC.NET 3 18.11.2012 13:42
Правка макроса по обработке txt файла alexsampler Microsoft Office Excel 11 30.08.2012 13:18
Pascal. Программа по обработке массивов данных. При запуске возникают ошибки. Student1 Помощь студентам 3 04.01.2011 21:56
программа на си по обработке строки riptror Общие вопросы C/C++ 1 20.11.2007 20:54