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

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

Войти
Регистрация
Восстановить пароль
 
idaspin
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 45
#1

Распарсить текстовый файл - C++

28.07.2014, 01:32. Просмотров 501. Ответов 9
Метки нет (Все метки)

Программно я могу получить список следующего вида:

Код
..., {
id: 7,
login: 'idaspin',
password: '638kjg1kjghd8xzckj2kj3hdhg876smnnm4jd'
}, {
id: 8,
login: 'marchall_95',
password: '8sd920gxzc3dasdada6947opkjgo92cv637',
status: 'vip'
},...
как я через c++ (из файла к примеру) могу вытащить все id'шники VIP пользователей?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 01:32     Распарсить текстовый файл
Посмотрите здесь:

Распарсить текстовый файл - C++
Здравствуйте. Есть следующий файл, в который таким образом записана информация (приложение). Он состоит из множества блоков. В каждом блоке...

Распарсить тексовый файл и вывести неодходимые значения в другой файл - C++
Добрый день. Мне нужно распарсить тексовый файл и вывести неодходимые значения в другой файл. 1ый файл вида: ...

Распарсить xlsx-файл - C++
Добрый день. Мне нужна ваша помощь Помогите мне написать программу. Суть программы вот в чём. Нужно написать консольное приложение...

Распарсить файл 3Dmax - C++
Всем привет. В 3DMax есть возможность сохранять модели в формате obj это тоже самое что и txt. Вот пример элементарного объекта с...

Как распарсить djvu файл - C++
Хочу сделать просмотрщик djvu файлов под macOS с использованием Qt. Ткните, в какую сторону копать.

Можно ли распарсить XLS файл? - C++
Всем добрый день хотел задать вопрос, можно ли распарсить XLS файл средствами C++? Заранее спасибо.

Как правильно распарсить xml-файл? - C++
Не могу понять, какие нужно вставить регулярные выражения, все время происходит сбой. #include "stdafx.h" #include <regex> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexeyNET
7 / 7 / 2
Регистрация: 18.06.2014
Сообщений: 43
28.07.2014, 01:37     Распарсить текстовый файл #2
получите строку из файла (с помощью функции fgets(); );
проверьте, есть ли там строка id: (функция strstr(););
если есть разбейте строку на слова с помощью функции strtok, указав в разделители (:,);
возьмите второе слово из получившегося.
Вот и все)
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
28.07.2014, 05:34     Распарсить текстовый файл #3
alexeyNET, это какой-то не C++-way. Я бы STL использовал. Медленнее, зато код проще.
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
28.07.2014, 08:01     Распарсить текстовый файл #4
я бы так сделал...)
C++
1
2
3
4
5
6
7
8
string GetBetween(string target, string left, string right)
{
    size_t begin = target.find(left);
    size_t end = target.find(right);
    if(begin==string::npos || end==string::npos) return "";
    begin += left.size();
    return target.substr(begin, end - begin);
}
C++
1
GetBetween(targetStr, "id: ", ",");
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.07.2014, 09:52     Распарсить текстовый файл #5
idaspin, Распарсить файл в вектор адекватных структур. Найти нужные элементы.
gray_fox
What a waste!
1446 / 1175 / 61
Регистрация: 21.04.2012
Сообщений: 2,463
Завершенные тесты: 3
28.07.2014, 09:57     Распарсить текстовый файл #6
Похоже на json; если да, то просто нужен парсер json, и никакой возни.
idaspin
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 45
28.07.2014, 10:03  [ТС]     Распарсить текстовый файл #7
Ага всего-то
Еще осталось понять о чем вы говорите!

шутка, может не рационально но код написал уже(см тему выше)
компилятора нет... как появится и если у меня не получится, сделаю по вашим советам
krv
72 / 52 / 11
Регистрация: 10.07.2014
Сообщений: 328
28.07.2014, 11:14     Распарсить текстовый файл #8
Использование регулярных выражений не рассматривается?
К примеру TRegExpr от Сорокина
Если да - могу прикинуть код по данному заданию.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
28.07.2014, 11:49     Распарсить текстовый файл #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/////////////////////////////////////////////////////////////////////////////////////////
//Программно я могу получить список следующего вида:
//..., 
//{
//id: 7,
//login: 'idaspin',
//password: '638kjg1kjghd8xzckj2kj3hdhg876smnnm4jd'
//}, 
//{
//id: 8,
//login: 'marchall_95',
//password: '8sd920gxzc3dasdada6947opkjgo92cv637',
//status: 'vip'
//},...
//
//как я через c++ (из файла к примеру) могу вытащить все id'шники VIP пользователей?
/////////////////////////////////////////////////////////////////////////////////////////
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef T_str::size_type    T_pos;
/////////////////////////////////////////////////////////////////////////////////////////
char    const   LEFT_BRACE_SYMB                 =   '{';
char    const   RIGHT_BRACE_SYMB                =   '}';
char    const   APOSTROF_SYMB                   =   '\'';
char    const   SPACE_SYMB                      =   ' ';
char    const   COMMA_SYMB                      =   ',';
char    const   TAB_SYMB                        =   '\t';
T_str   const   COMMA_AND_SPACE_STR             =   T_str( 1, COMMA_SYMB ) + SPACE_SYMB;
T_str   const   VIP_WORD_IN_SINGLE_QUOTES       =   T_str( 1, APOSTROF_SYMB ) + "vip" + APOSTROF_SYMB;
T_str   const   ID_WORD_WITH_COLON_AND_SPACE    =   "id: ";
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_person
{
    //-----------------------------------------------------------------------------------
    int     ID_;
    T_str   login_;
    T_str   password_;
    bool    is_vip_status_;
    //-----------------------------------------------------------------------------------
    T_str   to_str()
    {
        std::ostringstream  sout;
 
        sout    <<  LEFT_BRACE_SYMB
                <<  ID_WORD_WITH_COLON_AND_SPACE        <<  ID_                             <<  COMMA_AND_SPACE_STR
                <<  "login: "       <<  APOSTROF_SYMB   <<  login_      <<  APOSTROF_SYMB   <<  COMMA_AND_SPACE_STR
                <<  "password: "    <<  APOSTROF_SYMB   <<  password_   <<  APOSTROF_SYMB;
 
        if( is_vip_status_ )
        {
            sout    <<  COMMA_AND_SPACE_STR
                    <<  "status: "
                    <<  VIP_WORD_IN_SINGLE_QUOTES;
        }
        
        sout    <<  RIGHT_BRACE_SYMB
                <<  std::endl;
 
        return  sout.str();
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
T_str   generate_and_get_rand_str()
{
    int     rand_str_len    =   rand() % 10 + 3;
    T_str   res_str;
 
    for( int  i = 0; i < rand_str_len; ++i )
    {
        res_str += 'a' + rand() % 26;
    }//for
 
    return  res_str;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_str   generate_and_get_person_str_with_id
    (
        int         id,
        bool    &   is_vip
    )
{
    T_person    person  =   {
                                id,
                                generate_and_get_rand_str(),
                                generate_and_get_rand_str(),
                                is_vip  =   rand() % 2 == 0
                            };
 
    return  person.to_str();
}
/////////////////////////////////////////////////////////////////////////////////////////
void    generate_person_list_and_write_to_file( T_str    const   &   filename )
{
    std::ofstream   ofile( filename );
 
    std::cout   <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  "Сгенерированы vip-персоны с ID:"
                <<  std::endl;
 
    for( int  i = 0; i < 7; ++i )
    {
        if( i > 0 )
        {
            ofile   <<  ", ";
        }
 
        bool    is_vip  =   false;
 
        ofile   <<  generate_and_get_person_str_with_id
                        (
                            i,
                            is_vip
                        );
 
        if( is_vip )
        {
            std::cout   <<  i
                        <<  TAB_SYMB;
        }
    }//for
}
/////////////////////////////////////////////////////////////////////////////////////////
void    print_id_of_vip_persons_found_in_file( T_str    const   &   filename )
{
    std::ifstream   ifile( filename );
    std::ostringstream  sout;
    sout    <<  ifile.rdbuf();
    T_str   file_str    =   sout.str();
 
 
    std::cout   <<  std::endl
                <<  std::endl
                <<  "Найдены в файле vip-персоны со следующими ID:"
                <<  std::endl;
 
    T_pos   right_pos   =   T_str::npos;
    T_pos   vip_pos     =   0;
 
    while   (
                (
                    vip_pos     =   file_str.rfind( VIP_WORD_IN_SINGLE_QUOTES, right_pos )
                )
                != T_str::npos
            )
    {
        T_pos   id_word_pos     =   file_str.rfind( ID_WORD_WITH_COLON_AND_SPACE, vip_pos );
        right_pos               =   id_word_pos;
        T_pos   num_begin_pos   =   file_str.find( SPACE_SYMB, id_word_pos      );
        T_pos   num_end_pos     =   file_str.find( COMMA_SYMB, num_begin_pos    );
 
        std::istringstream  ssin
            (
                file_str.substr( num_begin_pos, num_end_pos - num_begin_pos )
            );
 
        int     id  =   0;
        ssin    >>  id;
        std::cout   <<  id
                    <<  TAB_SYMB;
    }//while
 
    std::cout   <<  std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    srand(unsigned(time(0)));
    for(;;)
    {
        const   T_str   FILE_NAME   =   "list.txt";
        generate_person_list_and_write_to_file  ( FILE_NAME );
        print_id_of_vip_persons_found_in_file   ( FILE_NAME );
        system("pause");
    }//for
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 11:51     Распарсить текстовый файл
Еще ссылки по теме:

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

Распарсить файл для извлечения дат из текста - C++
Здравствуйте! Помогите, пожалуйста, написать программу. Дан текстовый файл input.txt, состоящий из большого числа строк(примерно 2000),...

Дан текстовый файл (файл для чтения во вложениях) с упрощённым каталогом выставки собак. - C++
ЗАДАНИЕ ПО ЭКЗАМЕНУ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ С++ (можно писать и на С. не запрещается) Всё по сабжу ниже. Дан текстовый файл...

Текстовый файл - C++
Разработайте программу, форматирующую текстовый файл в два столб- ца, аналогично газетным колонкам. В каждом столбце должно быть не ...

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


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

Или воспользуйтесь поиском по форуму:
idaspin
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 45
28.07.2014, 11:51  [ТС]     Распарсить текстовый файл #10
Прост круто
Yandex
Объявления
28.07.2014, 11:51     Распарсить текстовый файл
Ответ Создать тему
Опции темы

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