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

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

Восстановить пароль Регистрация
 
 
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 17:00     Чтение из файла #1
у меня есть файл такого вида
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 |
нужно записать в три разные массива три колонки какой функцие можно считать из файла удобнее всего
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
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);
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:01  [ТС]     Чтение из файла #3
так не пойдет слишком много потом действий надо будет сделать
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 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++]);
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:04  [ТС]     Чтение из файла #5
в смысле пропускаем fgets
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 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, тебе код на С++ или С нужен ?
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 18:12  [ТС]     Чтение из файла #7
у меня ругаеться на ifs >> z >> junk >> k >> junk >> l;
cout << z << ' ' << k << ' ' << l << '\n';

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

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

Добавлено через 17 минут
и через fscanf тоже самое считывает мусор
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 19:20     Чтение из файла #12
значит с файлом что-то не так
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:21  [ТС]     Чтение из файла #13
а вы пробывали считать сами из файла такого как у меня содержания?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
11.05.2012, 19:22     Чтение из файла #14
пробывал.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
11.05.2012, 19:23  [ТС]     Чтение из файла #15
и считывает все хорошо?три столбца как надо?
modwind
 Аватар для 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
 Аватар для 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 минуты
а если из за этого как мне русские слова выводить это мой курсовой надо что бы на русском выводилось а то будет не очень красиво
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 20:10     Чтение из файла
Еще ссылки по теме:

C++ Чтение из файла
Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++
Чтение файла с несколькими знаками конца файла C++

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

Или воспользуйтесь поиском по форуму:
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
11.05.2012, 20:10     Чтение из файла #20
Да, из-за этого. Советую не менять формат дробных чисел:
C++
1
setlocale(LC_CTYPE,"");
И только буквы станут русскими.
Yandex
Объявления
11.05.2012, 20:10     Чтение из файла
Ответ Создать тему
Опции темы

Текущее время: 03:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru