• 締切済み

csvを扱う便利な コード(関数群)はありませんか?

fputcsv fgetcsv で 現在cvsからデータを取得しています。 数Kbでデータ自体がすくないことと MySQLつかうのも面倒なのでfputcsv,fgetcsvでデータを扱おうとおもっていますが 問題が起こって 直接全行データだと ふと わすれたころに 項目の途中に追加して 内部で項目を増やしたときに順序を維持するのが大変になってしまいます (データ列の順序がくずれてしまうので管理が大変) そこで 列の順序が変わっても問題ないように 1行目 項目名 2行目から データにしようと思っています 1行目を読み込んで 配列に項目名にして 2行目から それをわりあてていくことでできますが そんな感じの ライブラリないでしょうか?  なければ、1時間くらい時間をさいて 自分でcvsの簡易DB classを作りますけど もしあるのでしたらよろしくお願いします。

noname#13325
noname#13325
  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

とりあえず自分で作るほうが確実じゃないですかね? 1時間とみつもってらっしゃいますが、、まぁ ヘッダをベースに配列をくみなおすだけなんで 10分もあればつくれるでしょう? ちなみにcvsとcsvは両方あるので、どっちかはっきり しておいたほうがいいですよ。 本人にしてみれば単純な書き間違いかもしれませんが 応える方にしてみれば質問者の意図がまったく 混乱の元です。

noname#13325
質問者

お礼

配列にいれるだけなら 1行目の順序で { $NewLine[Fields[key]] = value } みたいに2行目から配列にいれかえるだけなので2分もかかりません。 ヘッダだけでなく classにして Fields FieldDefs FieldByName FindField だけでなく Filterプロパティを実装させて データの絞り込み機能を加えようかと おもって1時間みつもりました。 ありそうな気がするので オープンソースでそういうのがあれば あまり込み入った手入れをしなくて済むので 質問しました

noname#13325
質問者

補足

日本のページを探して見つからなかったので きいてみたのですが 海外のページを探すのを忘れていました。 日本にはなさそうなので ちょっと自分で 海外のページ探してみます。 それで なければ 自分で 作ろうかと思います

関連するQ&A

  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • CSVからの抽出について

    自分のウェブサイトで画像の並び替えを行いたいと思いまして先日からphpを勉強中なのですが 解説サイトを読んでも良くわからない事が出てきました。 やりたい事はウェブサイトでラジオボタンを作り季節順やデータ作成日順などをチェックすると 任意に並び替えられるというものです。 以下のデータをCSVで作りfgetcsv()関数で呼び出してから、例えばデータ作成日順で並び替え て、降順でしたら事前に用意しておいた景色画像を景色4、景色3、景色2、景色1という順番で表示したいです。 fgetcsv()関数で呼び出し、データ作成日順で並び替えまではできましたが、そもそも思うに、景色1と 20120105と秋はまったく別のデータで関連性がありませんよね?(行ごとにデータがまとまってる わけではありませんし、なのでデータ作成日で順序を弄っても同じ行の景色1や秋などが 並び替えられてるわけではないですよね) この辺りがまったく原理的なものがわかりません。 何か各行を1つの配列とする方法があるのでしょうか? 初歩的な質問ですみませんがアドバイスいただけると助かります。 名前,データ作成日,季節 景色1,20120105,秋 景色2,20120303,夏 景色3,20120405,冬 景色4,20120805,冬

    • ベストアンサー
    • PHP
  • phpでcsvの処理で困ってます。

    abc.csvというcsvデータを2次元配列にして、その中から指定した行(送信されてきた値$linenum = $_POST['num'];)の5番目の値を1つ増やして、またcsvデータに上書きしたいと思い下記のようにしてみたのですが、うまくいきません。どのようにすればいいのでしょうか、具体的に教えていただければ、ありがたいです。よろしくお願いします。 <?php header("Content-Type: text/html; charset=UTF-8"); $linenum = $_POST['num']; $list = fopen("abc.csv", "w"); $h = 0; while ($array = fgetcsv($list, 1000,",")) {   for ($i = 0; $i < count($array); $i++){   $newarray[$h][$i] = $array[$i]; } $h++;  } $cu = $newarray[$linenum][4]; $cu = $cu + 1; $newarray[$linenum][4] = $cu; fputcsv($list, $newarray); fclose($list); ?>

    • ベストアンサー
    • PHP
  • 助けてください!CSVファイル作成

    こちらのエクセル97で作成した表データを取引先よりデータをCSV形式で定期的に送って欲しい旨要請されました。 単に保存形式をCSVにすればいいのだと思い、OKしたのですが・・・・・。 なんと、先方が言うには、一つの表はワンレコードにしなさいとのこと。どういう意味かきいたら、要はカンマ区切りの1列のデータにしろと言うことのようです。 ところがこちらの表は何行にも別れているため(表ですから当然ですが)1行に直すと256列をかなり超えてしまうのです。ということはエクセルの1行にはおさまらなくなり、エクセルシートをCVS形式で保存するというやり方では出来ません。こういう場合、いったいどうすればいいのでしょうか?

  • MysqlにURLを登録する方法

    MysqlにURLを登録したあと、それをXMLで落として、使用したいと考えています。 MysqlにURLを登録する場合、テーブルに項目名を「hpurl」と設けたとして、データ型・照合順序はどうすればいいのでしょうか。 (入力はDBに直接、手入力、またはCSVからインポートする予定です) データ型は「varchar(255)」・照合順序は「ascii_general_ci」でいいのでしょうか。 また、そのほか留意することがあるでしょうか。 ご教示いただきたく宜しくお願い致します。

  • MYSQLからCSVへの書き込み方法

    MYSQLからCSVへの書き込み方法で質問があります。 下記のコードを記載しましたが DBのデータ件数分の改行しか出力されませんでした。 ブラウザ上でecho動作させた際には、 echo "<p>CSVファイルにセットされるデータ:".$string; でしっかりデータが設定されていました 何が悪いですか? ////////////////////////////////////////////////////////////////// // DBからCSVファイル書き込み(全件新規) // $file_name:csvファイル名 ////////////////////////////////////////////////////////////////// function DB_csvSet($file_name, $dbhost=DBHOST, $dbuser=DBUSER, $dbpass=DBPASS, $dbname=DBNAME) { print "DB_csvSet start"; // MySQL 接続 if (!($cn = mysql_connect($dbhost, $dbuser, $dbpass))) { die("DB_csvSet Error: mysql_connect"); } //MySQLのクライアントの文字コードをsjisに設定 mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis"); // MySQL DB 選択 if (!(mysql_select_db($dbname))) { die("DB_csvSet Error: mysql_select_db"); } // MySQL 問い合わせ $sql = sprintf("select * from %s", TABLE_NAME); if (!($rs = mysql_query($sql))) { die("DB_csvSet Error: mysql_query"); } // ファイルを新規モードで開く $file = fopen($file_name, "w") or die("OPENエラー $file_name"); // ファイルをロックする flock($file, LOCK_EX); // MySQL レコード参照 while ($item = mysql_fetch_array($rs)) { printf("id=%s ", $item[ITEM_ID]); printf("name=%s ", $item[ITEM_NAME]); printf("point=%s<BR> ", $item[ITEM_POINT]); // 3つの変数から配列を作成する $array = compact($item[ITEM_ID], $item[ITEM_NAME], $item[ITEM_POINT]); // $array = compact("id","name","point"); // 配列のデータをカンマで区切って結合する $string = implode(",", $array); // 結合された文字列を表示する echo "<p>CSVファイルにセットされるデータ:".$string; // データを書き込む fputs($file, $string."\n"); } // ロックを解除する flock($file, LOCK_UN); // ファイルを閉じる fclose($file); // MySQL 切断 mysql_close($cn); // 正常終了 print "正常終了"; }

    • 締切済み
    • PHP
  • fgetcsvでCSVを取得した際のnullに関し

    phpでfgetcsv関数を使用して、取得したデータをDBに登録するという作業を行いたいと考えています。 ですが、CSVでNULLの部分の取得が上手くいっていないようで、DBには「NULL」という文字列で取り込まれてしまいます。 「\N」にすることでNULLとして登録出来るという情報があったので、CSVを修正して「NULL」を「\N」にしてみたのですが、やはり「\N」という文字列として登録されてしまいました。 正常にNULLとして認識させるにはどのような対応を行えば良いのでしょうか。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • fputcsvで保存せず、そのまま出力したい

    mysql_fetch_arrayで得た連想配列をCSV形式で出力するようなプログラムを考えました。 $urs = array(); mysql_select_db( $dbName, $link ); $res = array(); $text=""; $temp = mysql_query( "SELECT * FROM nes ", $link ); while( $urs = mysql_fetch_array($temp , MYSQL_ASSOC) ){ $res[]=$urs; } fputcsv($text , $res); print($text); しかしfputcsvは配列をファイルにCSV形式で出力するプログラムなので、上ではエラーが出てうまくいきません。 本来ファイルに書き込むはずのテキストを、そのまま出力することができる良い方法があれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVについて教えてください

    ワードで作ったデータ(下記のようなもの)を、エクセルにCSV形式で取りこむ時に セルの場所を指定をすることは可能なのでしょうか? 例えば) 生徒名 名前:あいうえお 名前:かきくけこ 名前:さしすせそ ・ ・ ・ 学部 学科 学生番号 というWordファイルがあるとします。 ・「生徒名」は (2列め1行目のセル) ・「名前:あいうえお  名前:かきくけこ  名前:さしすせそ」は(3列め5行めのセルから) ・「学部」は(5列め1行め) ・「学科」は(6列め1行め) ・「学生番号」は(7列め2行め) といった感じで、それぞれ指定したセルに自動的にはいる方法があれば うれしいのですが・・。 何か最初に設定などをしたら出来るのでしょうか? かなり困っています。 よろしくお願いしますっ!!

  • CSVファイルの改行

    似たような質問はあったのですが、解決できませんでした。 複数のテーブル(mysql)から抽出したデータをCSVファイルにして ダウンロードという動きを作りましたが、Excelでは改行されているのに メモ帳だと改行されません。 配列の最後に"\r\n"を挿入してみたところ、メモ帳での改行はできたのですが、 Excelに必要ない改行が入ってしまいます。(あたりまえですよね) 改行コードの入れるタイミングと方法を教えて頂けますか。 select文 while($rows = @mysql_fetch_array($result)){ $list[$i] = array ($aaa,$bbb,$ccc); $i++; } $filename = 'ファイル名'; $fp = fopen($filename.'.csv', 'w'); foreach ($list as $line) { fputcsv( $fp , $line ); } fclose($fp); ZIP圧縮処理後ダウンロード 環境:php5,mysql5

    • 締切済み
    • PHP