2011-03-07 7 views
1

내가 ICS 파일 (즉,이 분석을 위해 텍스트 파일로 변환 된) 즉, 구문 분석 NSScanner를 사용하려고 구문 분석 : 여기NSScanner 파일

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

는 기본적으로 나는 모든 '설명'저장 변수 또는 배열의 일부로 저장할 : 다음은 내 코드입니다. 현재 코드는 설명을 콘솔에 출력하므로 변수로 저장하려고합니다. 누군가 어떻게이 일을 할 수 있는지 보여줄 수 있습니까?

답변

2

NSScanner를 다음과 같은 정규 표현식을 사용하는 대신 사용해보십시오 :

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

어떻게하면 regexp를 사용할 수 있습니까? 또한 내가 어디에 다시 u를 귀찮게해서 유감스럽게도이 정규 표현식을 넣을 것인가 ... 그리고 응답 해 주셔서 감사합니다! – Ibz

+0

RegexKit * Lite * (프레임 워크가 아닌 Lite 버전)를 사용하십시오. http://regexkit.sourceforge.net/. 꽤 사용하기 쉽습니다;)! – elslooo

+0

아이폰 응용 프로그램에서 작동합니까? – Ibz

3

나는이 정확히 당신이 원하는 것을 확실하지 않다, 그러나 http://parsekit.com/이 당신의 작업을보다 쉽게 ​​할 수 있습니다. 소스 코드를 토큰 배열로 만듭니다. 그리고 각 토큰을 반복하여 "DESCRIPTIONS"토큰을 필터링하고 처리 할 토큰을 수집 할 수 있습니다.

+0

아이폰 앱에서 작동합니까? 또한 응답을 주셔서 감사합니다 – Ibz

+0

@ lbz 내가 본 것처럼, 예, 정적 라이브러리 대상이 있습니다. 그러나 나는 그것을 사용하지 않았다 :) – Eonil

+0

고마워! Il은 두 옵션 모두 시도해보고 가장 잘 작동하는 것을 확인합니다. – Ibz