サマリ | CSVページからレコードを読み込んでページを自動生成するプラグイン |
---|---|
リビジョン | 0.14 |
対応バージョン | 1.4.3 |
投稿者 | sha |
投稿日 | 2003-08-08 (FRI) 00:28:00 |
「質問箱/234」を受けて試しに作成。ユーザは若干1名以下かもしんないけど(^_^;)。という事情から、バージョンアップは、なるべくしない予定。。。需要があるなら考えますが。。。とか言ってるうちに、なかなか使い勝手の良いプラグインになってしまったようです。これで誰も使ってくれなかったらどうしよう。。。
例えば、以下のようにデータが記録されているCSVファイルがあるとします。
"商品名","価格","メーカー名","備考" "商品A","5000円","ABC","サンプル" ・ ・
このCSVファイルを読み込み、
■ページ名:商品A ○価格:5000円 ○メーカー名:ABC ○備考:サンプル ○コメント欄
といった新規ページを一括して作ることはできないでしょうか? カード型データベースのためのプラグインでできないかと思ったのですが、ファイルから読み込むことができないようなので……。
なるほど、質問が分かりにくいと思ったらPukiWikiで書かれていなかったのですね。見やすくしておきました。あと、「カード型データベースのためのプラグイン」とは何のことでしょうか?と思って検索してみたら、FreeStyleWiki内にありました。Wiki違いですね。もし既にお使いのWikiがFreeStyleWikiなのだとしたら、ここはPukiWikiのサイトなので問い合わせ先が間違っています。また、もしこれから採用するWikiを選ぶのだとしたら、phpが使える環境ならこのPukiWikiは結構いいですよ。
定型ページを作成するなら「しろくろのへや:tracker.inc.php」が流用できそうです。CSVの各フィールドから引数を生成して、1行毎にplugin_tracker_action()を叩くようなプラグインを作ると可能かも!?
ブロック型プラグイン
#csv2newpage(設定名,[upload,<num_of_skiped_lines>], <CSV第1fieldのパラメータ名>,<CSV第2…>,...)
設定名:tracker.inc.php用に自分で用意する設定ページの名前 upload: 「アップロード&実行」モードの指定。このとき、次の指定が必須。 <num_of_skiped_lines>: CSVファイルのヘッダー飛ばし。先頭からのスキップ行数 <CSV第1フィールドのパラメータ名>:tracker用に定義するパラメータ名 <CSV第Nフィールドのパラメータ名>:上記と同様。フィールドの数だけ追記
AAA,BBB,CCC → 「AAA」「BBB」「CCC」
"AAA,B"BB,"C""CC" →「AAA,BBB」「C"CC」「」
"AAA,B"BB, "C""CC" →「"AAA」「B"BB」「"C""CC"」
AAA,"B →「AAA」「B BB",CCC BB」「CCC」
AAA, "B →「AAA」「"B」 BB",CCC →「BB"」「CCC」
:config/plugin/tracker/製品テーブル :config/plugin/tracker/製品テーブル/form :config/plugin/tracker/製品テーブル/page :config/plugin/tracker/製品テーブル/listとその中身を事前に用意したものとする。そこで定義したパラメータ名と、CSVの各フィールドを#csv2newpageの引数で対応付けする。
製品名,モデル名,販売価格,担当者,電話番号 オレンジPC,3H0123P,100000,担当A,03-1111-xxxx パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx 愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx ごーやPC,3H0126P,100000,担当D,03-1111-xxxx ..... と続く .....
#csv2newpage(製品テーブル, upload, 1, product, model, price, name, phone)
#csv2newpage(製品テーブル, product, model, price, name, phone) ,オレンジPC,3H0123P,100000,担当A,03-1111-xxxx ,パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx ,愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx ,ごーやPC,3H0126P,100000,担当D,03-1111-xxxx ..... と続く .....
【表示例】↓
新規ページ生成:[実行]
オレンジPC | 3H0123P | 100000 | 担当A | 03-1111-xxxx |
パイナップルPC | 3H0124P | 100000 | 担当B | 03-1111-xxxx |
愛媛みかんPC | 3H0125P | 100000 | 担当C | 03-1111-xxxx |
ごーやPC | 3H0126P | 100000 | 担当D | 03-1111-xxxx |
*Newpages under [[ページA]] + [[ページA/1]] --- オレンジPC,3H0123P,100000,担当A,03-1111-xxxx + [[ページA/2]] --- パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx + [[ページA/3]] --- 愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx + [[ページA/4]] --- ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
#csv2newpage(製品テーブル, product, model, price, name, phone) //,オレンジPC,3H0123P,100000,担当A,03-1111-xxxx //,パイナップルPC,3H0124P,100000,担当B,03-1111-xxxx //,愛媛みかんPC,3H0125P,100000,担当C,03-1111-xxxx //,ごーやPC,3H0126P,100000,担当D,03-1111-xxxx
バージョン | 作成日 | 内容 |
![]() | 2004/09/02 | debug/行末空行で行が接続される。空フィールドでデフォルト値とならず前行の値となる。 |
![]() | 2004/08/29 | debug/アップロード使用で最大ファイルサイズ表示が0KB |
![]() | 2004/08/24 | debug/空フィールドに対応 |
![]() | 2003/11/07 | PukiWiki1.4final対応。CSVのダブルクオート対応 |
v0.10 | 2003/10/08 | XHTML1.1 validation check済み |
v0.9 | 2003/09/07 | 固有アンカーを削除しない |
v0.8 | 2003/08/23 | :configのデフォルト値に対応 |
v0.7 | 2003/08/09 | debug/アップロード時に空白行をスキップ |
v0.6 | 2003/08/09 | #csv2newpageの直後のCSVを処理。縦棒による処理は止め。細かいdebug |
v0.5 | 2003/08/09 | debug/添付出来てなかった。他 |
v0.4 | 2003/08/09 | メッセージを一部修正 |
v0.3 | 2003/08/09 | CSVファイルをアップロード&実行 |
v0.2 | 2003/08/08 | debug/tracker.inc.php v1.7で動かなかった |
v0.1 | 2003/08/08 | tracker.inc.phpを利用して新規作成 |
このプラグインを使用していますか?一人1回のみ投票して下さい。
選択肢 | 投票 |
使用している | 72 |
attach.inc.phpと連動して、「CSVファイルを添付すると同時に、その各レコードを処理して新規ページを生成する」っていう仕様でもいいかもね。
なんかそういう機能も作っちゃいました。結構苦労しましたが、うまく動作しているようです。「sha:csv2newpage.inc.php」を参照のこと。
うん。やっぱり、こちらの仕様の方がはるかに便利ですね。CSVファイルのアップロードとページ生成の実行が同時なのがうれしいところかな?
CSVをページ内に貼り付けるやり方で使わせていただきました。すばらしいです!これなら既存の表計算データ等をWiki上で簡単に活用できますね。ありがとうございました。
どういたしまして。ポイントの一つは、tracker.inc.phpのフォーマットに従っているため、tracker.inc.php自体の#trackerを用いれば、「CSVファイルで作ったファイル群に、手作業で1ページずつ新規ページを追加することもできる」という点ですね。
懸案事項としては、【2】の場合、現在「ページA」内の全ての行をチェックして、CSVに該当する部分を適用してますが、これを#csv2newpageを記載した直下から始まるCSV部分のみ適用するような仕様に変更することですね。複数の#csv2newpageが「ページA」に含まれていても、適用するCSVをちゃんと区別できるようにする必要があります。
csv2newpage.inc.php.6にて対応済み。
懸案事項2として、CSVのテーブルに対応付けされてない項目について、デフォルト値を設定したり空文字を設定したりする必要がありました。csv2newpage.inc.php.7では、[name]などのパラメータがそのままページに埋め込まれてしまうので。
csv2newpage.inc.php.8で対応。
trackerを進捗確認表のように利用する際に、項目を一括登録する際に利用したいと思って試しに使わせていただいています。これは便利ですね。newpage2csvなんて逆変換用pluginがあればPukiWiki上で更新された情報を他のツールでも使いまわせるんだけどなぁ
ところで『カンマや縦棒を、""で囲ってもフィールド区切りを避けることはできない。』と書かれていましたが、merlin さんのlist_box2プラグインを用いたtrackerサンプルを見て、項目内にカンマがあるケースでもこのpluginを利用するために、ダブルクォートによって区切り文字とさせないようにてみました。参考までにこちらに載せさせていただきます。コーディング規則等を見ずに書いたので、不適切なところがあると思いますが、もしよろしかったら適切に修正後マージしていただけませんか?邪魔なようなら削除してください。
■ 追加場所した場所
以下のスクリプトの直前に追加しました。
$csv_ct = 1; foreach ( $csv_fields as $csv_f ){■ 追加コード
/////////////////////////////////////////////////////////////////// // ダブルクォート処理 // ダブルクォートで囲まれている場合は、カンマ文字を復活させる。 $dquot_flag = False; $csv_stack = array(); foreach( $csv_fields as $dummy_csv_f){ // カンマの前後のダブルクォートを判断する。 if ( $dquot_flag ) // ダブルクォートに囲まれていると判断している場合 { $chk_f = rtrim($dummy_csv_f); if ( $chk_f{strlen($chk_f)-1} == '"' ){ $dquot_flag = False; $chk_f = substr($chk_f,0,-1); } $prev_stack_f = array_pop($csv_stack); $prev_stack_f .= ',' . $chk_f; array_push($csv_stack, $prev_stack_f); } else // これまでの判断部分がダブルクォートに囲まれていない場合 { $chk_f = trim($dummy_csv_f); if ( $chk_f{0} == '"' ) { $dquot_flag = True; $chk_f = substr($chk_f,1); } // 処理するフィールドがダブルクォートで閉じられている場合の処理 $dummy_chk_f = rtrim($chk_f); if ( $dummy_chk_f{strlen($dummy_chk_f)-1} == '"'){ $dquot_flag = False; $chk_f = substr($dummy_chk_f,0,-1); } array_push($csv_stack, $chk_f); } } // 組み直した配列で置き換える。 unset($csv_fields); $csv_fields = array_values($csv_stack); ///////////////////////////////////////////////////////////////////
わかりました。取り込んで頂けると修正しなくてもよくなるので助かります。よろしくお願いします。
出来ました。csv2newpage.inc.php.11で、PukiWiki1.4finalと、それから結構苦労しましたが、CSVのダブルクオートに対応しました。Excel2000の読み取り仕様に合わせてみました。どんな仕様なのかを探るのと、うまい正規表現を記述するのが大変でした。うまく行っているようです。お試しください。
ダブルクォートでの囲みに対応していただき、ありがとうございました。このところ時間が取れずPukiWiki1.4finalにまだアップデートしていないのですが、近日中に試して御報告したいと思います。
ダブルクォート内の改行にも対応するなんてすごいですね。備考欄のように改行コードが入るようなフリーコメントにも対応できるのかな...試してみるのが楽しみです。
遅くなりましたが、PukiWiki1.4.2(onWindowsXP)で動作確認してみて、問題ないことを確認しました。ありがとうございます。
改行コードを含むパターンも試してみました。表示上、改行がなされない!と思ったらPukiWikiですもんね。編集ページでは改行がされていたんで、表示上も改行させるには、チルダ(~)が必要でした。要望以上の対応をしていただいたのに、あつかましいお願いなのですが、もしよかったら、チルダ(~)の自動挿入も検討してみてもらえないでしょうか?よろしくお願いします。
契約番号,名前,価格,完了日, 001,AA,"3,000",2004-09-10, 003,BB,"4,500",2004-09-19, 007,CC,"2,000",2004-09-07,と言った、CSVファイルがある際に
#csv2newpage(設定名,upload,1,_name,name,price,enddate)と記述することにより、ページ名が001、003、007と割り振れるようになると