-
Notifications
You must be signed in to change notification settings - Fork 0
/
CityJson.cpp
125 lines (101 loc) · 2.34 KB
/
CityJson.cpp
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
#include "StdAfx.h"
#include "CityJson.h"
using namespace CityJson;
ChinaCity::ChinaCity(void)
{
Initjson();
}
ChinaCity::~ChinaCity(void)
{
UnInitjson();
}
void ChinaCity::Initjson()
{
CString m_strUserPath = AfxGetApp()->m_pszHelpFilePath;
m_strUserPath = m_strUserPath.Left(m_strUserPath.ReverseFind('\\')+1) + _T("Monitor\\");
CString strfile = m_strUserPath + _T("chinacity.json");
std::string filestr=readFileIntoString(strfile.GetBuffer(0));
CString cfilestr=filestr.c_str();
if(!oJsonCity.IsEmpty())oJsonCity.Clear();
oJsonCity.Parse(cfilestr.GetBuffer(0));
strfile.ReleaseBuffer();
cfilestr.ReleaseBuffer();
}
void ChinaCity::UnInitjson()
{
if(!oJsonCity.IsEmpty())oJsonCity.Clear();
}
void ChinaCity::GetProvinceFormCountry(std::vector<std::string> &province)
{
std::string strkey;
while(oJsonCity.GetKey(strkey))
{
province.push_back(strkey);
}
}
void ChinaCity::GetCityFormProvince(std::vector<std::string> &City,std::string Province)
{
std::string strkey;
while(oJsonCity[Province].GetKey(strkey))
{
City.push_back(strkey);
}
}
void ChinaCity::GetCountyFormCity(std::vector<std::string> &County,std::string City,std::string Province)
{
std::string strkey;
int arrysize=oJsonCity[Province][City].GetArraySize();
for (int i=0;i<arrysize;i++)
{
oJsonCity[Province][City].Get(i,strkey);
County.push_back(strkey);
}
}
int ChinaCity::GetProvinceIndex(std::string Province)
{
int index=0;
std::string strkey;
while(oJsonCity.GetKey(strkey))
{
if (strkey.find(Province)!=std::string::npos)
{
//使用while循环是因为GetKey需要取完这个层次的所有key 里面的list才会重新置为第一个键,
//打断需要调用ResetTraversing()重置遍历
oJsonCity.ResetTraversing();
break;
}
index++;
}
return index;
}
int ChinaCity::GetCityIndex(std::string City,std::string Province)
{
int index=0;
std::string strkey;
while(oJsonCity[Province].GetKey(strkey))
{
if (strkey.find(City)!=std::string::npos)
{
oJsonCity.ResetTraversing();
break;
}
index++;
}
return index;
}
int ChinaCity::GetCountyIndex(std::string County,std::string City,std::string Province)
{
int index=0;
std::string strkey;
int arrysize=oJsonCity[Province][City].GetArraySize();
for (int i=0;i<arrysize;i++)
{
oJsonCity[Province][City].Get(i,strkey);
if (strkey.find(County)!=std::string::npos)
{
break;
}
index++;
}
return index;
}