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

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

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

Парсинг - C++

07.08.2011, 22:17. Просмотров 1264. Ответов 3
Метки нет (Все метки)

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

XML
1
2
3
<init fuel_gifts="42901258,43261771,108608536,71020171,131709065,34245643,20195695,76560979" can_send_fuel="1">
    <user default_car="20472775" tank="0" races_lost="349" gold="10" money="60246" races_won="438" fuel_ts="1312486378" fuel_base="81" money_spent="219210" garage="4" was_robbed="True" exp="842" fuel="100" lvl="5" money_win="208250" bonus_claimed="False" id="52858776" races_level="397" races_passive="343">
        <car rating="0" wheelssize="0.85" turbocharger="2" color="16764160" neon="0" tires="1" roof="" scoopcolor="0" id="20472775" toningalpha="0.5" spoilercolor="-1" seatingrear="0" nitrooxide="1" toning="-1" exhaust="1" radiator="2" roofcolor="0" coilovers="1" user_id="52858776" wheels="sberhonda" spoiler="" intake="2" clutch="2" ecu="1" seatingfront="0" scoop="" wheelscolor="-1" ignition="1" model="evolution10">
вообще я новичек ))) но кое что настряпал своими неумелыми руками

(s это тот самый ответ от сервера в XML)

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
      int p = s.Pos("gold");
      s = s.Delete(1, p+5);
      p = s.Pos('="');
      int len = s.Pos('" ') - p;
      String num = s.SubString(p, len+2);
 
 
      if(num == "0'")
      {
          num = 0;
      }
 
          if(num == "1'")
      {
          num = 1;
      }
 
      if(num == "2'")
      {
          num = 2;
      }
 
      if(num == "3'")
      {
          num = 3;
      }
 
      if(num == "4'")
      {
          num = 4;
      }
 
      if(num == "5'")
      {
          num = 5;
      }
 
      if(num == "6'")
      {
          num = 6;
      }
 
      if(num == "7'")
      {
          num = 7;
      }
 
      if(num == "8'")
      {
          num = 8;
      }
 
      if(num == "9'")
      {
          num = 9;
      }
 
      Label10->Caption = "Золото : "+num;
 
      int p1 = s.Pos("money");
      s = s.Delete(1, p1+6);
      p1 = s.Pos('="');
      int len1 = s.Pos('" ') - p1;
      String num1 = s.SubString(p1, len1+5);
      Label11->Caption = "Деньги : "+num1;
 
      int p2 = s.Pos("fuel=");
      s = s.Delete(1, p2+5);
      p2 = s.Pos('="');
      int len2 = s.Pos('" ') - p2;
      String num2 = s.SubString(p2, len2+2);
      if(num2 == 10)
      {
          num2 = 100;
      }
      Label9->Caption = "Топливо : "+num2;
 
      int p3 = s.Pos("lvl");
      s = s.Delete(1, p3+4);
      p3 = s.Pos('="');
      int len3 = s.Pos('" ') - p3;
      String num3 = s.SubString(p3, len3+2);
      if(num3 == "1'")
      {
          num3 = 1;
      }
 
      if(num3 == "2'")
      {
          num3 = 2;
      }
 
      if(num3 == "3'")
      {
          num3 = 3;
      }
 
      if(num3 == "4'")
      {
          num3 = 4;
      }
 
      if(num3 == "5'")
      {
          num3 = 5;
      }
 
      if(num3 == "6'")
      {
          num3 = 6;
      }
 
      if(num3 == "7'")
      {
          num3 = 7;
      }
 
      if(num3 == "8'")
      {
          num3 = 8;
      }
 
      if(num3 == "9'")
      {
          num3 = 9;
      }
 
 
      Label12->Caption = "Уровень : "+num3;
 
 
      int p4 = s.Pos("model");
      s = s.Delete(1, p4+6);
      p4 = s.Pos('="');
      int len4 = s.Pos('" ') - p4;
      String num4 = s.SubString(p4, len4+11);
 
      Label8->Caption = "Авто : "+num4;

согласитесь это не ажур так как в лейблы попадают случайные кавычки и так далее и вообще данные могут быть разными помогите пожалуйста ))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 22:17     Парсинг
Посмотрите здесь:

C++ Парсинг списка
C++ Парсинг
Парсинг строки С++ C++
Парсинг файла C++
C++ Парсинг шрифтов
C++ Парсинг файла
Рекурсивный парсинг C++
C++ Парсинг html
Парсинг .xls C++
C++ Парсинг xml
C++ Парсинг строки
C++ Парсинг

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
08.08.2011, 00:31     Парсинг #2
Цитата Сообщение от aidalexeyaid Посмотреть сообщение
нужно удачно спарсить данные (gold, money, fuel, lvl, model)
Вот набросал парсинг вводишь значение которое нужно найти с учётом регистра букв.
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
#include <ctype.h>
#include <string.h>
#include <stdio.h>
 
 
// вот сама функция если ключ найден возвращает -1, если нет - 0
int  get_value(const char* str, const char* key, char* gval) {
  int  i;
  const char* ps = str;
  while(1) {
      ps = strstr(ps, key);
      if(! ps)
         return 0;
      i   = ~(str - ps);
      ps += strlen(key);
      if(*ps == '=' && isspace(*((str) + i))) {
          while( *ps++ != '"' && *ps);
          while( *ps   != '"' && *ps)
                *gval++ = *ps++;
          *gval = '\0';
          break;
      }
  }
  return 1;
}
 
 
 
int main(void) {
 
    char xml[] = "<data gold=\"100\" money=\"3450\" fuel=\"787\" lvl=\"75\" model=\"T-100\"></data>";
 
    char value[32];  // в этот буфер будет записано выходное значение
 
    //gold, money, fuel, lvl, model
    if(get_value(xml, "gold", value))
        printf("gold = %s\n", value);
 
    if(get_value(xml, "money", value))
        printf("money = %s\n", value);
 
    if(get_value(xml, "fuel", value))
        printf("fuel = %s\n", value);
 
    if(get_value(xml, "lvl", value))
        printf("lvl = %s\n", value);
 
    if(get_value(xml, "model", value))
        printf("model = %s\n", value);
 
 
    getchar();
    return 0;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
08.08.2011, 10:26     Парсинг #3
aidalexeyaid, А что мешает юзать либы специально сделанный для этого? libxml к примеру? arabica?
aidalexeyaid
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 42
08.08.2011, 11:15  [ТС]     Парсинг #4
ForEveR, спасибо за совет )
Yandex
Объявления
08.08.2011, 11:15     Парсинг
Ответ Создать тему
Опции темы

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