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

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

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

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

08.08.2011, 13:02. Просмотров 1533. Ответов 31
Метки нет (Все метки)

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

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++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

Считывание из файла - C++
Нужна помощь, уже не знаю, что делать. Проблема: Имеется функция для добавления хешированного логина и пароля в двоичный файл. ...

Считывание с файла - C++
ВСЕМ ПРИВЕТ!Я пишу программу смысл ее такой: создан файл key.txt(в этом файле написано 1234) при запуске программы она нам покажет если в...

Считывание с файла - C++
Помогите организовать считывание с файла для следующего задания: Нужно создать программу которая считывает с файла параметры...

Считывание с файла - C++
Здравствуйте. Нужна помощь в написании программы: Дана непустая последовательность слов разделенных пробельными символами, расположенных...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.08.2011, 13:55 #16
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
Да,оно!
Kastaneda,большое-большое-пребольшое спасибо!
так он же в омеге центавры 13 часов в имя прихватил
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:57  [ТС] #17
Нет,у меня на выводе правильно - "NGC 5139 omega Cen ".
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 14:00 #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
так он же в омеге центавры 13 часов в имя прихватил
Принцип формирования имен я понял так, как описал Forever в 7-ом посте.

Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
Нет,у меня на выводе правильно - "NGC 5139 omega Cen ".
А вот это уже странно
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 14:02  [ТС] #19
bash-4.2$ ./a.out
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
NGC 5694
IC 4499
NGC 5824
Pal 5
NGC 5897
NGC 5904 M 5
NGC 5927
NGC 5946
BH 176
NGC 5986
Lynga 7 BH184
Pal 14 AvdB
NGC 6093 M 80
NGC 6121 M 4
NGC 6101
NGC 6144
NGC 6139
Terzan 3
NGC 6171 M 107
1636-283 ESO452-SC11
NGC 6205 M 13
NGC 6229
NGC 6218 M 12
FSR 1735
NGC 6235
NGC 6254 M 10
NGC 6256
Pal 15
NGC 6266 M 62
NGC 6273 M 19
NGC 6284
NGC 6287
NGC 6293
NGC 6304
NGC 6316
NGC 6341 M 92
NGC 6325
NGC 6333 M 9
NGC 6342
NGC 6356
NGC 6355
NGC 6352
IC 1257
Terzan 2 HP 3
NGC 6366
Terzan 4 HP 4
HP 1 BH 229
NGC 6362
Liller 1
NGC 6380 Ton 1
Terzan 1 HP 2
Ton 2 Pismis 26
NGC 6388
NGC 6402 M 14
NGC 6401
NGC 6397
Pal 6
NGC 6426
Djorg 1
Terzan 5 Terzan 11
NGC 6440
NGC 6441
Terzan 6 HP 5
NGC 6453
UKS 1
NGC 6496
Terzan 9
Djorg 2 ESO456-SC38
NGC 6517
Terzan 10
NGC 6522
NGC 6535
NGC 6528
NGC 6539
NGC 6540 Djorg 3
NGC 6544
NGC 6541
2MS-GC01 2MASS-GC01
ESO-SC06 ESO280-SC06
NGC 6553
2MS-GC02 2MASS-GC02
NGC 6558
IC 1276 Pal 7
Terzan 12
NGC 6569
BH 261 AL 3
GLIMPSE02
NGC 6584
NGC 6624
NGC 6626 M 28
NGC 6638
NGC 6637 M 69
NGC 6642
NGC 6652
NGC 6656 M 22
Pal 8
NGC 6681 M 70
GLIMPSE01
NGC 6712
NGC 6715 M 54
NGC 6717 Pal 9
NGC 6723
NGC 6749
NGC 6752
NGC 6760
NGC 6779 M 56
Terzan 7
Pal 10
Arp 2
NGC 6809 M 55
Terzan 8
Pal 11
NGC 6838 M 71
NGC 6864 M 75
NGC 6934
NGC 6981 M 72
NGC 7006
NGC 7078 M 15
NGC 7089 M 2
NGC 7099 M 30
Pal 12
Pal 13
NGC 7492
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.08.2011, 14:04 #20
lapo4ka1368, строчку описывающую Eridanus можно в студию?
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 14:06  [ТС] #21
Вот,смотрите тут http://www.physics.mcmaster.ca/~harris/mwgc.dat
Мой файл-это первая таблица(Слава Богу,хоть ее вырезать разрешили =) ):
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 14:06 #22
Значит входной файл выглядет не так, как в первом посте, там похоже пробелов больше, поэтому правильно получается)
Может тогда есть смысл переписать алгоритм, я чувствую его можно значительно упростить, если б увидеть как именно выглядет файл, с точным кол-вом пробелов.
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.08.2011, 14:08 #23
Ну, разумеется, как я и предполагал, сначала идут имена, а потом ровно 13 параметров.
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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 14:09 #25
Тогда можно проще - читать первые N символов и отсекать лишние пробелы.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.08.2011, 14:15 #26
Аха. Вариант в посте 11.)
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
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
4821 / 3241 / 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 - это число какое-то, а не часть имени ?

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

нужно привести данные к удобному виду, в котором видно, где имя, а где не имя
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2011, 04:36
Привет! Вот еще темы с ответами:

Считывание из файла - C++
#include &lt;iostream&gt; #include &lt;time&gt; #include &lt;fstream&gt; using namespace std; int linear_search(int array, int size, int...

Считывание из файла - C++
Ребят,подскажите пожалуйста: Нужно считать из файлов значения. Я создал два класса,в которых есть переменные,в которые будут считываться...

считывание из файла c++ - C++
считываю из файла, но он не читает все строки, почему не знаю. Может кто-нибудь помочь? ifstream file(&quot;1.txt&quot;,ios::in); char...

Считывание из файла - C++
Всем привет! Есть вот такая проблема: при считывании данных из файла в объект ниоткуда берутся лишние данные. В чем может быть проблема?...


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

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

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