2010-05-26 2 views
0

내 Mac 주소록에서 구멍을 청소하려고합니다. 첫 번째 단계로서 나는 모든 친구들에게 그들의 생일을 물어보고 축하 할 수 있기를 바란다. cheesy Hallmark cards.Apple 주소록에 생일 없음 찾기

개인 주소록에서 메일을 병합하려면 내 주소록에 "그룹"이 있어야합니다.

이 내가 해낸 AppleScript로 :

그것은 나누기
tell application "Address Book" 

make new group with properties {name:"No Birthday"} 

set birthdayPeople to (get every person whose birth date is greater than date "Monday, January 1, 1900 12:00:00 AM") 

repeat with i from 1 to number of items in people 

    set thePerson to item i of people 

    if not (birthdayPeople contains thePerson) then 
     add thePerson to group "No Birthday" 
    end if 

end repeat 
save 
end tell 

하지만 오류 메시지에서 내가 잘못이 무엇인지 추론 할 수 없습니다 : BTW

Result: error "Can’t make «class azf4» id \"05F770BA-7492-436B-9B58-E24F494702F8:ABPerson\" of application \"Address Book\" into type vector." number -1700 from «class azf4» id "05F770BA-7492-436B-9B58-E24F494702F8:ABPerson" to vector

는 (:이입니다 언급 했 이 코드를 단순화하거나 우아하게 만들 수 있다면 환영할만한 것입니다.)

+0

... 오류 메시지는 ....입니까? – FrustratedWithFormsDesigner

+0

나는 그것을 지금 추가했다, 그것이 도움이되기를 바랍니다. –

답변

4

다음은 다섯 줄까지 간단하게 할 수 있습니다 :

tell application "Address Book" 
    add (every person whose birth date is missing value) to ¬ 
     make new group with properties {name:"No Birthday"} 
    save addressbook 
end tell 

add은 목록뿐만 아니라 단일 개체를 취할 수 있으므로 루프를 건너 뛸 수 있습니다. 루프를 사용했다면 repeat with thePerson in people ... end repeat 양식을 사용했을 가능성이 있습니다. 다음으로 주소록에 생일 축하 메시지가 missing value (실제로는 null)으로 저장되어있는 것으로 보입니다. 조기 데이트와 비교하기보다는. 따라서 생일이없는 사람들의 목록을 얻으려면 every person whose birth date is missing value이라고 쓰고 정확하게 말합니다. whose 절은 앞의 목록을 필터링하여 주어진 술어와 일치하는 값만 포함합니다. 그런 다음 add 인라인을 만드는 새 그룹에 나열합니다. 마지막으로 save addressbook은 변경 사항을 저장하고 표시합니다.

그러나이 경우 AppleScript가 전혀 필요하지 않습니다. 주소록은 스마트 그룹을 지원합니다. 옵션을 만들려면 옵션 - 새 그룹 버튼을 클릭하십시오. 스마트 그룹의 이름으로 "No Birthdays"를 선택하고 두 번째 드롭 다운에서 "생일"(첫 번째 드롭 다운부터)이 설정되지 않은 카드와 일치하도록 지정하십시오. 이것은 생일을 정하지 않은 사람들을 동적으로 업데이트하는 그룹을 제공합니다.


편집 : 그것은 add 레오파드에 대한 목록을 취하면서,이 스노우 레오파드 (Snow Leopard)에하지 않는 것 같다, 그래서 우리가 (너무 레오파드에서 작동) 명시 적 repeat 루프를 사용해야합니다 :

tell application "Address Book" 
    set noBirthdays to make new group with properties {name:"No Birthday"} 

    repeat with p in (every person whose birth date is missing value) 
     add p to noBirthdays 
    end repeat 

    save addressbook 
end tell 

이 방법은 그룹을 미리 만들고 각 항목을 개별적으로 추가하는 것을 제외하고는 위의 해결 방법과 거의 같습니다. 인덱스를 반복하는 것이 아니라 요소를 직접 반복합니다. 여기에서 우리가 신경 쓰는 부분이 전부입니다.


편집 : 다른 속성에 대한 상황이 유사하다; 실제로 스마트 그룹을 사용할 때 상황은 동일합니다. AppleScript 쪽에서 질문은 데이터 형식입니다. 대부분의 슬롯은 설정되지 않은 경우 missing value이지만, email은 예외입니다. 테스트를 통해 알 수 있듯이 목록에 저장되므로 every person whose email is {}이 필요합니다.그러나 email이 목록이기 때문에 이것은 아마도 - 나를 위해 작동하지 않습니다,하지만 난 아니에요 확실한 그래서 당신은 대신

repeat with p in every person 
     if email of p is {} then add p to noEmails 
    end repeat 

봐라이 모든 일을해야 할 것입니다.

기업을 제외하고 제외하는 것도 쉽지만 내가 알 수있는 한 주소록에서는 스마트 그룹을 만드는 방법을 제공하지 않습니다. 그러나 관련 속성은 기업의 경우 true이고 다른 경우는 falsecompany입니다. 당신이이 조건을 모두 하나 개의 마스터 목록을 원하는 경우에 따라서, 회사가없는 목록을 만들려면

repeat with p in (every person whose company is false) 
     add p to noCompanies 
    end repeat 

을하고 싶은 두 가지 방법이있다. 첫째, 애플 스크립트에서, 당신은 두 가지 조건 and을 가지고, 그들은 이메일이 있는지 여부에 에어컨을 추가

repeat with p in (every person whose company is false and ¬ 
             birth date is missing value) 
     if email of p is {} then add p to masterGroup 
    end repeat 

다른 옵션은 주소록에서이 작업을 수행하는 것입니다. 먼저 AppleScript 방식으로 No Companies 그룹을 만들어야합니다. 그런 다음 "이메일을 설정하지 않았습니다", "생일을 설정하지 않음", "카드가 '회사 없음'의 구성원 인 세 가지 조건 (모두 + 버튼을 사용하여 추가)의 모든 조건에 일치하는 스마트 그룹을 만듭니다. No Companies 그룹에 AppleScript를 사용해야한다는 것은 유감이지만 (이 방법이 있어야하는 것처럼 느껴지지만 그게 무엇인지는 알 수 없습니다.) 불행한 일입니다.

+0

나는 그것을 달랐다 : 오류 : "주소록에 오류가 발생했습니다 : 출생 날짜 = 누락 값을 가진 모든 사람이 메시지 추가를 이해하지 못합니다." 생년월일 = 누락 값이있는 모든 사람의 번호 -1708 –

+0

그건 이상한 일입니다. 그것은 저에게 효과적입니다. 실행중인 Mac OS X의 버전은 무엇입니까? 당신은'반복되는 모든 사람에게 p로 반복하십시오. '루프를 반복 할 수 있습니다. 스마트 그룹을 사용할 수없는 이유가 있습니까? 그게 더 좋은 선택 같아. –

+0

스마트 그룹이 놀라운 일을했다고 말한 것을 잊어 버렸습니다. 팁을 주셔서 감사합니다. 그러나 AppleScript 솔루션은 그렇지 않았으며 여전히 관심이 있습니다. 나는 더 많은 코드로 그것을 확장하고 싶다. Mac OS X, Snow Leopard의 최신 버전입니다. –