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

Программа по обработке данных из файла. Подскажите! - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ bind + map http://www.cyberforum.ru/cpp-beginners/thread1070978.html
Вопрос, почему это не работает? Вроде же все правильно вызывается.int main() { using map_t = std::map<std::string, int>; map_t map { {"A", 10}, {"B", 11}, {"C", 12}, {"D", 13}, {"E", 14},...
C++ Что означает "From order by" Дали задание всё рассказать по эти 3 строчки, про все операторы. Помогите плиз. rs.SetOpenMode (true); rs.setSQL (" select num_rec, , , from tab1 order by "); rs.Open (); http://www.cyberforum.ru/cpp-beginners/thread1070973.html
сложение дробей C++
Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить функцию сложения этих дробей. Ответ должен быть несократимой дробью.
C++ Метод средних прямоугольников для функции
Напишите пожалуйста формулу средних прямоугольников для функции в c++ , а то уже все облазил и не нашел.
C++ Все элементы массива, правее которых стоит нечетное значение, заменить на 0 http://www.cyberforum.ru/cpp-beginners/thread1070940.html
В массиве все элементы, правее которых стоит нечетное значение, заменить на 0 Пример: из массива A: 1 3 4 5 6 должен получиться массив 0 3 0 5 6. Из массива удалить последний из нечетных...
C++ Описать структурный тип для представления геометрической фигуры кругюнаписаты програмуяка определяет, падает точка с заданными декартовыми координатам Описать структурный тип для представления геометрической фигуры круг.написаты програму которая определяет, падает точка с заданными декартовыми координатами x, y в заданный круг. подробнее

Показать сообщение отдельно
Gellert
0 / 0 / 0
Регистрация: 15.10.2010
Сообщений: 7

Программа по обработке данных из файла. Подскажите! - C++

14.01.2014, 12:27. Просмотров 374. Ответов 12
Метки (Все метки)

Задача: есть текстовый файл, в котором лежат данные типа 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 значений, полученную строки из усредненных значений переписать в другой файл.

Проблема: проблема в функции strToMass. На выходе получаются данные в нужном формате (запись только каждого 100 числа), но записывает не среднее, а последнее из 100 значений. Я не знаю, как корректно вытащить из массива char значения, обработать их, а потом запихнуть обратно в строку уже среднее и передать на запись. Посмотрите, помогите!


Собственно, написанный код под это:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru