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

Считывание из файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:02     Считывание из файла #1
Помогите пожалуйста,никак не могу найти,как считать данные из такого файла:

Rup 106 12 38 40.2 -51 09 01 300.88 11.67 21.2 18.5 10.7 -17.8 4.3
NGC 4590 M 68 12 39 27.98 -26 44 38.6 299.63 36.05 10.3 10.2 4.1 -7.2 6.0
NGC 4833 12 59 33.92 -70 52 35.4 303.60 -8.02 6.6 7.0 3.6 -5.4 -0.9
NGC 5024 M 53 13 12 55.25 +18 10 05.4 332.96 79.76 17.9 18.4 2.8 -1.4 17.6
NGC 5053 13 16 27.09 +17 42 00.9 335.70 78.95 17.4 17.8 3.0 -1.4 17.1
NGC 5139 omega Cen 13 26 47.24 -47 28 46.5 309.10 14.97 5.2 6.4 3.1 -3.9 1.3
NGC 5272 M 3 13 42 11.62 +28 22 38.2 42.22 78.71 10.2 12.0 1.5 1.3 10.0
Надо извлечь имя (это ,например,"Rup 106 " в первой строке,или "NGC 4590 M 68" во второй),а потом остальные значения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2011, 13:02     Считывание из файла
Посмотрите здесь:

считывание с файла C++
Считывание из файла C++
считывание с файла... C++
Считывание файла в массив и запись нового файла C++
C++ Считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 14:06  [ТС]     Считывание из файла #21
Вот,смотрите тут http://www.physics.mcmaster.ca/~harris/mwgc.dat
Мой файл-это первая таблица(Слава Богу,хоть ее вырезать разрешили =) ):
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 14:06     Считывание из файла #22
Значит входной файл выглядет не так, как в первом посте, там похоже пробелов больше, поэтому правильно получается)
Может тогда есть смысл переписать алгоритм, я чувствую его можно значительно упростить, если б увидеть как именно выглядет файл, с точным кол-вом пробелов.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
08.08.2011, 14:08     Считывание из файла #23
Ну, разумеется, как я и предполагал, сначала идут имена, а потом ровно 13 параметров.
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 14:08  [ТС]     Считывание из файла #24
Вот строчка:
Eridanus 04 24 44.5 -21 11 13 218.10 -41.33 90.1 95.0 -53.2 -41.7 -59.5
Пишу правильное количество пробелов,а они тут уничтожаются =) Я поэтому про 26 символов и писала.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 14:09     Считывание из файла #25
Тогда можно проще - читать первые N символов и отсекать лишние пробелы.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.08.2011, 14:15     Считывание из файла #26
Аха. Вариант в посте 11.)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 14:18     Считывание из файла #27
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<fstream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
 
int main(){
    std::ifstream fin("file.txt");
    if(!fin){
        std::cerr<<"Error: can't open file\n";
        return 1;
    }
    std::string str;
    std::vector<std::string> names;
    while(getline(fin,str))
        names.push_back(str.substr(0,str.substr(0,24).find_last_not_of(' ')+1));
    std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout,"\n"));
    return 0;
}
file.txt
Код
 NGC 104    47 Tuc       00 24 05.67  -72 04 52.6   305.89  -44.89    4.5   7.4   1.9  -2.6  -3.1
 NGC 288                 00 52 45.24  -26 34 57.4   152.30  -89.38    8.9  12.0  -0.1   0.0  -8.9
 NGC 362                 01 03 14.26  -70 50 55.6   301.53  -46.25    8.6   9.4   3.1  -5.1  -6.2
 Whiting 1               02 02 57     -03 15 10     161.22  -60.76   30.1  34.5 -13.9   4.7 -26.3
 NGC 1261                03 12 16.21  -55 12 58.4   270.54  -52.12   16.3  18.1   0.1 -10.0 -12.9
 Pal 1                   03 33 20.04  +79 34 51.8   130.06   19.03   11.1  17.2  -6.8   8.1   3.6
 AM 1       E 1          03 55 02.3   -49 36 55     258.34  -48.47  123.3 124.6 -16.5 -80.1 -92.3
 Eridanus                04 24 44.5   -21 11 13     218.10  -41.33   90.1  95.0 -53.2 -41.7 -59.5
 Pal 2                   04 46 05.91  +31 22 53.4   170.53   -9.07   27.2  35.0 -26.4   4.4  -4.3
 NGC 1851                05 14 06.76  -40 02 47.6   244.51  -35.03   12.1  16.6  -4.2  -8.9  -6.9
 NGC 1904   M 79         05 24 11.09  -24 31 29.0   227.23  -29.35   12.9  18.8  -7.7  -8.3  -6.3
 NGC 2298                06 48 59.41  -36 00 19.1   245.63  -16.00   10.8  15.8  -4.3  -9.4  -3.0
 NGC 2419                07 38 08.47  +38 52 56.8   180.37   25.24   82.6  89.9 -74.7  -0.5  35.2
 Ko 2                    07 58 17.0   +26 15 18     195.12   25.54   34.7  41.9 -30.2  -8.2  15.0
 Pyxis                   09 07 57.8   -37 13 17     261.32    7.00   39.4  41.4  -5.9 -38.7   4.8
 NGC 2808                09 12 03.10  -64 51 48.6   282.19  -11.25    9.6  11.1   2.0  -9.2  -1.9
 E 3                     09 20 57.07  -77 16 54.8   292.27  -19.02    8.1   9.1   2.9  -7.1  -2.6
 Pal 3                   10 05 31.9   +00 04 18     240.15   41.86   92.5  95.7 -34.3 -59.7  61.7
 NGC 3201                10 17 36.82  -46 24 44.9   277.23    8.64    4.9   8.8   0.6  -4.8   0.7
 Pal 4                   11 29 16.80  +28 58 24.9   202.31   71.80  108.7 111.2 -31.4 -12.9 103.2
 Ko 1                    11 59 18.5   +12 15 36     260.99   70.75   48.3  49.3  -2.5 -15.7  45.6
 NGC 4147                12 10 06.30  +18 32 33.5   252.85   77.19   19.3  21.4  -1.3  -4.1  18.8
 NGC 4372                12 25 45.40  -72 39 32.4   300.99   -9.88    5.8   7.1   2.9  -4.9  -1.0
 Rup 106                 12 38 40.2   -51 09 01     300.88   11.67   21.2  18.5  10.7 -17.8   4.3
 NGC 4590   M 68         12 39 27.98  -26 44 38.6   299.63   36.05   10.3  10.2   4.1  -7.2   6.0
 NGC 4833                12 59 33.92  -70 52 35.4   303.60   -8.02    6.6   7.0   3.6  -5.4  -0.9
 NGC 5024   M 53         13 12 55.25  +18 10 05.4   332.96   79.76   17.9  18.4   2.8  -1.4  17.6
 NGC 5053                13 16 27.09  +17 42 00.9   335.70   78.95   17.4  17.8   3.0  -1.4  17.1
 NGC 5139   omega Cen    13 26 47.24  -47 28 46.5   309.10   14.97    5.2   6.4   3.1  -3.9   1.3
 NGC 5272   M 3          13 42 11.62  +28 22 38.2    42.22   78.71   10.2  12.0   1.5   1.3  10.0
 NGC 5286                13 46 26.81  -51 22 27.3   311.61   10.57   11.7   8.9   7.6  -8.6   2.1
 AM 4                    13 56 21.7   -27 10 03     320.28   33.51   32.2  27.8  20.7 -17.2  17.8
 NGC 5466                14 05 27.29  +28 32 04.0    42.15   73.59   16.0  16.3   3.3   3.0  15.3
 NGC 5634                14 29 37.23  -05 58 35.1   342.21   49.26   25.2  21.2  15.7  -5.0  19.1
вывод:
NGC 104 47 Tuc
NGC 288
NGC 362
Whiting 1
NGC 1261
Pal 1
AM 1 E 1
Eridanus
Pal 2
NGC 1851
NGC 1904 M 79
NGC 2298
NGC 2419
Ko 2
Pyxis
NGC 2808
E 3
Pal 3
NGC 3201
Pal 4
Ko 1
NGC 4147
NGC 4372
Rup 106
NGC 4590 M 68
NGC 4833
NGC 5024 M 53
NGC 5053
NGC 5139 omega Cen
NGC 5272 M 3
NGC 5286
AM 4
NGC 5466
NGC 5634
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 14:20  [ТС]     Считывание из файла #28
Спасибо всем =)
Я просто еще совсем новичок,вот меня подобные файлы в ступор и вгоняют.
IrineK
Заблокирован
08.08.2011, 14:57     Считывание из файла #29
Все оказалось так прозаично ((

lapo4ka1368, возможно, для новичка будет также интересен такой вариант:

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
#include <stdio.h>
#include <string.h>
#define buf 256
#define part 24
 
int main()
{   FILE *f;
    char str[buf], res[part+1];
 
    f = fopen ("main.txt", "r") ;
    if ( f == NULL )
    {   printf("Cannot open file\n");
        getchar();
        return 1;
    }
 
    while (fgets(str, buf, f))
    {   strncpy (res,str,part);
        res[part]='\0';
        puts(res);
    }
 
    fclose(f);
    getchar();
 
    return 0;
}
Миниатюры
Считывание из файла  
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.08.2011, 04:36     Считывание из файла #30
Цитата Сообщение от lapo4ka1368
У fscanf(ну или чего-нибудь,что считывает именно из файла) я не нашла.
неправильный источник
fscanf() работает так же
но это ещё не значит, что ты понимаешь, как работает %Ns

Цитата Сообщение от lapo4ka1368
Помогите пожалуйста,никак не могу найти,как считать данные из такого файла:

Rup 106 12 38 40.2 -51 09 01 300.88 11.67 21.2 18.5 10.7 -17.8 4.3
NGC 4590 M 68 12 39 27.98 -26 44 38.6 299.63 36.05 10.3 10.2 4.1 -7.2 6.0
NGC 4833 12 59 33.92 -70 52 35.4 303.60 -8.02 6.6 7.0 3.6 -5.4 -0.9
NGC 5024 M 53 13 12 55.25 +18 10 05.4 332.96 79.76 17.9 18.4 2.8 -1.4 17.6
NGC 5053 13 16 27.09 +17 42 00.9 335.70 78.95 17.4 17.8 3.0 -1.4 17.1
NGC 5139 omega Cen 13 26 47.24 -47 28 46.5 309.10 14.97 5.2 6.4 3.1 -3.9 1.3
NGC 5272 M 3 13 42 11.62 +28 22 38.2 42.22 78.71 10.2 12.0 1.5 1.3 10.0
Надо извлечь имя (это ,например,"Rup 106 " в первой строке,или "NGC 4590 M 68" во второй),а потом остальные значения.
тогда имена в файле должны быть в кавычках, или вообще поля разделены точкой с запятой, например

"Rup 106 " и "NGC 4590 M 68" имеют разное количество полей, разделённых пробелом

чем имя "Rup 106" отличается от "Rup 106 12" ?
откуда ты знаешь, что 12 - это число какое-то, а не часть имени ?

посмотрел тут... то, что там на странице с данными - это отображённые данные
высчитывать количество пробелов - это не вариант, так как этим ты ограничиваешь редактирование файла
человек не будет высчитывать количество пробелов при, например, добавлении новой записи

нужно привести данные к удобному виду, в котором видно, где имя, а где не имя
mac_alleb
7 / 7 / 0
Регистрация: 05.08.2011
Сообщений: 54
09.08.2011, 04:53     Считывание из файла #31
А нельзя просто считывать по символу и отсчмтывать количество пробелов: первый пропустить,
а второй - признак конца имени ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2011, 05:59     Считывание из файла
Еще ссылки по теме:

C++ считывание файла
Заменить считывание с клавиатуры на считывание из файла C++
C++ Считывание из файла

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.08.2011, 05:59     Считывание из файла #32
Цитата Сообщение от mac_alleb
А нельзя просто считывать по символу и отсчмтывать количество пробелов
не, у неё во втором имени вообще три пробела
Yandex
Объявления
09.08.2011, 05:59     Считывание из файла
Ответ Создать тему
Опции темы

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