如图所示,给出一份".txt"文档,如何对文档的内容进行数据解析?

那么得到这样的文档后应该从哪里入手呢?
".txt"文档中存储的是一个长字符串,要对这个长字符串进行分割
再利用数组和字典的嵌套,最终生成我们想要的数据源数组
下面带大家画图分析一下:

根据上图分析:
最后数据解析玩最外层是应该是大数组,存储的是各个省及直辖市,例如北京,吉林省等;
省的数组里又有一个省的字典,其中字典包括省名,市数组两对键值对,例如:城市名:吉林,市数组:吉林市,长春市,通化市等
同理可以得到市的数组,市数组里又存储了若干含有市名,区数组两对键值对的字典,最后区数组里存储了若干个区
@property(nonatomic, retain)NSMutableArray *dataSource;
@property(nonatomic, retain)UITableView *tabelView;
//实现代码如下,解释都用注释标明
NSString *string = [NSString stringWithContentsOfFile:@"/Users/Desktop/UI_省市区数据解析练习/area.txt" encoding:NSUTF8StringEncoding error:nil];
//分割字符串: 使用:"\n"
NSArray *array = [string componentsSeparatedByString:@"\n"];
//初始化数据源数组 *非常重要*
self.dataSource = [NSMutableArray array];
//遍历array进行结构的划分
for (NSString *str in array) {
if (![str hasPrefix:@" "]) {
//创建省的字典(包含一个省的完整信息)
NSMutableDictionary *proDic = [NSMutableDictionary dictionary];
//设置这个省的名字键值对
[proDic setObject:str forKey:@"proName"];
//创建这个省所对应的城市数组
NSMutableArray *cityArray = [NSMutableArray array];
[proDic setObject:cityArray forKey:@"cityArray"];
//将省的字典添加到数据源数组中
[self.dataSource addObject:proDic];
}else if (![str hasPrefix:@" "]) {
//取出当前市应该存放的省字典
NSMutableDictionary *proDic = [self.dataSource lastObject];
//创建当前市的字典
NSMutableDictionary *cityDic = [NSMutableDictionary dictionary];
//设置这个市的键值对
[cityDic setObject:str forKey:@"cityName"];
//创建这个市所对应的区数组
NSMutableArray *zoneArray = [NSMutableArray array];
[cityDic setObject:zoneArray forKey:@"zoneArray"];
//取出当前城市字典应该在的数组
NSMutableArray *cityArray = [proDic objectForKey:@"cityArray"];
[cityArray addObject:cityDic];
}else {
//将区的名字添加到对应城市的区数组
//获取当前区在的省
NSMutableDictionary *proDic = [self.dataSource lastObject];
//获取当前区所在的城市数组
NSMutableArray *cityArray = [proDic objectForKey:@"cityArray"];
//获取当前区所在的城市字典
NSMutableDictionary *cityDic = [cityArray lastObject];
//把当前的名字加到对应的区数组中
NSMutableArray *zoneArray = [cityDic objectForKey:@"zoneArray"];
[zoneArray addObject:str];
}
}
NSLog(@"%@", self.dataSource);

解析完后数据源中没有数组首先要去看数组是否进行了初始化,很关键
这样我们的数据分析就完成了,最后可以创建多个TableView显示数据源数组,点击后刷新TableView实现以下效果:

网友评论