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

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

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

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

08.08.2011, 13:02. Просмотров 1534. Ответов 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++
Здравствуйте. Нужна помощь в написании программы: Дана непустая последовательность слов разделенных пробельными символами, расположенных...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
08.08.2011, 13:05 #2
а известно сколько строчек?
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
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
08.08.2011, 13:17 #4
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
"Rup 106 " в первой строке,или "NGC 4590 M 68" во второй
Вряд ли это возможно, т.к. неизвестно количество слов в имени.
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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.08.2011, 13:36 #7
Судя по заданию имя есть либо:

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

Так?
Di1990
0 / 0 / 0
Регистрация: 23.05.2011
Сообщений: 4
08.08.2011, 13:39 #8
******
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:41  [ТС] #9
ForEveR,к сожалению не всегда так,например есть такое имя(6 строка):
"NGC 5139 omega Cen",тут не подойдет "если после номера идет слово, то присоединяем к имени слово + номер и смотрим далее"
Сформулировать совсем точно можно так:
первые 26 симоволов строки будут сожержать только имя и пробелы
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
08.08.2011, 13:43 #12
Цитата Сообщение от lapo4ka1368 Посмотреть сообщение
к сожалению не всегда так,например есть такое имя(6 строка):
"NGC 5139 omega Cen",тут не подойдет "если после номера идет слово, то присоединяем к имени слово + номер и смотрим далее"
Не увидел.
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:50  [ТС] #13
Да,оно!
Kastaneda,большое-большое-пребольшое спасибо!
grizlik78
Эксперт С++
1908 / 1440 / 111
Регистрация: 29.05.2011
Сообщений: 2,996
08.08.2011, 13:50 #14
Похоже, что после имени, судя по примеру, идёт всегда ровно 13 чисел. Но лучше бы ТС уточнил в какой астрономической программе используется этот формат.
Кстати, NGC 4590 M 68 это не одно имя, а целых 2
lapo4ka1368
0 / 0 / 0
Регистрация: 08.08.2011
Сообщений: 11
08.08.2011, 13:52  [ТС] #15
grizlik78
Да,NGC 4590 M 68 это 2 имени одного шарового скопления.
А вообще это выдержка из каталога шаровых скоплений Харриса 2010 года.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2011, 13:52
Привет! Вот еще темы с ответами:

Считывание из файла - 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
Объявления
08.08.2011, 13:52
Ответ Создать тему
Опции темы

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