2015-12-26 16 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

相关问题