• ベストアンサー

Cocoa+Objective-Cで、CSVファイルを読み込んで数値計算させたい。

Cocoa+Objective-Cを勉強仕始めて数週間の初産者です。C言語は、理解出来ます。xcode1.5を、使っています。 <やりたい事>  CSVファイルを読み込んで、数値計算をさせたいと思います。計算結果は、NSTableViewに表示させたい。 CSVファイルのフォーマットは、次の通り。 123.45, 12345.55, 345.66, 89,00↓ 123.45, 145.55, 3345.66, 89,00↓ (これが続く。) [EOF] 参考書は、 Happy Macintosh Developing Time (Second Edition) Mac OSX Cocoa プログラミング (アーロン・ヒガレス著) この二冊は、持ってます。 しかし、読んでみたモノの、どこから手を付けて善いのやらサッパリ判りません。何か良い切り口はがありましたら、教えて頂けませんか?  現状、抱えている疑問点を、列挙してみます。 1.新規プロジェクトは、ドキュメント・ベース・アプリケーションが適してますか? 2.配列の意味合いが、C言語の意味合いと違っている。CSVデータは、NSArrayに繋げればいいの? 3.ファイル・オープンは、C言語のそれと違うのですか? 4.等々  取り敢えず、簡単そうな処から始めたいと思います。(ファイルを読み込んで表示させる辺りは押さえておきたいと思います。・・・・・欲張りすぎでしょうか?)  ご教示の程、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kamluck
  • ベストアンサー率100% (1/1)
回答No.3

CSV ファイルは、NSString 等のクラスに直接読み込むことが可能。CSV の解析は、NSString の行ごとの取得メソットを使って、その後 NSScanner を使うか、NSString を使ってそのまま解析。エンコーディングに注意してください。NSString を使えば、内部データはユニコード扱いです。変換がいやなら、NSData などを使ってデータとして読み込んで、ベタで解析してもかまいません。 AppKit のテーブルビューはデータソースというプロトコルに準拠したオブジェクトがデータを供給することでデータが表示されます。なので供給するデータの内部形式は何でもOKです。C 配列でも何でも。出すところでテーブルに表示できる形にすればいいです。NSArray にほりこめば、NSArrayController を使ってバインディングで表示もできますけど。 AppController とか NSObject のサブクラスを作って、IB でそのインスタンスを作り、ウインドウに配置したアイテムを接続したりして作業を進めればいいと思います。細かいことはたぶん本に書いてあるでしょう。まず、テキストビューを作ってそれに接続し、うまくファイルが読めているかを確認したり、一歩ずつ機能を増やしていけばいいかも。慣れれば、質問のようなプログラムは基盤は30分もかからないでしょう。 「Cocoa Break!」というサイトを検索すれば、そこの dev > リンクに Cocoa 関連のページのリンクがあるので、いくらでも情報を入手できると思います。

xcode_15
質問者

お礼

詳しく書いていただき、誠にありがとうござます。 >慣れれば、質問のようなプログラムは基盤は30分もかからないでしょう。  これは、私にとっては、驚きです。何せ、1日に1時間ぐらいしか時間が取れないといえども、1か月ぐらい悩み続けているからです。 参考にさせて頂きます。

その他の回答 (2)

  • k-pix
  • ベストアンサー率51% (50/98)
回答No.2

あまり回答がつかないようですので、特に詳しいわけではないのですが、参考程度の意見を述べさせてもらいます。 1.CSVファイルを開くだけならドキュメントベースでなくてもいいと思います。   数値計算させた結果をどうしたいかに因ると思います。 2.配列はCと同じですよ。   NSArrayはクラスです…、としか私には伝える術がないのですが…。   クラス故に、変数やメソッドをもっていますので、それを利用することになります。   例えば、CSVファイルから1行とってきて、str という NSStringオブジェクトに入れたら、   NSArray* array = [str componentsSeparatedByString:@","];   とすれば、CSV の各要素を一気に NSArray に格納できます。   NSArray に格納した要素を参照するには、objectAtIndex というメソッドを使います。   例)[array objectAtIndex:1]; 3.もちろん、fopen() や fread() も使えます。   Cocoa らしく書くなら、NSFileHandleクラスや、NSStringクラスなどを使うことになるのではないかと思います。 HappyMacintoshDevelopintTime の著者のセミナーのビデオが ADC にあります。 Interface Builder の使い方とか説明されていますので、手始めに見られてみてはいかがでしょう? http://edr.euro.apple.com/jp/documentation/japanese.html#CocoaSeminar1 (上記のページを開いたら、スクロールして、もう少し上の方から見てください。) その他、参考サイトです。 http://www.big.or.jp/~crane/cocoa/index.shtml http://hmdt.jp/cocoaProg/index.html (HappyMacintoshDevelopingTime の著者のサイトです。)

xcode_15
質問者

お礼

ご回答して頂き、誠にありがとうございます。 2項は、特に参考になりました。NSArray関係って、混乱するんですよね。配列は配列でも、オブジェクトを格納するのかぁ? と、思ったりして。  ビデオも、参考にさせていただきます。  私も、色々なサイトを調べましたけど、なかなか自分の欲しい情報は手に入りにくいですよね。例えば、「ファイルを開くだけ」のサンプルコードとか。

  • u-tanaka
  • ベストアンサー率54% (6/11)
回答No.1

MacOSXディスク内のDeveloperをインストールされたなら、ご存知かと思いますが、サンプルコードが入っています。このサンプルコードで、使えそうなソースを活用することから始められると良いかと思います。 そのようにすることで、再利用可能なプログラムを作ることが出来るので、その先に新しい計算や機能を付け加えることが出来るようになるかと思います。

参考URL:
http://developer.apple.com/jp/transition/
xcode_15
質問者

お礼

早速のご回答、ありがとうございました。 参考書には、ポイント的な解説しかなく、いざ、プログラムを書こうとすると、「???」が頭の中に満開します。  当面、サンプルプログラムを読み漁りそうです。遠回りになる気もしますが、仕方在りませんよね。 C言語は、Linuxベースのコマンドライン上で動かしてました(仕事で)けど、勝手が違っていて慣れるのに時間が掛かりそうです。  頑張ってみます。

関連するQ&A