プロが教えるわが家の防犯対策術!

環境はxp、apache2、php5、Postgresql8.2です。
1台のPCをサーバ&クライアントにしています。
ただ今PHPとPostgresqlの勉強をしています。

いつも質問に答えてくれてありがとうございます。

以下のようにしてcsvファイルを読み込む処理をしています。
---------------------------
//ファイルを開く
$fd = fopen ("c:\Book5.csv", "r");

//データを読み込む
while (!feof ($fd)) {

//「,」区切りでデータを分割
$line = split(",",fgets($fd));
---------------------------
ここで問題となるのは、
一つのデータに複数行ある場合、取り込む事が出来ません。
(行の最後と判断されるため?)

どのようにしたら
取り込めますか?

A 回答 (4件)

そのcsvってエクセルあたりでだしてます?



csvデータが
"あけまして
おめでとうございます","ことしもよろしく"

というデータであれば、#1でも回答したとおりfgetcsv()で取れます。
改行マークがきちんとクォーテーションでくくられているのが重要。

ただ、トラブルのもとなのでcsvのデータの一部に改行をいれるのは
感心しませんが・・・

またもしSQLにデータを渡したいということであれば、改行マークは
気をつけたほうがよいですね
なにか別文字に変えるなどPHP側で処理をを入れたほうがよいかも
しれません
    • good
    • 1

CSVは、ただカンマで区切られているわけでなく


以下の仕様があります。

1. 原則として 1 行が 1 レコードとなる。 ただし、 フィールド全体を "ダブルクォーテーション で囲むことで、 フィールドの途中で何回でも改行できる。

2. 各フィールドは一つの ,カンマ で区切られる。 ただし、 フィールド全体を "ダブルクォーテーション で囲むことで、 フィールドの中に ,カンマ を使用できる。

3. フィールド内部の "ダブルクォーテーション は 「""」 とエスケープされる。

CSVの取り込みを自分で作るのは意外と大変です。
 「CSVは、カンマで区切られている」と言う認識は、間違いです。

参考URL:http://www.ietf.org/rfc/rfc4180.txt
    • good
    • 2

>一つのデータに複数行ある


「一つのデータが複数行ある」のtypoですな^^;

header,1,2,3,4
title,test
body,a,b
header,5,6,7,8
title,hogehoge
body,c,d

上記のように一つのデータが何行あるというのが予め判明しているならば

$ret = array();
$line=0;
$rownum = 0;
while(!feof($fhn))
{
 $csv = fgetcsv($fhn);
 $rownum = intval($line / 3); //3行ごとにデータの始まりが存在
 $ret[$rownum][] = $csv;
 $line++;
}
print_r($ret);

とすると
ret = array(
 0 => array(
  0 => array('header',1,2,3,4)
  ,1 => array('title','test')
  ,2 => array('body','a','b')
 ),
 1 => array(
  0 => array('header',5,6,7,8)
  ,1 => array('title','hogehoge')
  ,2 => array('body','c','d')
 )
)
が得られます。(動作は未確認)
この辺はプログラマとして創意工夫できるところです。

が、特殊な仕様のCSVを読む場合はあまりこういうことをしません。
オブジェクト内で生のデータを保持し、データを取り出すときに必要なものだけを取捨選択できるようにしたり
そもそも生データをXML形式へ移行できないか検討します。
勉強中であればこの辺を考察するのはまだ先かと思われますが、一応言及しておきます。
    • good
    • 0

>一つのデータに複数行ある



意味がよくわかりませんが、csvの取り込みなら
fgetcsv()あたりをご利用になっていはいかがですか?

http://www.php.net/manual/ja/function.fgetcsv.php

この回答への補足

説明不足でした。
申し訳ありません。

>一つのデータに複数行ある
というのは、
---------------------------
あけまして
おめでとうございます
---------------------------
これが一つのセルに入っていると言うことです。

補足日時:2007/12/21 11:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!