• 実験室
  • 実験室について
  • 実験レポート一覧
アイコンの説明
  • デザインデザイン
  • 企画企画
  • 画像処理画像処理
  • DynamicHTMLDynamicHTML
  • HTML,CSSHTML,CSS
  • JavaScriptJavaScript
  • Movable TypeMovable Type
  • WordpressWordPress
  • XOOPSXOOOPS
  • XSLTXSLT
  • Objective-CObjective-C
    iPhoneネイティブアプリ
  • Flash,ActionScript Flash,
    ActionScript
  • SilverlightSilverlight
  • PerlPerl
  • PHPPHP
  • VisualBasicVisualBasic
  • SQLServerSQLServer
  • MySQLMySQL
  • OracleOracle
  • PostgreSQLPostgreSQL
  • その他DBその他DB
  • サーバ関係サーバ関係
  • モバイルモバイル
各コンテンツは、弊社で調査及び実験の結果に基づくものですが、制作環境などの要因により、所定の結果が得られない場合も考えられます。 また、掲載内容の使用あるいは信頼性に関連して生じる直接的、間接的、派生的な損失または損害に関して、一切責任を負いません。あらかじめご了承ください。
Valid XHTML 1.0 Strict Valid CSS!

実験レポート

  • 【中級】 ExcelとCSVについて  - No.03 -

    掲載日:2007.01.15
  • その他

今回は、Excelが出力した特殊な形式のCSVをそれぞれデータとして認識する方法を実験しよう。言語はなんでもいいが、手っ取り早いのでPerlで実験することにしよう。A君、Excelが吐き出すCSVはどのようなものか、おさらいで説明してごらん。
えーと・・・こんな感じですよね?
1.基本的には改行を区切りとして1行が1セットのデータ、カンマで区切られた部分が値である。
2.値の中にカンマ・ダブルコーテーション・改行コードが含まれる場合は、値をダブルコーテーションで囲む。
3.値の中にあるダブルコーテーションは、ダブルコーテーション二つを並べる。
その通り。
まず、一番やっかいなのが、改行じゃ。改行はレコードの区切りの場合とデータとしての改行とが存在するため、1セットのデータをどう取り出すかが重要なんじゃ。どうすればいいと思うかね?
うーん、データのほうの改行は必ずダブルコーテーションで囲まれていると思うけど・・・・
おおっ!Bさん、今日は冴えてるねえ!そこが重要なんじゃ。で、どうやって判断するかだね。
そこなのよねえ。。どうしよう。
そっか!たとえば、CSVデータを1行ずつ取ってきたとき、データの中の改行だとすると、その1行データは必ずダブルコーテーションが奇数含まれていることになるんじゃないかなあ?もしそうだったら、次の行をくっつけてダブルコーテーションが偶数個になるまでくっつければ、正しい1行のデータになるんじゃないかな!
おおっ!A君も今日はすばらしい!その方向でまずは配列に1行ずつのデータを入れるプログラムを作ってごらん。ちなみにダブルコーテーションが含まれている数を数えるなら、tr変換演算子を使うのがいいぞ。
えーと、こんな感じかしら。
$file = 'data.csv';
@result = ();
open(DATA,$file);
while($temp = <DATA>){
	while(($temp =~ tr/"//) % 2 == 1){
		$temp .= <DATA>;
	}
	push(@result,$temp);

	## 確認
	print "------------------------\n";
	print $temp;
	print "------------------------\n";

}
close(DATA);
					
おお、よくできたね!
次回はこの続き、フィールド別にデータを取り出して、ダブルコーテーションなどを元に戻して各データをもとのエクセルと同じ状態に戻す部分じゃ。じゃな!
(・・・続く)

(文責:金澤)

このページのトップへ