2015-12-26 14 views
1

我有一個文本文件,其中包含由「添加」區分的信息塊。每個有意義的字符串都由########分開(後來我用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秒

回答

1

使用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日十九點12分36秒0000
2015-12-26 10:32:45 +0000

哪些是e xactly你想要什麼和需要。

提防print語句雖然 - 用力過猛展開

下面是一個屏幕截圖,展示不同日期的解析:

enter image description here

+0

謝謝你把我介紹給這片神奇的API。我實現了它。它可以識別除俄語,日語和中文以外的大部分語言。在俄語中,它只識別時間,而不是日期。我的問題是,現在我可以從NSDataDetector返回的NSRange中獲取日期,我將如何使用DateFormatter格式化日期(而不是英文)。 – Napier

+0

@Napier你無法解析某些語言?我可以解析到目前爲止我嘗試過的所有人!關於如何用特定語言重新格式化這些 - 這是一個完全不同的問題,我不得不說。我甚至不知道你想在那裏輸出什麼。但是隨時可以首先將日期分析結合起來,然後提出一個新問題,試圖以不同格式顯示不同日期。你可以設置NSDateFormatter的'locale'。 – luk2302

+0

@Napier我添加了一個截圖,您可以看到我成功解析了俄語,日語和中文。 – luk2302

相關問題