環境はxp、apache2、php5、Postgresql8.2です。
1台のPCをサーバ&クライアントにしています。
ただ今PHPとPostgresqlの勉強をしています。
いつも質問に答えてくれてありがとうございます。
以下のようにしてcsvファイルを読み込む処理をしています。
---------------------------
//ファイルを開く
$fd = fopen ("c:\Book5.csv", "r");
//データを読み込む
while (!feof ($fd)) {
//「,」区切りでデータを分割
$line = split(",",fgets($fd));
---------------------------
ここで問題となるのは、
一つのデータに複数行ある場合、取り込む事が出来ません。
(行の最後と判断されるため?)
どのようにしたら
取り込めますか?
No.3ベストアンサー
- 回答日時:
そのcsvってエクセルあたりでだしてます?
csvデータが
"あけまして
おめでとうございます","ことしもよろしく"
というデータであれば、#1でも回答したとおりfgetcsv()で取れます。
改行マークがきちんとクォーテーションでくくられているのが重要。
ただ、トラブルのもとなのでcsvのデータの一部に改行をいれるのは
感心しませんが・・・
またもしSQLにデータを渡したいということであれば、改行マークは
気をつけたほうがよいですね
なにか別文字に変えるなどPHP側で処理をを入れたほうがよいかも
しれません
No.4
- 回答日時:
CSVは、ただカンマで区切られているわけでなく
以下の仕様があります。
1. 原則として 1 行が 1 レコードとなる。 ただし、 フィールド全体を "ダブルクォーテーション で囲むことで、 フィールドの途中で何回でも改行できる。
2. 各フィールドは一つの ,カンマ で区切られる。 ただし、 フィールド全体を "ダブルクォーテーション で囲むことで、 フィールドの中に ,カンマ を使用できる。
3. フィールド内部の "ダブルクォーテーション は 「""」 とエスケープされる。
CSVの取り込みを自分で作るのは意外と大変です。
「CSVは、カンマで区切られている」と言う認識は、間違いです。
参考URL:http://www.ietf.org/rfc/rfc4180.txt
No.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形式へ移行できないか検討します。
勉強中であればこの辺を考察するのはまだ先かと思われますが、一応言及しておきます。
No.1
- 回答日時:
>一つのデータに複数行ある
意味がよくわかりませんが、csvの取り込みなら
fgetcsv()あたりをご利用になっていはいかがですか?
http://www.php.net/manual/ja/function.fgetcsv.php
この回答への補足
説明不足でした。
申し訳ありません。
>一つのデータに複数行ある
というのは、
---------------------------
あけまして
おめでとうございます
---------------------------
これが一つのセルに入っていると言うことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Excel(エクセル) Excel Powerクエリーの質問、行数指定は可能でしょうか? 2 2022/08/22 12:54
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
VBA 毎日取得するデータを順番...
-
エクセルで1次近似をもとめたい
-
Excelのマクロでワードのテキス...
-
VBA 該当データがない時 ...
-
VBA 空白セルを削除ではない方...
-
C#にてDropDownListの値を動的...
-
マクロVBAについて
-
ミラーデータとは?
-
LoadPictureしたイメージデータ...
-
ADOを使用してExcelデータをAcc...
-
【VB】DataGridViewにテキスト...
-
Android携帯をUSBメモリ代わりに
-
【エクセル】測定時間がバラバ...
-
最大値、最小値
-
シリアル通信でのデータ受信
-
javaでDBからデータを取ってき...
-
シーケンサにパソコンからアク...
-
レコードセットのデータを1行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
配列でデータが入っている要素...
-
多量のSUMIF式を軽くしたい
-
エクセルで2つの時系列のデー...
-
Excelのマクロでワードのテキス...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
VBAを使ってOutlookメール本文...
-
Accessで該当データにフラグを...
-
合計3TBのデータのハッシュ値を...
-
シーケンサにパソコンからアク...
-
S9タイプからXタイプにデータ...
-
カンマからスラッシュに
-
VBAでシートからコンボボックス...
-
VBA 毎日取得するデータを順番...
-
ビットシフトについて
-
ユーザーフォームのテキストボ...
-
EXCELVBAでSQLserverからデータ...
-
特定のデータの抽出方法を教え...
おすすめ情報