Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
1

Чтение из файла

11.05.2012, 17:00. Просмотров 1048. Ответов 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 |
нужно записать в три разные массива три колонки какой функцие можно считать из файла удобнее всего
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 17:00
Ответы с готовыми решениями:

Переделать в коде чтение из файла в чтение с клавиатуры
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен...

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

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip>...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание...

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

25
Игорь с++
473 / 465 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
11.05.2012, 17:35 2
Можно всё считать в один массив , а потом работая с ним распихать по разным.
Считать всё полностью в один можно таким образом -
C++
1
2
3
4
5
6
7
HANDLE hFile;
DWORD dwBytes=0;static int BufSize=0;
    static char Buffer[100]={0};
hFile=CreateFile("a.txt",GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
BufSize = GetFileSize(hFile, NULL);
ReadFile(hFile,Buffer,BufSize,&dwBytes,NULL);
CloseHandle(hFile);
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:01  [ТС] 3
так не пойдет слишком много потом действий надо будет сделать
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 18:02 4
первую строчку пропускаем fgets-ом
дальше читай fscanf:
C++
1
fscanf(file, "%d | %lf | %lf", &arr1[i++], &arr2[j++], &arr3[k++]);
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:04  [ТС] 5
в смысле пропускаем fgets
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 18:08 6
в прямом. вызовешь fgets, чтобы тебе первую строчку пропустить.

код на С++:
C++
1
2
3
4
5
6
7
8
9
10
11
    std::ifstream ifs("in.txt");
 
    int i;
    double k, l;
 
    char junk;
 
    while (!ifs.eof()) {
        ifs >> i >> junk >> k >> junk >> l;
        std::cout << i << ' ' << k << ' ' << l << '\n';
    }
хотелось бы услышать как можно сделать подобное без переменной junk, от знающих людей.

Добавлено через 1 минуту
sergeu90, тебе код на С++ или С нужен ?
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:12  [ТС] 7
у меня ругаеться на ifs >> z >> junk >> k >> junk >> l;
cout << z << ' ' << k << ' ' << l << '\n';

Добавлено через 17 секунд
нужно на с++
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 18:14 8
а у меня не ругается
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:29  [ТС] 9
не считывает оно какие то цифры странные чего не те что в файле у меня

Добавлено через 12 минут
OstapBender, у тебя считывает нормально?у меня вообще не читает одни и теже цифры
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 18:42 10
а так
C++
1
ifs >> i >> junk >> k >> junk >> l >> junk;
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:08  [ТС] 11
OstapBender, тоже не считывается мусор считывает

Добавлено через 17 минут
и через fscanf тоже самое считывает мусор
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 19:20 12
значит с файлом что-то не так
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:21  [ТС] 13
а вы пробывали считать сами из файла такого как у меня содержания?
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 19:22 14
пробывал.
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:23  [ТС] 15
и считывает все хорошо?три столбца как надо?
0
modwind
52 / 52 / 2
Регистрация: 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;
}
0
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:54  [ТС] 17
по проще код нельзя а то какой то вы дали замудренный можно же как то сделать проще не ужели никто не сталкивался с такой проблемой

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

Добавлено через 52 секунды
и столбик с кпд выводиься в массиве 00000 вместо 0.78
0
modwind
52 / 52 / 2
Регистрация: 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
Ну, это проблема локали скорее всего. Вы поставили русскую, соответственно в дробных числах ожидается разделитель дробной части "запятая" вместо точки. Верните английскую, хотя бы на время.
1
sergeu90
27 / 28 / 5
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 20:09  [ТС] 19
у меня стоит setlocale(LC_ALL,"Russian"); думаете из за этого?

Добавлено через 2 минуты
а если из за этого как мне русские слова выводить это мой курсовой надо что бы на русском выводилось а то будет не очень красиво
0
modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 20:10 20
Да, из-за этого. Советую не менять формат дробных чисел:
C++
1
setlocale(LC_CTYPE,"");
И только буквы станут русскими.
0
11.05.2012, 20:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 20:10

Чтение файла с несколькими знаками конца файла
В файле несколько раз встречается ноль, и ни как не получается прочитать его...

Чтение текстового файла специфического файла
Добрый день! Есть один текстовый файл определенного формата. Заголовок по...

Чтение из файла
Такое дело: В одном методе создаётся экземпляр ifstream, открывается,читает и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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