2011-03-07 38 views
1

我試圖用NSScanner解析ICS文件(即用於分析的目的已被轉換爲文本文件),即:日曆file.txt的NSScanner解析文件

這裏是文本格式文件:

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); 

基本上我想存儲所有的「記述」,並將它們存儲作爲變量或作爲陣列的一部分。目前,代碼將描述輸出到控制檯上,我想將它們保存爲變量。有人能告訴我如何做到這一點嗎?

回答

2

嘗試使用下面的正則表達式,而不是使用NSScanner:

/DESCRIPTION:([^\n]+)\n/is 
+0

我將如何使用正則表達式?也在哪裏我會把這個正則表達式抱歉再打擾你..並感謝回答! – Ibz 2011-03-07 17:04:59

+0

從這裏使用RegexKit * Lite *(不是框架,Lite版本):http://regexkit.sourceforge.net/。這很容易使用;)! – elslooo 2011-03-07 17:07:00

+0

它可以與iphone應用程序一起使用嗎? – Ibz 2011-03-07 17:09:33

3

我不能肯定這是你想要什麼,但是http://parsekit.com/可以讓你的工作更容易。它將使源代碼進入令牌數組。你可以迭代每個標記來過濾「DESCRIPTIONS」標記,並收集下面的標記進行處理。

+0

它會工作的iPhone應用程序?也感謝回覆 – Ibz 2011-03-07 17:11:51

+0

@lbz正如我所看到的,是的,它有靜態庫目標。但我沒用過:) – Eonil 2011-03-07 17:35:59

+0

謝謝! Il給出了兩個選項,試試看看效果最好:) – Ibz 2011-03-07 18:53:57