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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
aidalexeyaid
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 42
#1

Парсинг текста - C++

05.08.2011, 18:11. Просмотров 2617. Ответов 4
Метки нет (Все метки)

Снова здравствуйте вообщем делаю Post запрос на который приходит ответ вида
Код
{"timer1":0,"timer2":0,"timer3":8153,"timer4":22569,"timer5":36983}
есть кнопка и после её нажатия нужно вытащить все 5 цифр после двоеточий и засунуть в лейблы

тоесть должно в конце выйти так

Label1->Caption = "0";
Label2->Caption = "0";
Label3->Caption = "8153";
Label4->Caption = "22569";
Label5->Caption = "36983";

Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2011, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг текста (C++):

Проверьте правильность текста программы проверки текста заклинаний. - C++
на вход программе подается текст заклинания, состоящего не более, чем из 200 символов, заканчивающийся точкой (другие точки во входных...

как сделать вывод текста, результата и продолжение текста - C++
#include <iostream> using namespace std; int main() { int win; cout<<"Введите цифру\n"; cin >> win; ...

Заданы два текста. Определить, можно ли получить первый текст перестановкой слов второго текста. - C++
Заданы два текста. Определить, можно ли получить первый текст перестановкой слов второго текста.

Выводит адрес текста, вместо самого текста - C++
#include <iostream> #include <fstream> #include <cstring> #include <conio.h> using namespace std; int vvodfaila(0); char...

Форматирование текста и изменение цвета текста в консоли - C++
Подскажите пожалуйста, как форматировать текст в консоли, а также как менять его цвет

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

4
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.08.2011, 18:23 #2
вот вариант.
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
#include <iostream>
using namespace std;
 
// вот парсер
const char* str_num(char* _out, const char* str) {
   const char* p = strchr(str, ':');
   if(! p)
        return NULL;
   *p++;
   while( *p && *p != ',' && *p != '"')
      *_out++ = *p++;
   *_out = '\0';
   return p;
}
 
 
int main(void) {
 
   char str[] = "{\"timer1\":0,\"timer2\":0,\"timer3\":8153,\"timer4\":22569,\"timer5\":36983\"}";
 
   const char* first = str;
   char buf[16];
 
   while((first = str_num(buf, first)) != NULL)
        cout << buf << endl;
 
   cin.get();
   return 0;
}
1
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
05.08.2011, 18:49 #3
C
1
2
3
4
5
6
7
8
9
10
11
    char str[]="{\"timer1\":0,\"timer2\":0,\"timer3\":8153,\"timer4\":22569,\"timer5\":36983\"}";
 
    int tmp=0;
    char *p;
 
    p =strchr(str,':');
    while ( p ) {
        sscanf(p+1,"%d",&tmp);
        printf("%d\n",tmp);
        p = strchr(p+1,':');
    }
в лейбл сам запихнёшь
1
nameless
Эксперт С++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
05.08.2011, 20:00 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
aidalexeyaid,

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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <boost/spirit/core.hpp>
#include <boost/spirit/actor/push_back_actor.hpp>
 
bool ParseNumbers(const std::string& str, std::vector <int> & vec)
{
   return boost::spirit::parse(str.c_str(),
      ( ( boost::spirit::lexeme_d['"' >> (*~boost::spirit::ch_p('"')) >> '"'] >> ":" >> boost::spirit::int_p[boost::spirit::push_back_a(vec)] ) % ',' ),
      boost::spirit::ch_p('{')
   ).full;
}
 
int main()
{
   std::string str = "{\"timer1\":0,\"timer2\":0,\"timer3\":8153,\"timer4\":22569,\"timer5\":36983,\"timer6\":738786}";
   std::vector <int> vec_numbers;
 
   ParseNumbers(str, vec_numbers);
 
   std::for_each(vec_numbers.begin(), vec_numbers.end(), [](int number) { 
      std::cout << number << std::endl;
   } );
 
   return 0;
}
5
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
05.08.2011, 20:25 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Раз уж предложили вариант со спиритом, тогда и я чтоль внесу свои пять копеек, на spirit V2:

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
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
#include <boost/spirit/include/qi.hpp>
 
bool ParseNumbers(std::string & str, std::vector<int> & nums)
    {
    std::string::iterator begin = str.begin(), end = str.end();
 
    namespace qi = boost::spirit::qi;
    return qi::parse(begin, end,
                (
                '{' >>
                    (
                    qi::omit[*(qi::char_ - ':')] >> ':'
                    >> qi::int_
                    ) % ','
                >> '}'
                ), nums
            ) && begin == end;
    }
 
int main()
    {
    std::string str 
        = "{\"timer1\":0,\"timer2\":0,\"timer3\":8153,\"timer4\":22569,\"timer5\":36983,\"timer6\":738786}";
    std::vector<int> nums;
 
    ParseNumbers(str, nums);
 
    std::for_each(nums.begin(), nums.end(), [](int n)
        {
        std::cout << n << ' ';
        }
    );
    }
6
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2011, 20:25
Привет! Вот еще темы с ответами:

Парсинг - C++
Привет всем вообщем нужно удачно спарсить данные (gold, money, fuel, lvl, model) вид ответа хоть и xml но данные к сожалению находятся не в...

Парсинг - C++
Привет всем ) Есть небольшая проблема например имеется переменная String t = '&lt;img src=&quot;http://site.ru/u3124123/d_hwre2.jpg&quot;/&gt;...

Парсинг - C++
Всем доброго времени суток. Только начал изучать c++ и нужна помощь. Есть код, нужно сделать парсинг. Не понимаю , что это и как его...

Рекурсивный парсинг - C++
Есть формат на базе XML. 1. Файл начинается с &lt;?xml version=&quot;...&quot; encoding=&quot;ANSI...&quot;?&gt; 2. Поддерживается единственная кодировка только...


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

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

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