-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFileIO.m
More file actions
147 lines (128 loc) · 4.62 KB
/
FileIO.m
File metadata and controls
147 lines (128 loc) · 4.62 KB
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
//
// FileIO.m
// MergeLocalizedString
//
// Created by SmallTask on 13-8-23.
// Copyright (c) 2013年 cmf. All rights reserved.
//
#import "FileIO.h"
@implementation FileIO
-(NSMutableDictionary *) readFile:(NSString *)filename;
{
NSError *error = nil;
NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:5000];
NSString *txt = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error];
if(error)
NSLog(@"error:%@",[error localizedDescription]);
else{
// NSLog(@"%@",txt);
}
NSArray *txtArray = [txt componentsSeparatedByString:@"\n"];
BOOL IsCommentBegin = NO;
BOOL IsCommentEnd = NO;
for(int i=0;i<txtArray.count;i++)
{
NSString *lineStr = [[txtArray objectAtIndex:i] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
// NSLog(@"%@",lineStr);
if(lineStr.length>=2)
{
if(IsCommentEnd)
{
//恢复
IsCommentBegin = NO;
IsCommentEnd = NO;
}
NSString *f2 = [lineStr substringToIndex:2];
NSRange rangeE = NSMakeRange(lineStr.length-2, 2);
NSString *e2 = [lineStr substringWithRange:rangeE];
if([f2 isEqualToString:@"/*"]){
//注释开始,跳过该行
IsCommentBegin = YES;
if([e2 isEqualToString:@"*/"])
{
IsCommentBegin = NO;
IsCommentEnd = NO;
}
continue;
}
if([f2 isEqualToString:@"//"])
{
//注释,跳过该行
continue;
}
if([e2 isEqualToString:@"*/"])
{
//注释结束,跳过该行
IsCommentEnd = YES;
continue;
}
if(IsCommentBegin)
continue;
// NSLog(@"%@",lineStr);
NSMutableArray *array = [self GetKeyValueFromLineStr:lineStr];
[dict setValue:[array objectAtIndex:1] forKey:[array objectAtIndex:0]];
}
}
return dict;
}
-(NSMutableArray*)GetKeyValueFromLineStr:(NSString*)lineStr;
{
BOOL isKeyBegin = NO;
BOOL isKeyEnd = NO;
BOOL isValueBegin = NO;
BOOL isValueEnd = NO;
NSMutableArray *outArray = [NSMutableArray arrayWithCapacity:2];
NSMutableString *keystr = [NSMutableString stringWithCapacity:50];
NSMutableString *valuestr = [NSMutableString stringWithCapacity:50];
for(int i=0;i<lineStr.length;i++)
{
NSRange range = NSMakeRange(i,1);
NSString *word = [lineStr substringWithRange:range];
if(isKeyBegin==NO && [word isEqualToString:@"\""])
{
isKeyBegin = YES;
continue;
}else if(isKeyEnd==NO && [word isEqualToString:@"\\"])
{
//遇到转义符,后面紧接着的字符也要当成正文;
[keystr appendString:word];
i++;
range = NSMakeRange(i,1);
word = [lineStr substringWithRange:range];
[keystr appendString:word];
}else if(isKeyBegin && [word isEqualToString:@"\""] && isKeyEnd==NO)
{
isKeyEnd = YES;
//keystr里的内容就是 key 的内容
// NSLog(@"%@",keystr);
[outArray addObject:keystr];
continue;
}else if(isKeyEnd==NO)
{
[keystr appendString:word];
}else if(isKeyEnd && isValueBegin==NO && ([word isEqualToString:@"="]||[word isEqualToString:@" "]))
{
continue;
}else if(isKeyEnd && isValueBegin==NO && [word isEqualToString:@"\""]){
isValueBegin = YES;
continue;
}else if(isKeyEnd && isValueEnd==NO && [word isEqualToString:@"\\"]){
//遇到转义符,后面紧接着的字符也要当成正文;
[valuestr appendString:word];
i++;
range = NSMakeRange(i,1);
word = [lineStr substringWithRange:range];
[valuestr appendString:word];
}else if(isKeyEnd && isValueBegin && isValueEnd==NO && [word isEqualToString:@"\""]){
isValueEnd = YES;
//valuestr里的内容就是 Value 里的内容
// NSLog(@"-->%@",valuestr);
[outArray addObject:valuestr];
break;
}else if(isValueBegin && isValueEnd==NO){
[valuestr appendString:word];
}
}
return outArray;
}
@end