2011-08-23 25 views
2

ちょっと友達は私が...今、私は、この関数の出力から.CSVファイルを作りたい...関数から.csvファイルを書き込む方法は?

-(void)collectContacts 
{ 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook); 
    //NSLog(@" the Name %@%",people); 
    for(int i = 0;i<ABAddressBookGetPersonCount(addressBook);i++) 
    { 
     ABRecordRef ref = CFArrayGetValueAtIndex(people, i); 
     // Get First name, Last name, Prefix, Suffix, Job title 
     NSString *firstName = (NSString *)ABRecordCopyValue(ref,kABPersonFirstNameProperty); 
     NSString *lastName = (NSString *)ABRecordCopyValue(ref,kABPersonLastNameProperty); 
     NSString *prefix = (NSString *)ABRecordCopyValue(ref,kABPersonPrefixProperty); 
     NSString *suffix = (NSString *)ABRecordCopyValue(ref,kABPersonSuffixProperty); 
     NSString *jobTitle = (NSString *)ABRecordCopyValue(ref,kABPersonJobTitleProperty); 
     NSLog(@" the phoneType %@%",firstName); 
     NSLog(@" the phoneType %@%",lastName); 

     ABMultiValueRef phones = ABRecordCopyValue(ref, kABPersonPhoneProperty); 
     for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++) 
     {  
      CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(phones, j); 
      NSString *phoneLabel =(NSString*) ABAddressBookCopyLocalizedLabel (ABMultiValueCopyLabelAtIndex(phones, j)); 
      NSString *phoneNumber = (NSString *)phoneNumberRef; 
      NSLog(@" the phoneType %@%",phoneLabel); 
      NSLog(@" the phoneNumber %@%",phoneNumber); 
     } 

     CFStringRef address; 
     CFStringRef label; 
     ABMutableMultiValueRef multi = ABRecordCopyValue(ref, kABPersonAddressProperty);  
     for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) 
     {   
      label = ABMultiValueCopyLabelAtIndex(multi, i); 
      CFStringRef readableLabel = ABAddressBookCopyLocalizedLabel(label); 
      NSLog(@" Lable %@%",readableLabel); 
      address = ABMultiValueCopyValueAtIndex(multi, i); 
      NSLog(@" Address %@%",address); 
      CFRelease(address); 
      CFRelease(label); 
     } 

     ABMultiValueRef emails = ABRecordCopyValue(ref, kABPersonEmailProperty); 
     for(CFIndex idx = 0; idx < ABMultiValueGetCount(emails); idx++) 
     { 
      CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, idx); 
      NSString *strLbl = (NSString*) ABAddressBookCopyLocalizedLabel (ABMultiValueCopyLabelAtIndex (emails, idx)); 
      NSLog(@" Email Lable %@%",strLbl); 
      NSString *strEmail_old = (NSString*)emailRef; 
      NSLog(@" Email-Id %@%",strEmail_old); 
      //[[strEmail_old componentsJoinedByString:@","] writeToFile:@"components.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
     } 
    } 
    //[[ContactsText componentsJoinedByString:@","] writeToFile:@"components.csv" atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
// NSLog(@" Data in the .CSV file = %@%",ContactsText); 
} 
' 

を、この機能を使って、私のiphoneのすべての連絡先の詳細を持って、mはのNSLog内のすべてのデータを取得します。私はそのデータから.csvファイルを書きたいと思っています。今後データが適切ですが、書かないつもりだ.csvファイル...おかげ

+0

上記のコードからRecorIdを取得するにはどうすればいいですか? – Vivek2012

答えて

4

あなたが「ContactsText」内のすべてのデータを持っているだろうと仮定すると、次のコードを試してみてください。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString* savePath = [paths objectAtIndex:0]; 
    savePath = [savePath stringByAppendingPathComponent:@"components.csv"]; 
    [[ContactsText componentsJoinedByString:@","] writeToFile:savePath atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

をあなただけの「コンポーネントを保存することはできませんことを覚えておいてください.csv "ファイル。ファイルはドキュメントフォルダにのみ保存する必要があります。

+0

いいえ、私はContactsTextにデータを持っていません。私はNSMutableArrayとして宣言しました。私はそれを非常に混乱させています。ボタンをクリックしている間に、そのデータをCSVファイルに書きたいだけです.WhttはそのContactsTextとやりとりします.. – Vivek2012

+0

csvデータを生成するコードを直接書く方法はありません。アドレス帳から各エントリを取得し、コンマで区切られた変更可能な文字列に追加するコードを手動で作成する必要があります。最後に、上記のコードで述べたように、その文字列をファイルに書き出します。 – Satyam

+0

そのコードを私に渡すことができますので、私はそれを行うことができますか?私はそれを正しく得ていない。 plzはあなたの助けを必要としています。お気軽に – Vivek2012

1

配列にcsvサポートを追加する多くのオープンソース拡張があります。たとえば、CHCSVParserはGitHubで利用できます。

+0

私のプロジェクトでその使い方を教えてもらえますか?私はそれを正しく得ていない。 – Vivek2012

+0

@ Vivek2012クラスのドキュメントがあります。あなたが理解していないのは何ですか? – Abizern

+0

私は私が参照することができるようにその文書のリンクを私に与えることができますか?どこですか ?? – Vivek2012

0

データには特別な処理が必要な文字が含まれている可能性があります.CSVファイルの場合は特にカンマ自体が重要です。あなたが書き出す文字列にカンマがある場合は、そのフィールドの前後に二重引用符を入れる必要があります。その場合、文字列にすでに二重引用符がある場合は、それもエスケープする必要があります。私はあなたがデイブ・デロングからCHCSVParserを使用することを示唆している

、あなたはここでそれを見つけることができます:http://davedelong.com/portfolio

それは確かエッジケースが正しく処理させるためには良いサードパーティ製のフレームワークをインポートするトラブルの価値があります。

+0

私はその例を得ていません。私はそれを参照しましたが、私はそれから何かを得ていませんでした....私はどのように私の.csvファイルに上記の関数を使用してデータを書き込むことができますか? – Vivek2012

関連する問題