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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
#1

Чтение из файла - C++

11.05.2012, 17:00. Просмотров 967. Ответов 25
Метки нет (Все метки)

у меня есть файл такого вида
N | utr |KPD |
1 | 335.25 |0.78 |
2 | 276.09 |0.78 |
3 | 223.90 |0.78 |
4 | 184.39 |0.78 |
5 | 150.74 |0.78 |
6 | 124.13 |0.78 |
7 | 139.69 |0.82 |
8 | 115.04 |0.82 |
9 | 93.29 |0.82 |
10 | 76.83 |0.82 |
11 | 62.81 |0.82 |
12 | 51.72 |0.82 |
13 | 104.56 |0.82 |
14 | 86.11 |0.82 |
15 | 69.83 |0.82 |
16 | 57.51 |0.82 |
17 | 47.01 |0.82 |
18 | 38.72 |0.82 |
19 | 51.88 |0.82 |
20 | 42.72 |0.82 |
21 | 34.65 |0.82 |
22 | 28.53 |0.82 |
23 | 23.32 |0.82 |
24 | 19.21 |0.82 |
нужно записать в три разные массива три колонки какой функцие можно считать из файла удобнее всего
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 17:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib> using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 19:35 #16
Может быть, так получится?

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
#include <vector>
#include <string>
 
int main()
{
    std::vector<int> N;
    std::vector<double> utr;
    std::vector<double> KPD;
    std::string value;
    FILE* f = fopen("file.txt","rb");
    if (!f) return 1;
 
    size_t column = 0;
    size_t row = 0;
    while (true)
    {
        char c = fgetc(f);
        if (c == EOF) break;
        if ((c == '\r' || c == '\n') || c=='|')
        {
            if (row!=0)
            {
                switch (column)
                {
                    case 0:
                        if (!value.size()) break;
                        N.push_back(atoi(value.c_str()));
                        break;
                    case 1:
                        utr.push_back(atof(value.c_str()));
                        break;
                    case 2:
                        KPD.push_back(atof(value.c_str()));
                        break;
                }
            }
            value.clear();
            if (c == '\r' || c == '\n') {column = 0; row++;}
            else {column++;}
            continue;
        }
        if (c==' ') continue;
        value+=c;
    }
    fclose(f);
    return 0;
}
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:54  [ТС] #17
по проще код нельзя а то какой то вы дали замудренный можно же как то сделать проще не ужели никто не сталкивался с такой проблемой

Добавлено через 8 минут
modwind, и второй столбик у вас при чтении округляеться почему то тоесть вместо 335.25 в массиве 335.00

Добавлено через 52 секунды
и столбик с кпд выводиься в массиве 00000 вместо 0.78
modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 20:04 #18
Можно попроще, но менее надёжно:
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
#include <vector>
#include <string>
 
int main()
{
    std::vector<int> N;
    std::vector<float> utr;
    std::vector<float> KPD;
    std::string value;
    FILE* f = fopen("file.txt","rb");
    if (!f) return 1;
 
    for (size_t i=0;;i++)
    {
        char buf[1024];
        if (!fgets(buf, 1024, f)) break;
        if (i == 0) continue;
 
        int N0;
        float utr0;
        float KPD0;
        sscanf(buf,"%d | %f | %f", &N0, &utr0, &KPD0);
        N.push_back(N0);
        utr.push_back(utr0);
        KPD.push_back(KPD0);
    }
 
    fclose(f);
    return 0;
}
Добавлено через 3 минуты
modwind, и второй столбик у вас при чтении округляеться почему то тоесть вместо 335.25 в массиве 335.00 и столбик с кпд выводиься в массиве 00000 вместо 0.78
Ну, это проблема локали скорее всего. Вы поставили русскую, соответственно в дробных числах ожидается разделитель дробной части "запятая" вместо точки. Верните английскую, хотя бы на время.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 20:09  [ТС] #19
у меня стоит setlocale(LC_ALL,"Russian"); думаете из за этого?

Добавлено через 2 минуты
а если из за этого как мне русские слова выводить это мой курсовой надо что бы на русском выводилось а то будет не очень красиво
modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 20:10 #20
Да, из-за этого. Советую не менять формат дробных чисел:
C++
1
setlocale(LC_CTYPE,"");
И только буквы станут русскими.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 20:20  [ТС] #21
все выводит уже нормально а можно как нибудь не через вектор а через обычные массивы?

Добавлено через 6 минут
я сделал по своему раеньше думал чего округляеться теперь сделал как надо вот такой малый код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 while(!feof(fp)) 
 {
    if(fgets(str, 126, fp)) 
    {
        if (w==1)
        {
        q=strtok(str,"|");
       Nperedaci[p]=atoi(q);
        q=strtok(NULL,"|");
        Utr[p]=atof(q);
        q=strtok(NULL,"|");
        Kpd[p]=atof(q);
        p++;
        }
        w=1;
 
 
    }
modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 20:21 #22
А что тут сложного?
C++
1
2
std::vector<int> N; /* --> */ int N[25];
N.push_back(N0); /* --> */ N[i-1] = N0;
Если неизвестно, сколько данных, то через realloc.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 20:24  [ТС] #23
просто я уже сделал часа 3 мучался не знал чего округляет
Игорь с++
434 / 457 / 16
Регистрация: 26.01.2011
Сообщений: 2,032
11.05.2012, 21:00 #24
modwind, да для него походу всё сложно то код , то вектора , то работы потом много будет.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 21:55  [ТС] #25
ничего смешного не вижу мой код короче и быстрее работает в чем проблема?
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
12.05.2012, 01:59 #26
мой код из 4го поста еще короче)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 01:59
Привет! Вот еще темы с ответами:

чтение из файла - C++
Здравствуйте, уважаемые программисты. Есть файл с записями (объектами), у каждой записи 3 параметра (переменные). Я считываю запись,...

Чтение файла - C++
Доброго времени суток. Пишу программу которая может читать каждый символ файла. #include&lt;iostream&gt; #include&lt;fstream&gt; ...

чтение из файла - C++
файл текст... чтение... ... char font_name = {0}; int font_size = 0;

Чтение из файла - C++
Помогите дописать код чтения из файла. За ранее спасибо. void MyList::save() { Sotrydnik sSotrydnik; ofstream F; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.05.2012, 01:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru