Форум программистов, компьютерный форум 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++ Считывание из файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
genius5
 Аватар для genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
08.08.2011, 13:05     Считывание из файла #2
а известно сколько строчек?
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:13  [ТС]     Считывание из файла #3
Всего в файле 157 строк.

Добавлено через 7 минут
На самом деле наверное нужно что-то типа "считать первые 26 символов"-это будет имя( пусть даже для первой строки результат будет выглядеть так "Rup 106 + сколько-то пробелов". )
В sscanf такое есть,%Ns-считывает первые N символов строки.
А в fscanf нету(по-крайней мере я не нашла) =(
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.08.2011, 13:17     Считывание из файла #4
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
"Rup 106 " в первой строке,или "NGC 4590 M 68" во второй
Вряд ли это возможно, т.к. неизвестно количество слов в имени.
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:22  [ТС]     Считывание из файла #5
А если посимвольно?Там больше 26 символов не будет,т.е. можно считать их,а потом остальное.
Это возможно,и если да,то как?
Я уже написала выше,у sscanf такая штука есть:%Ns
У fscanf(ну или чего-нибудь,что считывает именно из файла) я не нашла.
IrineK
Заблокирован
08.08.2011, 13:34     Считывание из файла #6
Сформулируйте четко: ЧТО есть имя.
Тогда будет понятно, КАК его искать
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.08.2011, 13:36     Считывание из файла #7
Судя по заданию имя есть либо:

Слово + номер, если после номера идут другие номера, а не буква/слово - имя есть слово + номер.
Слово + номер + слово + ... , если после номера идет слово, то присоединяем к имени слово + номер и смотрим далее, если после номера - слово - повторяем пункт 1, если нет - заканчиваем.

Так?
Di1990
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 4
08.08.2011, 13:39     Считывание из файла #8
******
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:41  [ТС]     Считывание из файла #9
ForEveR,к сожалению не всегда так,например есть такое имя(6 строка):
"NGC 5139 omega Cen",тут не подойдет "если после номера идет слово, то присоединяем к имени слово + номер и смотрим далее"
Сформулировать совсем точно можно так:
первые 26 симоволов строки будут сожержать только имя и пробелы
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 13:43     Считывание из файла #10
Если входной файл будет иметь именно такой формат, то вот:
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<iostream>
#include<fstream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
 
int main(){
    const std::string digits="0123456789.-+ ";
    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)){
        size_t pos=str.find_last_not_of(digits)+2;
        if(pos!=std::string::npos){
            pos=str.find(' ',pos);
            if(pos!=std::string::npos)
                names.push_back(str.substr(0,pos));
        }
    }
    std::copy(names.begin(),names.end(),std::ostream_iterator<std::string>(std::cout,"\n"));
    return 0;
}
file.txt
Код
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
NGC 4833
NGC 5024 M 53
NGC 5053
NGC 5139 omega Cen 13
NGC 5272 M 3
Оно?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
08.08.2011, 13:43     Считывание из файла #11
lapo4ka1368, Ну тогда вообще без проблем. Считываем первые 26 символов - отсекаем пробелы - получаем имя.

C++
1
2
3
std::getline(ifs, string);
std::string str = string.substr(0, 26);
name = boost::trim_rigth_copy(str);
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 13:43     Считывание из файла #12
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
к сожалению не всегда так,например есть такое имя(6 строка):
"NGC 5139 omega Cen",тут не подойдет "если после номера идет слово, то присоединяем к имени слово + номер и смотрим далее"
Не увидел.
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:50  [ТС]     Считывание из файла #13
Да,оно!
Kastaneda,большое-большое-пребольшое спасибо!
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
08.08.2011, 13:50     Считывание из файла #14
Похоже, что после имени, судя по примеру, идёт всегда ровно 13 чисел. Но лучше бы ТС уточнил в какой астрономической программе используется этот формат.
Кстати, NGC 4590 M 68 это не одно имя, а целых 2
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:52  [ТС]     Считывание из файла #15
grizlik78
Да,NGC 4590 M 68 это 2 имени одного шарового скопления.
А вообще это выдержка из каталога шаровых скоплений Харриса 2010 года.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
08.08.2011, 13:55     Считывание из файла #16
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
Да,оно!
Kastaneda,большое-большое-пребольшое спасибо!
так он же в омеге центавры 13 часов в имя прихватил
lapo4ka1368
 Аватар для lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:57  [ТС]     Считывание из файла #17
Нет,у меня на выводе правильно - "NGC 5139 omega Cen ".
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.08.2011, 14:00     Считывание из файла #18
Цитата Сообщение от grizlik78 Посмотреть сообщение
так он же в омеге центавры 13 часов в имя прихватил
Принцип формирования имен я понял так, как описал Forever в 7-ом посте.

Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
Нет,у меня на выводе правильно - "NGC 5139 omega Cen ".
А вот это уже странно
lapo4ka1368
 Аватар для 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 14:04     Считывание из файла
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
08.08.2011, 14:04     Считывание из файла #20
lapo4ka1368, строчку описывающую Eridanus можно в студию?
Yandex
Объявления
08.08.2011, 14:04     Считывание из файла
Ответ Создать тему
Опции темы

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