2009-12-27 5 views
0

Une application Facebook Sync remplissait les champs d'adresse de mes contacts du Carnet d'adresses Mac avec leurs villes. Avoir des tonnes de gens qui ont des adresses inutiles, il est difficile de rechercher des personnes sur l'application Google Maps (jusqu'à la fin défiler beaucoup de nombreux personnes- Je veux seulement voir ceux qui ont des adresses appropriées sont entrés).Suppression des champs d'adresse du carnet d'adresses Mac à l'aide de Applescript

Je veux effacer tous les champs d'adresse de la maison dans mon carnet d'adresses en utilisant AppleScript. J'ai écrit quelque chose de petit mais n'a pas pu le faire fonctionner, a probablement besoin de l'aide de quelqu'un qui sait AppleScript :)

tell application "Address Book" 
repeat with this_person in every person 
     repeat with this_address in every address of this_person 
      if label of this_address is "home" then 
       remove this_address from addresses of this_person 
      end if 
     end repeat 
    end repeat 
end tell 

J'ai essayé de déduire la logique de plusieurs adresses/téléphones d'autres scripts, mais ne pouvait trouver d'ajouter eux, ne pas les enlever.

Merci! :)

Répondre

0

Votre logique est saine, et fonctionnerait probablement si vous avez remplacé remove par delete, mais vous pouvez le réduire encore plus loin; tout ce que vous avez réellement besoin est le simple suivant 1,5-liner:

tell application "Address Book" to ¬ 
    delete (addresses of people whose label is "home") 

je me suis dit cela en regardant le « Supprimer e-mails pour le label » script à partir Trevor's AppleScript Scripts, où il utilise delete pour se débarrasser des adresses e-mail spécifiques (il semble que remove est pour le retrait des cartes d'adresse tout, pas des morceaux d'entre eux), et avec un rétrécit peu d'expérimentation (qui est comment je trouve que la programmation AppleScript procède toujours ...).

+0

Merci! Cela n'a pas donné toute erreur, mais ne semble pas produire des changements soit :(je remis en marche AB et je vois encore les adresses. Mais je vais bricoler un peu plus sur cette base, merci :) – cemregr

+0

Ce qui est étrange -il fonctionne sur mon système (en fait, ça fonctionne assez bien que je suis content d'avoir fait une sauvegarde du carnet d'adresses d'abord :)). Quelle version d'OS X utilisez-vous? Je cours 10.5.8; peut-être un décalage existe-t-il le problème? –

+1

Je pense que je l'ai compris le problème, six mois plus tard: vous avez probablement besoin de mettre un 'save addressbook' dans le bloc' tell' de le forcer à valider les modifications. –

1
/* 

This program will remove the fb://profile links from your 
contact cards. I would suggest creating an addressbook archive 
first before running this against your actual contacts. The easiest 
way to use this is to search your contact cards for "profile" select 
all and export as a single vCard. Then compile and run this program with 
that vCard as input and specify an output file, say fbRemoved.vcf 

I found that AddressBook behaves oddly when I try to do a mass import 
selecting use new for all cards. To get around this I just deleted all 
cards I had selected in the "profile" search then imported fbRemoved.vcf 

Written by: Alexander Millar 
Date: 30 Feb 2010 

*/ 

#include <iostream> 
#include <iomanip> 
#include <stdio.h> 
#include <fstream> 
#include <string> 

using namespace std; 

bool contains_fb_link(string str) { 
    size_t found; 
    found = str.find("fb\\://profile/"); 
    if(found!=string::npos) 
    { 
     return true; 
    } 
    return false; 
} 

int main(int argc, char *argv[]) { 
    istream *infile; 
    ostream *outfile = &cout; 
    string str; 

    switch (argc) { 
    case 3: 
    outfile = new ofstream(argv[2]); 
    if (outfile->fail()) { 
     cerr << "Error! Could not open output file \"" << argv[2] << "\"" << endl; 
     exit(-1); 
    } 
    case 2: 
    infile = new ifstream(argv[1]); 
    if (infile->fail()) { 
     cerr << "Error! Could not open input filee\"" << argv[1] << "\"" << endl; 
     exit(-1); 
    } 
    break; 
    default: 
    cerr << "Usage: " << argv[0] << " input-file [output-file]" << endl; 
    } 

    for (;;) { 
    getline(*infile,str); 
    if(infile->eof()) break ; 

    if(contains_fb_link(str)) 
    { 
     getline(*infile,str); 
     if(infile->eof()) break ; 
    } 
    else 
    { 
     *outfile << str << endl; 
    } 
    } 
} 
+1

Bienvenue sur StackOverfow! Je n'ai pas testé votre programme mais +1 pour l'effort. De plus, il n'y a pas de 30 février. – Potatoswatter

Questions connexes