如何从单个文本文件中提取不同语言的日期?
How to extract date in different language from single text file?
我有一个文本文件,其中包含可通过 "Added on" 区分的信息块。每个有意义的字符串主体由 ########
分隔(后来我使用 Core Data 将它们保存到磁盘)。
我将它们保存到 NSString 文件的临时 NSArray 中,如下所示:
NSURL *url = [self urlOfResource:@"List" withExrension:@"txt"];
NSError *error = error;
NSString *originalContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error) NSLog(@"ERROR READING CONTENT OF FILE: %@", error);
// separeting string and saving it to NSArray
NSArray *seperateStringBody = [originalContent componentsSeparatedByString:@"########"];
现在使用for循环,我根据添加日期(属于同一文本文件中的每个离散文本正文)分离相关内容
for(NSString *body in seperateStringBody){
//I am showing only relevant code here
NSRange range = [removedNewLine rangeOfString:@"Added on "];
NSUInteger startRange = range.location+range.length;
NSString *dateString = [removedNewLine substringWithRange:NSMakeRange(startRange, removedNewLine.length-startRange)];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"];
NSDate *addedDate = [formatter dateFromString:dateString];
}
问题是文本文件包含超过 6 种语言。即:
English: Added on Friday, 25 December 2015 20:12:36
Russian: Добавлено: суббота, 26 декабря 2015 г. в 0:16:45
German: Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51
Japanese: 作成日: 2015年12月26日土曜日 11:32:45
Portuguese: Adicionado: sábado, 26 de dezembro de 2015 11:39:53
如您所见,使用 NSRange
提取日期字符串的硬编码方式并不是很有用。我只能考虑使用 "switch" 语句,其中的大小写等于文件中的语言数量。
有什么方便的方法吗?
编辑:1
当我使用 NSDateDetector 解析 NSDate 时。以下是结果:
Japanese: Original String: 作成日: 2015年12月26日土曜日 11:32:45
After Parsing: Values: {46,
8}{2015-12-26 18:02:45 +0000} 2015-12-26 18:19:44.538
WordsWorth[872:32957] stringDateFromDetector: 11:32:45
Russian: Original String: Добавлено: суббота, 26 декабря 2015 г. в
0:16:37 After Parsing: Values: {96, 7}{2015-12-25 18:46:37 +0000} 2015-12-26
18:19:44.054 WordsWorth[872:32957] stringDateFromDetector: 0:16:37
German: Original String:Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51
After Parsing:{65,
38}{2015-12-26 05:32:51 +0000} 2015-12-26 18:19:44.218
WordsWorth[872:32957] stringDateFromDetector: am Samstag, 26.
Dezember 2015 11:02:51
使用 NSDataDetector
:
let string = "English: Added on Friday, 25 December 2015 20:12:36 ---- 作成日: 2015年12月26日土曜日 11:32:45"
let types: NSTextCheckingType = [.Date]
let detector = try? NSDataDetector(types: types.rawValue)
detector?.enumerateMatchesInString(string, options: [], range: NSMakeRange(0, (string as NSString).length)) { (result, flags, _) in
print(result!.date!)
}
以上代码打印并匹配
2015-12-25 19:12:36 +0000
2015-12-26 10:32:45 +0000
这正是您想要和需要的。
注意打印语句 - 过度强制展开
下面是一个截图,展示了不同日期的解析:
我有一个文本文件,其中包含可通过 "Added on" 区分的信息块。每个有意义的字符串主体由 ########
分隔(后来我使用 Core Data 将它们保存到磁盘)。
我将它们保存到 NSString 文件的临时 NSArray 中,如下所示:
NSURL *url = [self urlOfResource:@"List" withExrension:@"txt"];
NSError *error = error;
NSString *originalContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error) NSLog(@"ERROR READING CONTENT OF FILE: %@", error);
// separeting string and saving it to NSArray
NSArray *seperateStringBody = [originalContent componentsSeparatedByString:@"########"];
现在使用for循环,我根据添加日期(属于同一文本文件中的每个离散文本正文)分离相关内容
for(NSString *body in seperateStringBody){
//I am showing only relevant code here
NSRange range = [removedNewLine rangeOfString:@"Added on "];
NSUInteger startRange = range.location+range.length;
NSString *dateString = [removedNewLine substringWithRange:NSMakeRange(startRange, removedNewLine.length-startRange)];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"];
NSDate *addedDate = [formatter dateFromString:dateString];
}
问题是文本文件包含超过 6 种语言。即:
English: Added on Friday, 25 December 2015 20:12:36
Russian: Добавлено: суббота, 26 декабря 2015 г. в 0:16:45
German: Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51
Japanese: 作成日: 2015年12月26日土曜日 11:32:45
Portuguese: Adicionado: sábado, 26 de dezembro de 2015 11:39:53
如您所见,使用 NSRange
提取日期字符串的硬编码方式并不是很有用。我只能考虑使用 "switch" 语句,其中的大小写等于文件中的语言数量。
有什么方便的方法吗?
编辑:1
当我使用 NSDateDetector 解析 NSDate 时。以下是结果:
Japanese: Original String: 作成日: 2015年12月26日土曜日 11:32:45 After Parsing: Values: {46, 8}{2015-12-26 18:02:45 +0000} 2015-12-26 18:19:44.538 WordsWorth[872:32957] stringDateFromDetector: 11:32:45
Russian: Original String: Добавлено: суббота, 26 декабря 2015 г. в 0:16:37 After Parsing: Values: {96, 7}{2015-12-25 18:46:37 +0000} 2015-12-26 18:19:44.054 WordsWorth[872:32957] stringDateFromDetector: 0:16:37
German: Original String:Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51 After Parsing:{65, 38}{2015-12-26 05:32:51 +0000} 2015-12-26 18:19:44.218 WordsWorth[872:32957] stringDateFromDetector: am Samstag, 26. Dezember 2015 11:02:51
使用 NSDataDetector
:
let string = "English: Added on Friday, 25 December 2015 20:12:36 ---- 作成日: 2015年12月26日土曜日 11:32:45"
let types: NSTextCheckingType = [.Date]
let detector = try? NSDataDetector(types: types.rawValue)
detector?.enumerateMatchesInString(string, options: [], range: NSMakeRange(0, (string as NSString).length)) { (result, flags, _) in
print(result!.date!)
}
以上代码打印并匹配
2015-12-25 19:12:36 +0000
2015-12-26 10:32:45 +0000
这正是您想要和需要的。
注意打印语句 - 过度强制展开
下面是一个截图,展示了不同日期的解析: