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

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

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

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

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

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

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

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

Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый файл - C++
Дан текстовый файл, содержащий целые числа. Определить в каждой четной строке максимальное число и записать результаты в новый текстовый...

Текстовый файл UTF-8 сохранить как текстовый файл ANSI - C++
Есть текстовый файл в UTF-8 Нужно рядом сохранить его же, но в ANSI Как сделать это средствами c++? Среда Visual Studio 2010 ...

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

Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла - C++
Дано число k (&lt; 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного...

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

9
alexeyNET
7 / 7 / 2
Регистрация: 18.06.2014
Сообщений: 43
28.07.2014, 01:37 #2
получите строку из файла (с помощью функции fgets(); );
проверьте, есть ли там строка id: (функция strstr(););
если есть разбейте строку на слова с помощью функции strtok, указав в разделители (:,);
возьмите второе слово из получившегося.
Вот и все)
1
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 692
Записей в блоге: 1
28.07.2014, 05:34 #3
alexeyNET, это какой-то не C++-way. Я бы STL использовал. Медленнее, зато код проще.
0
NeonLost
Пес войны
75 / 86 / 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: ", ",");
2
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
28.07.2014, 09:52 #5
idaspin, Распарсить файл в вектор адекватных структур. Найти нужные элементы.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
28.07.2014, 09:57 #6
Похоже на json; если да, то просто нужен парсер json, и никакой возни.
0
idaspin
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 45
28.07.2014, 10:03  [ТС] #7
Ага всего-то
Еще осталось понять о чем вы говорите!

шутка, может не рационально но код написал уже(см тему выше)
компилятора нет... как появится и если у меня не получится, сделаю по вашим советам
0
krv
73 / 53 / 11
Регистрация: 10.07.2014
Сообщений: 328
28.07.2014, 11:14 #8
Использование регулярных выражений не рассматривается?
К примеру TRegExpr от Сорокина
Если да - могу прикинуть код по данному заданию.
0
Mr.X
Эксперт С++
3050 / 1695 / 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
}
2
idaspin
0 / 0 / 0
Регистрация: 27.11.2013
Сообщений: 45
28.07.2014, 11:51  [ТС] #10
Прост круто
0
28.07.2014, 11:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 11:51
Привет! Вот еще темы с ответами:

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

Файл: Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы... - C++
Создать текстовый файл. Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы, а нечетные с...

Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым - C++
Добрый день, помогите пожалуйста сделать вот такую программу. Даны натуральное k , символьный файл f и текстовый файл f1 . Файл f...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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