1

NSScanner を使用して ics ファイルを解析しようとしています (解析のためにテキスト ファイルに変換されています)。例: calendar file.txt

テキストファイルの形式は次のとおりです。

BEGIN:VEVENT  
DTSTAMP:20101129T061152Z  
UID:101139897313172011030314:00  
SUMMARY:14:00 - SYSI30251 - CB100 - SEM B  
DESCRIPTION:14:00 - 15:00, SYSI30251 - Module Name<br />Group: B <b>Seminar with Lecturer in room(s) (Clif) Computing Bldg 100  
DTSTART;TZID=Europe/London:20110303T140000  
DTEND;TZID=Europe/London:20110303T150000  
SEQUENCE:2  
END:VEVENT  
BEGIN:VEVENT  
DTSTAMP:20101129T061152Z  
UID:1011558905160182011030315:00  
SUMMARY:15:00 - COMP30251 - CFL015 - LEC    
DESCRIPTION:15:00 - 16:00, COMP30251 - Project Management<br /> Lecture with Lecturer in room(s) (Clif) Centre For Learning 015  
DTSTART;TZID=Europe/London:20110303T150000  
DTEND;TZID=Europe/London:20110303T160000  
SEQUENCE:2  
END:VEVENT  

上記はファイルのフォーマットです。以下は私のコードです:

NSString *path = [[NSBundle mainBundle] pathForResource:@"180946_icalfile" ofType:@"txt"];
    NSString *fileComponents = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    NSArray *lines = [fileComponents componentsSeparatedByString:@"\n"];


    NSEnumerator *nse = [lines objectEnumerator];
    NSString *mod;
    while(fileComponents = [nse nextObject]) {
        NSString *stringBetweenBrackets = nil;
        NSScanner *scanner = [NSScanner scannerWithString:fileComponents];
        [scanner scanUpToString:@"," intoString:nil];
        [scanner scanString:@"" intoString:nil];
        [scanner scanUpToString:@"DTSTART" intoString:&stringBetweenBrackets];

        NSLog(@"%@", stringBetweenBrackets);

基本的に、すべての「説明」を保存し、それらを変数または配列の一部として保存したいと考えています。現在、コードは説明をコンソールに出力しており、それらを変数として保存したいと考えています。誰かがこれを行う方法を教えてもらえますか?

4

2 に答える 2

3

これがまさにあなたが望むものかどうかはわかりませんが、http://parsekit.com/を使用すると作業がより簡単になります。ソースコードをトークン配列にします。そして、各トークンを反復して「DESCRIPTIONS」トークンをフィルタリングし、次のトークンを収集して処理できます。

于 2011-03-07T17:07:39.523 に答える
2

NSScanner を使用する代わりに、次の正規表現を使用してみてください。

/DESCRIPTION:([^\n]+)\n/is
于 2011-03-07T17:02:16.267 に答える