我有一個文本文件,其中包含由「添加」區分的信息塊。每個有意義的字符串都由########
分開(後來我用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種語言。即:
英語:新增上週五,2015年12月25日20時十二分36秒
俄羅斯:Добавлено:суббота,26декабря2015年г. в0時16分45秒
德國:Hinzugefügt是Samstag,26 Dezember 2015年11點02分51秒
日本:作成日:2015年12月26日土曜日11時32分45秒
葡萄牙:Adicionado:sábado,26日dezembro日2015年11點39分53秒
正如你可以看到提取使用NSRange
是不是真的有幫助的日期字符串的硬編碼方式。我只能想到利用「switch」語句來處理與文件內部語言數相等的情況。
是否有任何方便的方法來做到這一點?
編輯:1
當我使用NSDateDetector解析的NSDate。下面是結果:
日語:原始字符串:作成日:2015年12月26日土曜日11時32分45秒 解析後:值:{46, 8} {2015年12月26日18 :02:45 0000} 2015年12月26日18:19:44.538 WORDSWORTH [872:32957] stringDateFromDetector:11點32分45秒
俄語:原始字符串:Добавлено:суббота,26декабря2015г. 0:16:37解析後:值:{96,7} {2015-12-25 18:46:37 +0000} 2015-12-26 18:19:44.054 WordsWorth [872:32957] stringDateFromDetector: 〇點16分37秒
德國:原始字符串:Hinzugefügt是Samstag,26 Dezember 2015年11點02分51秒 解析後:{65,38 } {2015年12月26日5時32分51秒+0000 } 2015-12-26 18:19:44.218 WordsWorth [872:32957] stringDateFromDetector:am Samstag,26。 Dezember 2015 11時02分51秒
謝謝你把我介紹給這片神奇的API。我實現了它。它可以識別除俄語,日語和中文以外的大部分語言。在俄語中,它只識別時間,而不是日期。我的問題是,現在我可以從NSDataDetector返回的NSRange中獲取日期,我將如何使用DateFormatter格式化日期(而不是英文)。 – Napier
@Napier你無法解析某些語言?我可以解析到目前爲止我嘗試過的所有人!關於如何用特定語言重新格式化這些 - 這是一個完全不同的問題,我不得不說。我甚至不知道你想在那裏輸出什麼。但是隨時可以首先將日期分析結合起來,然後提出一個新問題,試圖以不同格式顯示不同日期。你可以設置NSDateFormatter的'locale'。 – luk2302
@Napier我添加了一個截圖,您可以看到我成功解析了俄語,日語和中文。 – luk2302