妄想のためにOutlookからAndroidに連絡先を転送するためのコンバーター(オープンソース、Googleやサードパーティのユーティリティとの同期を使用せずに)

昨日、友人の一人が現れて、新しいAndroidフォンの下でスマートフォンからWM6に連絡先を転送する問題に直面しました。 1週間の無駄な試みの後、彼は手を下げ、Outlookから受け取ったcsvファイルを引き渡しました。



彼は多くのコンバーターとメソッドを試しましたが、それらはすべて、2回のクリックで迅速かつ無料の変換を望む結果をもたらさなかったか、Outlookのバージョンのローカライズのカーリー実装により情報を歪めました。 彼は、宗教的および政治的な理由、内部の道徳またはライフスタイルの指示のために、連絡先のアカウントへのバインドを使用することを拒否しました、私は指定しませんでした。



その結果、わずかにグーグルですが、簡単な解決策を見つけることができなかったため、連絡先のvcfファイルを作成する強力で強力なスクリプトを取り除く必要がありました。これは、標準の電話ツールを使用してAndroidに簡単にインポートできます。



ソースデータ



実際、私が直面しなければならなかったこと。



Csv


CSVファイルはプレーンテキストファイルで、各行はデータテーブルの行であり、行内の列は区切り文字で区切られます。区切り文字はユーザーが選択でき、通常はタブ、セミコロン、コンマなどで構成されます。 多くの場合、最初の行にはデータ値ではなくフィールド名が含まれます。



Outlookからエクスポートする場合、すべてのフィールドを選択し、フィールド名を最初の行に配置できるようにする必要があります(これはデフォルトで有効になっている場合があります)。



結果は、同様の形式のテキストファイルです
訴え; 名 祖国 姓 接尾辞 組織 部門; 位置; Streetarabadres; 2rabadres通り; Street3rabadres; ゴロドラバドレス; Oblastaddress; インデックスラバドレス; Stranarabadres; 住所 ストリート2の自宅住所。 ストリート3の自宅住所。 住所 エリアアドレス 汗のコテージ; ストラナドマドレス; 別の住所の通り; Street 2は別の住所です。 Street 3は別の住所です。 別の住所の市。 別の住所のエリア。 その他のアドレスインデックス。 国別の住所; ヘルパー電話 ラボイファックス; 勤務先電話番号; Telephone2; コールバック; 車内の電話; 主な電話会社。 HomeFax; 自宅電話 Telephony2; ISDN; 電話; その他のファックス; 別の電話 ポケットベル プライマリ電話 無線電話; テレタイプテレフォニー テレックス; 重要性; ウェブページ 記念日 誕生日; 子どもたち ヘルパー名 イニシャル カテゴリー クルーエビエスロバ; 組織コード リンコード 延期。 性別 User1; User2; User3; User4; マーク; スウェットボックス スウェットボックスのその他のアドレス。 スウェットボックス; 職業; 場所; 部屋の場所。 距離; 頭 インターネット上のアクセシビリティ情報。 サーバーディレクトリ 配偶者 セス セス 趣味; _ast; アドレスポット; ティペルポット; ショートポット; Address2elpots; Type2elpots; Short2Namepots; Address3elpots; Type3elpots; Short3Namepots; 言語[CRLF]



; クレジット;;ビーライン口座;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 067404 ;;; 067404 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; 通常;;;;;;; K.BL。; サービス;;;;;; 定義されていません;;;;;; 通常;;;;;;;;;;;;;;;;;;;; FALSE ;;;;;;;;;;;;;; [CRLF]



その他のエントリー


vCard


これは名刺形式です。 Android電話では、これが連絡先を交換するための主要な形式です。 メールまたはSMSで連絡先を送信しようとしている場合、電話にはvcfカードが添付されます。 この形式の利点は、複数の連絡先を1つのカード(ファイル)に結合できることです。



上記の例から変換されたエントリは次のようになります
開始:VCARD

バージョン:3.0

カテゴリ:ユーティリティ

N:ビーラインアカウント; ローン

TEL; TYPE = cell:067404

TEL; TYPE = home:067404

終了:VCARD


スクリプトコンバーター



このスクリプトは、便利で、シンプルで、軽量で、クロスプラットフォームで、さまざまなawkの形で書かれています。 最初に、csv内のフィールド区切り記号が示されています(セミコロンでcsvに遭遇しました)。 次に、csvフィールドをKEYS配列としてvCardフィールドにマッピングするためのマップが表示されます。 一般に、これらはすべてデフォルトで機能する設定です。



outlook2vcard.awk
BEGIN { FS = ";" KEYS[""] = "N.1"; KEYS[""] = "N.2"; KEYS[""] = "N.3"; KEYS[""] = "N.4"; KEYS[""] = "N.5"; KEYS[""] = "ORG.1"; KEYS[""] = "ORG.2"; KEYS[""] = "TITLE"; KEYS[""] = "ADR;TYPE=work.2"; KEYS["2"] = "ADR;TYPE=work.2"; KEYS["3"] = "ADR;TYPE=work.2"; KEYS[""] = "ADR;TYPE=work.3"; KEYS[""] = "ADR;TYPE=work.4"; KEYS[""] = "ADR;TYPE=work.5"; KEYS[""] = "ADR;TYPE=work.6"; KEYS[""] = "ADR;TYPE=home.1"; KEYS[""] = "ADR;TYPE=home.2"; KEYS["2"] = "ADR;TYPE=home.2"; KEYS["3"] = "ADR;TYPE=home.2"; KEYS[""] = "ADR;TYPE=home.3"; KEYS[""] = "ADR;TYPE=home.4"; KEYS[""] = "ADR;TYPE=home.5"; KEYS[""] = "ADR;TYPE=home.6"; KEYS[""] = "ADR;TYPE=postal.2"; KEYS["2"] = "ADR;TYPE=postal.2"; KEYS["3"] = "ADR;TYPE=postal.2"; KEYS[""] = "ADR;TYPE=postal.3"; KEYS[""] = "ADR;TYPE=postal.4"; KEYS[""] = "ADR;TYPE=postal.5"; KEYS[""] = "ADR;TYPE=postal.6"; KEYS[""] = "TEL;TYPE=pager"; KEYS[""] = "TEL;TYPE=work;TYPE=fax"; KEYS[""] = "TEL;TYPE=work"; KEYS["2"] = "TEL;TYPE=work"; KEYS[""] = "TEL;TYPE=X-EVOLUTION-CALLBACK"; KEYS[""] = "TEL;TYPE=car"; KEYS[""] = "TEL;TYPE=work"; KEYS[""] = "TEL;TYPE=home;TYPE=fax"; KEYS[""] = "TEL;TYPE=home"; KEYS["2"] = "TEL;TYPE=home"; KEYS["ISDN"] = "TEL;TYPE=isdn"; KEYS[""] = "TEL;TYPE=cell"; KEYS[""] = "TEL;TYPE=fax"; KEYS[""] = "TEL"; KEYS[""] = "TEL;TYPE=pager"; KEYS[""] = "TEL"; KEYS[""] = "TEL;TYPE=pcs"; KEYS[""] = "TEL;TYPE=msg"; KEYS[""] = "TEL;TYPE=msg"; KEYS[""] = ""; KEYS[""] = "URL"; KEYS[""] = "X-ANNIVERSARY"; KEYS[""] = "BDAY"; KEYS[""] = ""; KEYS[""] = "X-ASSISTANT"; KEYS[""] = ""; KEYS[""] = "CATEGORIES"; KEYS[""] = "NOTE"; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS["1"] = ""; KEYS["2"] = ""; KEYS["3"] = ""; KEYS["4"] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = "X-SPOUSE"; KEYS[""] = ""; KEYS[""] = ""; KEYS[""] = ""; KEYS["_"] = ""; KEYS[""] = "EMAIL;TYPE=internet"; KEYS[""] = ""; KEYS[""] = ""; KEYS["2"] = "EMAIL;TYPE=internet"; KEYS["2"] = ""; KEYS["2"] = ""; KEYS["3"] = "EMAIL;TYPE=internet"; KEYS["3"] = ""; KEYS["3"] = ""; KEYS[""] = ""; } FNR == 1 { for (i = 1; i <= NF; i++) { k = KEYS[$i]; if ("" != k) { MAPS[i] = k; } } } FNR != 1 { delete PROPS; for (i = 1; i <= NF; i++) { k = MAPS[i]; if (("" != $i) && ("" != k)) { PROPS[k] = $i; } } n = asorti(PROPS, SKEYS); if (n > 0) { l = ""; print("BEGIN:VCARD"); printf("VERSION:3.0"); for (i = 1; i <= n; i++) { k = SKEYS[i]; v = PROPS[k]; if (2 == split(k, a, ".")) { k = a[1]; x = 0 + a[2]; } else { x = 1; } if (l != k) { l = k; m = 1; printf("\r\n%s:", l); } while (m < x) { m++; printf(";"); } printf("%s", v); } print("\r\nEND:VCARD"); } } function die(str) { print "Error at " FILENAME ":" FNR " " str exit } function warn(str) { print "Warning at " FILENAME ":" FNR " " str }
      
      





実行方法


次のようにawkインタープリターの下からスクリプトを実行します。

 gawk -f outlook2vcard.awk inputfile.csv >outputfile.vcf
      
      





複数のcsvファイルを入力ファイルとして指定すると、それらが結合されます。



軟膏で飛ぶ


スクリプトは、キリル文字エンコードをAndroidネイティブのUTF-8に自動的に変換しません。 この最後のコードは、Unixoidsのiconvを使用して手動で実行する必要があります。これは、 gnuwin32でも使用できます。または、Windowsの通常のメモ帳(notepad.exe)でファイルを開き、新しい名前で保存して(名前を付けて保存)を選択します新しいファイルの名前でのUTF-8エンコーディング。



電話にインポート



この方法は簡単で、たくさんのブログやフォーラムで説明されていますが、私は怠け者ではなく、また持ち帰ります。 生成されたvcf拡張子のファイルは、Androidスマートフォンのメモリカードに配置する必要があります。 次に、連絡先を入力し、メニューボタンを押して、「インポート/エクスポート-メモリカードからインポート」を選択します。



All Articles