2013-02-13 4 views
0

이벤트 카테고리에 따라 개별 .ics 파일을 만들고 싶습니다 .ics 파일이 하나 있습니다 (egroupware를 내보낼 수 없습니다) 한 카테고리의 이벤트 만, 카테고리에 따라 새 캘린더를 만들고 싶습니다.) 내 의도 된 접근 방식은 반복적으로 하나의 범주를 제외한 모든 이벤트를 제거한 다음 EditPad Lite 7 (Windows)을 사용하여 파일을 저장하는 것입니다.regex를 사용하여 파일의 청크 제거 (iCal 파일의 이벤트 분류)

정규 표현식을 올바르게 얻으려고 애 쓰고 있습니다. . +? 여전히 탐욕스럽고 문자열을 부정 (예 : 은 제외하지만 한 카테고리의 이벤트는)해도 작동하지 않습니다.

샘플

BEGIN:VEVENT 
    DESCRIPTION:Event 2 
    END:VEVENT 
    BEGIN:VEVENT 
    DESCRIPTION:Event 3 
    CATEGORIES:Sports 
    END:VEVENT 
    BEGIN:VEVENT 
    DESCRIPTION:Event 4 
    END:VEVENT 

정규식 BEGIN:VEVENT.+?CATEGORIES:Sports.+?END:VEVENT은 스포츠 이벤트와 일치해야하지만,이 범주 후 첫 END에 처음 BEGIN 모든 것을 잡는다.

편집 : 무효화가 작동하지 않습니다 : BEGIN:VEVENT.+?((?!CATEGORIES:Sports).).+?END:VEVENT.

무엇이 누락 되었습니까? 모든 포인터는 매우 높이 평가됩니다.

답변

0

확인. 그것을 해결했습니다. 나는 here 뭔가 ics 파일을 분할하는 데 사용할 수있는 것으로 나타났습니다. 필자는 파일 이름에서 요약이 아닌 범주를 사용하도록 조정 한 다음 범주별로 개별적으로 생성 된 파일을 병합했습니다. 모든 파일에 일반적인 ics 머리글과 바닥 글을 추가했고, 개별 달력 파일이있었습니다.

0

정규식이 신경 쓰지 않기 때문에 개행 문자가 제거되거나 무시됩니다.

는 난 단지 당신의 정규식의 첫 번째 부분은 좋은, 어쩌면 정규식 엔진을 보이는

BEGIN:VEVENT.+?CATEGORIES:Sports.*?END:VEVENT 
           ^
           Zero or more 

EditPad이 너무 좋지 않다에서 CATEGORIES 후 경기에 대한 보정을해야합니다. 일치하는 스포츠 이벤트

@sportevents = grep /Sports/, split /END:VEVENT/, $input 
map $_.="END:VEVENT", @sportevents 

이 아마 당신이 할 수있는, 펄했다 grep으로 그런 다음 입력을 분할 할 수

(이클립스 또는 펄이나 메모장 + 또는 Notepad2 같은) 다른 편집기 나 스크립트 언어로 그것을 시도 그것을하기 위해 EditPad에서 스크립트를 실행하십시오.
두 번째 줄은 분할 중에 제거 된 END : VEVENT 만 복원합니다.

+0

의견을 보내 주셔서 감사 드리며 오타를 지적 해 주셔서 감사합니다. 실제로 Notepad ++에서 EditPad로 바뀌 었습니다. 왜냐하면 더 나은 정규식 엔진 때문이었습니다. 그럼에도 불구하고 그 결과는 둘 다 동일합니다. – PiEnthusiast

+0

펄 아이디어에 감사 드리며, 나는 그에게 나의 나무 딸기에 회전 급강하를 줄 것이다. 내가 perl을 더 많이 안다면 나는 모든 가능한 범주를 반복 할 것이지만 나는 [기술과 시간]이 부족하다. (http://xkcd.com/974/). – PiEnthusiast