ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:DB+CSV) DB+CSV形式での情報サイト開発のデメリットとは? 2009/03/04 15:54 このQ&Aのポイント PHP+MySQLで情報サイトの開発を行っている際、お客さんからの仕様変更が頻繁にあります。共通項目は20カラムほどあり、非共通カラムは60〜70カラムあります。非共通カラムをCSV形式で管理することを考えていますが、この設計にはデメリットがあります。 DB+CSV 今、仕事を受注してPHP+MySQLで情報サイトの開発を行っているのですが お客さんが結構頻繁に仕様を変更を要求してきたり ・共通項目は20カラムほど ・非共通カラムは60~70カラム 計80~90(100)カラムx7種類って感じになりそうです。 でこの非共通カラム部分をCSV形式で管理するのはどうかな?っと思ったのですが (正規化して共通部分とそうでない部分をわけろって言われそうですが) デーブル設計を 主キーカラム(オートナンバー) 共通項目Aカラム 共通項目Bカラム 共通項目Cカラム 情報タイプ(7種類ほど) CSVを格納するカラム CSV部分の設計は 「項目名(値)」って感じにそればいいかなって思いました。 (や)や仕切り部分「,」に関してユーザが入力した場合はPHP上で全角に置換してデータベースに格納 例) A(1),B(あいうえお),C(0)・・・・・・ A(0),B(かきくけこ),C(0)・・・・・・ A(0),B(たちつけと),C(1)・・・・・・ A(1),B(かきくけこ),C(0)・・・・・・ で検索時にはWhere部分を 非共通項目のカラム名をitemとしたら item like '$A(1)%' And item like '$C(0)%' って感じで検索させればいいかな?と思ったのですが ・そもそもこういう設計(DB+CSV)は駄目ですか? ・もしこういう設計でやった場合のデメリットはなんですか? ・やはり項目ごとにカラムを作った方がいいですか? 質問の原文を閉じる 質問の原文を表示する みんなの回答 (4) 専門家の回答 質問者が選んだベストアンサー ベストアンサー jamshid6 ベストアンサー率88% (591/669) 2009/03/04 20:39 回答No.2 1つの意見として。。 リレーショナルデータベースのカテゴリに書いている以上、「そのデザインでもいい」とは誰も言わないと思いますが、 現実問題として、正規化を進めるほど仕様が固まらない上に、手戻りのコストも負えない以上、そこの部分の正規化はあきらめて進むしかないのでは? CSVと書くと奇異に映りますが、その発想自体は要はXML DBと同じです。リレーショナルの世界でも項目数不定のケースで XMLをテーブルに収録するアプローチは使うことがあります。 このアプローチでデメリットがあるのは、 ・1カラムにどれだけ長いデータが入っても、一部分でも更新するときにはカラム全体を取り出して更新しなくてはならないこと ・整合性・データ型などについて、データベースで保証できなくなること ・範囲検索はもちろん、データに対する一部検索も前方一致以外はできなくなること ・フィールド名にも制約が生じること(住所と自宅住所があったらダメ) ・万一、検索が遅いと言われても打つ手がないこと(インデックスも効かないし) ・後でメンテナンスするのが大変、また蓄積したデータを転用したくなっても容易にできない など。。 別のアプローチとして、テーブル分割はダメなんでしょうか? 属性を自由に追加変更削除できることをウリにしているシステムでは、属性データを縦持ちしているケースも多いです。 メインテーブル (主キー、共通項目、情報タイプなど) サブ項目属性テーブル (項目番号、項目名) サブ項目テーブル (主キー、項目番号、文字、数値、日付) もちろん、個別項目に対する参照整合性は捨てた上でのアプローチであることは変わりませんけど、存在しない属性は登録できないですし、 データ型は保証されます。インデックスも張れますし、検索の柔軟性もかなり上がります(複合検索のクエリがやや書きづらくはなります)。 質問者 補足 2009/03/04 21:37 >・1カラムにどれだけ長いデータが入っても、一部分でも更新するときにはカラム全体を取り出して更新しなくてはならないこと 今回のシステムにおいて&更新画面では一通りの項目を出して更新して 変更ある部分と内部分の差分チェックをして更新部分のみUPDATEを発行する予定はありません。 >・整合性・データ型などについて、データベースで保証できなくなること 今回のシステムにおいてデータ整合性をチェックしないといけないのは数値部分だけですね。後はほとんど通常のテキストタイプとリストボックスとチェックボックスですので数字部分はPHP側でctype_digitやis_numericで判別して入力チェックは実装します。 >・範囲検索はもちろん、データに対する一部検索も前方一致以外はできなくなること 各項目部分は「項目名(値)」を利用しますから範囲比較はできなくても 前方一致「%項目名(%値)%」 のほかに後方一致も「%項目名(値%)%」では駄目ですか? >・フィールド名にも制約が生じること(住所と自宅住所があったらダメ) これに関しては各種プロトコルの開始コード/終了コードみたいなものを項目名(値)の頭と最後につけて「^」を制御コードとして使って ^項目名(値)^みたいにすればいいかなって思っています。 そのかわり^は項目名で使えなくはなりますが >万一、検索が遅いと言われても打つ手がないこと(インデックスも効かないし) 検索に使うカラムはよく使いそうな物は個別のカラムとして用意してやるつもりです。 >存在しない属性は登録できないですし、 どっちにしてもシステムでデータベースエラーが出るのはまずいのでどのようなシステムを作るにしても入力チェックはPHP側でする必要があります。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (3) jamshid6 ベストアンサー率88% (591/669) 2009/03/05 02:01 回答No.4 #2です。 現在の状況に鑑みればデザインを根本的に変えるつもりはなく、要は誰かに背中を押してもらいたい状態なのかな、と推測しています。良し悪しの判断基準は所詮「今回のシステムで、データベースにどこまでの役割を期待するのか」により変わるものです。 最初から必要最小限の検索とデータ保管庫の役割以上を期待しないのであれば、今のデザインは1つの考え方だと思いますしね。 蛇足になりますが。。 >前方一致「%項目名(%値)%」のほかに後方一致も「%項目名(値%)%」では駄目ですか? これはだめだと思いますよ。質問者さんの例で、 「A(1),B(あいうえお),C(0)・・・・・・」 に対して、「%A(%うえお)%」は通常Trueになります。 >どっちにしてもシステムでデータベースエラーが出るのはまずいのでどのようなシステムを作るにしても入力チェックはPHP側でする必要があります。 データベースの正規化や各種制約の設定は、極論すればアプリケーションがどんな誤作動をしても、データベースが独立した存在として整合性を失わないためにするものだと私は思います。したがって、アプリ側だけでチェックするのも、データベース側だけでチェックするのも本来は不正解です。 質問者 補足 2009/03/05 12:16 >最初から必要最小限の検索とデータ保管庫の役割以上を期待しないのであれば まぁ検索が遅くなった場合は相手にあきらめてもらうしかないですね。 後からいろいろ追加したり言うことが変わってきた代償としてね。 (実際今日もこれ以上追加があるとプログラムの方に入れないし仕様変更ばかりだと作業が遅れるだけです。と昨日の時点でもう一回受元の経由で受注元の方に言ってもらったのですが今日も追加を出してきましたから) >これはだめだと思いますよ。質問者さんの例で、 >「A(1),B(あいうえお),C(0)・・・・・・」 >に対して、「%A(%うえお)%」は通常Trueになります。 確かに言われてみればそうですね。 しかも自分が書いたの前方一致と後方一致が逆になっていたですね。 ただ今回のシステムの場合、検索に必要なのは主に数値そのものの範囲検索(ここは独立カラムにする)とリストボックスやチェックボックスで登録したデータの検索でリストボックスやチェックボックスに関してはValue値は数字だけですからなんとかなると思います。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 hisappy ベストアンサー率46% (184/392) 2009/03/05 00:54 回答No.3 「仕様が完全には確定しない」のと 「動くものを作る必要がある」という状況においては 質問文にある設計は実は最適な解の1つだと思います。 外野の意見となりますが、 そのような暫定的な設計で進行するのであれば PHPであるのを利用して管理コンソール(仮称)のような画面を用意して 本来ならドキュメントに詳細を記載すべき部分を 画面表示させるように対応してみてはどうでしょう。 つまり、これから先の仕様変更におけるDB設計のややこしさを システム側に管理させてることで いわゆる「ドキュメントの不備」を 「コレコレの画面参照」で逃げられる(??)ようにするのです。 応用すると、項目の追加とかリレーションの変更が その管理コンソール(仮称)をウニウニと操作するだけでできるので 稼動後の仕様変更にもコストがドカンでチョコンのボコンと…おっとと。。。 その一方で、「本来の仕様の設計」と 「暫定的仕様の設計」が併走するような格好になるので その点を理解してないと メンテナンスの際に摩訶不思議なロジックに見えてきます。 理想論からいえばそのような設計は駄目なのかもしれませんが、 システムとしては今動かせるものが作れることが大事だと思いますので 併走しながらその手法も成熟させてみるのは良いでしょう。 成功したら一冊本が書けそうな汎用的システムになりそうです。 質問者 補足 2009/03/05 01:18 >応用すると、項目の追加とかリレーションの変更が >その管理コンソール(仮称)をウニウニと操作するだけでできるので >併走しながらその手法も成熟させてみるのは良いでしょう。 納品を遅くとも4月いっぱいでしないといけないのと作業人数も今回はフリーでの仕事で 要求の都度データベース設計を何回もやり直している余裕も無いですし (すでに要求の変更で2回データベース設計をやり直していますし これ以上データベース設計の変更ややり直しに時間がとれないというのもありますけど) そんな細かいエンジンを作る余裕は無いのですが 各タイプごと異なる項目部分で毎回言うことが変わることが多いので 1.各タイプすべて共通部分は独立カラム 2.各タイプで共通項目ではないが検索で範囲指定(数値)が必要な項目は独立したカラム 3.各タイプで非共通なその他の部分に関しては一つのカラム内でCSV形式で管理 って感じになりそうですね。 で1と2の部分と3の部分の判別をテーブル一つ用意して 項目管理テーブル ・主キーカラム:2桁のテキストもしくはtinyint ・独立項目情報カラム:ここもCSV形式で独立させるカラムを書く 例) (主キー00はすべての情報タイプで共通部分として) 00:Uid,Name,Day 01:Number1,Number2 02:Number3,Number5,Number1 03:Number4,Number2 こんな感じでデータベースで管理してそれをPHPに渡して データベース側の独立カラムと一つのカラムにまとめる項目を判断させて入力フォームから入ってきた値を各フォーム項目のNAME属性をそのまま利用して(セキュリティー上データは最低限のエスケープ処理をして)処理する簡易エンジンを作ろうと思っています。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 nora1962 ベストアンサー率60% (431/717) 2009/03/04 16:59 回答No.1 > (正規化して共通部分とそうでない部分をわけろって言われそうですが) 私もそう言います。 一旦こういう設計にしてしまうと後々のメンテナンスが大変な上に、検索 の際にパフォーマンスも上がらず、いいことあまり考えられないんですが。 質問者 お礼 2009/03/04 17:46 >検索の際にパフォーマンスも上がらず、いいことあまり考えられないんですが。 実際の所、各カラムを別々にしてインデックスを使わないでやった場合 各カラムを検索させるの自分のやろうとしている方法で 一つのカラムから検索させた場合のパフォーマンスってそんなに変わりますか? 問題はお客さんが昨日と今日で言っていることが変わるし で後から変更になると金額的にもあがりますなど言うと それじゃあ困ると言われるので DB内でCSV方式でデータ管理させれば楽かな?と思ったのです。 問題は数字の範囲指定(不等号)による検索がこのCSVを採用したらできないってことです。(できるなら教えていただければ助かります。) その部分は別途独立したカラムを考えないと駄目ですね。 >メンテナンスが大変な上に 元々70~100項目を7タイプ用意するシステムですので作っているシステム外からメンテナンスをするとなるとメンテナンスは大変なんですよね。 項目が増えたり減ったりしてもこのCSVをカラムに格納するやり方なら DBをいじらずにPHP側の変更だけですみますし 質問者 補足 2009/03/04 18:12 検索に使う項目は独立したカラムにしたとしてそうでない表示だけにしか使わないカラムを一つのカラムにまとめて CSV形式で管理するのはありですよね? 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピューターデータベースMySQL 関連するQ&A powershellでcsvの順次読みこみ powershellでcsvの順次読みこみ powershellで下記のような事はできますか? <in_file.csv> a,1,A b,2,B c,3,C これを読み込み <out_file.csv> =1=《A》【a】 =2=《B》【b】 =3=《C》【c】 のように個別の項目を編集して出力 複数のcsvファイルをマクロ(VBA)で取り込みたい 複数のcsvファイルをマクロ(VBA)で取り込みたい csvファイルの中身が、 20090507 120508 osaka 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 b1,b2,b3,・・・・・,b10 c1,c2,c3,・・・・・,c10 や 20090507 132529 hokkaido 項目1,項目2,項目3,・・・・・,項目10 d1,d2,d3,・・・・・,d10 e1,e2,e3,・・・・・,e10 f1,f2,f3,・・・・・,f10 となっているcsvファイルが特定のフォルダの中に100以上あります。 このcsvふぁいるの5行目だけをaccessに書き込んでテーブルに追加していきたいと思っています。 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 d1,d2,d3,・・・・・,d10 このようなテーブルができればいいのですが・・・ csvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する)→次のcsvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する) この流れでいいと思うのですが方法が分かりません。 丸投げですがよろしくお願いします。 CSVの特定のフィールドをインポート load data local infileでcsvをインポートしているのですが ヘルプなどを見ても特定のフィールドのみを選択する方法がよく分かりません たとえば csv:フィールドA、フィールドB、フィールドC、フィールドD、フィールドE、フィールドF MySQL:カラム1、カラム2、カラム3、カラム4、カラム5 だとします、それを フィールドA→カラム2 フィールドC→カラム3 フィールドD→カラム4 フィールドF→カラム5 という風に選択したいのですがどういう風に指定したらいいのでしょうか? よろしくお願いします。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム PHPでSQLiteのデータをCSVに出力するときの0埋めについて phpでSQLiteに格納させたデータをCSVに出力しています。 とある項目のデータの型は“CHAR”にしているのですが、 CSVに出力すると、 “0888” ⇒ “888”という風に頭の0がカットされてしまいます。 0埋めするためにはどのようにしたらいいでしょうか、 恐れ入りますが、どうか教えてください。 CSV編集について(VB6) VB6初心者です。 例として下記のCSVファイルがあります。 a,1,2,3,4,5,b,1,2,3,4,5,6,c,1,2,3,c,1,2,3,c,1,2,3,c1,2,3 a,1,2,3,4,5,b,1,2,3,4,5,6,b,1,2,3,4,5,6,c,1,2,3,c,1,2,3,c,1,2,3,c,1,2,3,c,1,2,3c,1,2,3 上記を下記のように編集して別のCSVへ保存をしたのですがご教授ください。 a,1,2,3,4,5 b,1,2,3,4,5,6 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 a,1,2,3,4,5 b,1,2,3,4,5,6 b,1,2,3,4,5,6 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 c,1,2,3 上記の各a,b,c内の項目数は固定です。 a以降のb,c内の配列はランダムに複数となります。 VBSにてCSV読み込みし比較 ある場所に比較するCSVファイルを2個格納しております。 ただしCSVファイル名は可変であります。 その場合 Set objTextA = objFSO.OpenTextFile("C:\" & "A.csv")と特定して呼び出せません。 名前が可変なときのため、そのパスにあるCSV2個を順に呼び出すにはどうすればよいのでしょうか。 また呼出し後、split関数により、配列に入れます。A配列とB配列に格納したとします。 一つ一つ比較していきたいのですが、 以下のような構文の場合、比較で違ったときテキストに書き込みとなりますでしょうか? for i=0 to i=10 step 1 if strcomp(a(i) ,b(i))) = 1 then テキストに書き込み endif next CSVからエクセルへの取り込み エクセル・マクロ初心者です。 CSVファイルの一部分を、エクセルで読み込みたいのですが、 マクロでの作成は可能でしょうか。 (例) ・CSVファイル(読み込み側) ABCDE 1 2 3 4 5 ・EXCELファイル(書き込み側) ABCDE 1 2 3 4 5 ・CSV側は、複数のファイルがあります。 ・EXCEL側は、1つのシートにCSVのデータを書き込みます。 ・CSVファイルAの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、1A、1B、1C、1D、1Eに書き込みます。 ・CSVファイルBの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、2A、2B、2C、2D、2Eに書き込みます。 ・CSVファイルCの1B、2B、3B、4B、5Bを読み込み、EXCELファイルの、3A、3B、3C、3D、3Eに書き込みます。 というような事をやりたいのです。 どなたか、ご指導のほどよろしくお願いします。 SQL 部分一致検索について カラムAとカラムBはそれぞれ文字列が格納されているとします。このとき、カラムAには「ABC」カラムBには「ABC(株)」があるとした場合、カラムAとカラムBが部分一致しているかをSQLで検索する場合、どのようなSQL文になるかご存知でしょうか? 勿論予め、検索したい文字列が判っている場合は、like '% nnnnn %' ですが、文字列が判らずカラム同士で部分一致するカラムを選択したいのです。 CSVの印刷 よろしくお願いします。 CSVデータを印刷したいと思います。 そのCSVの中身なのですが、画像のハイパーリンクがあります。 こんな感じのCSVです。 ------------------------------------------------ A B C D 1|img/hoge01.jpg|hoge-001|\600|COLOR:MIX 27cm| ------------------------------------------------ ですので、印刷したい内容ですが、 (1)リンク先の画像が印刷できること (2)レイアウトは縦に画像(A1)、コメント(B1)、コメント(C1)・・・ のような感じで3列ずつ (3)A4サイズで印刷できること このようなことはVBAで可能なのでしょうか? どうかご教示よろしくお願いします。 excel2010でcsv結合について ご教授お願い致します。 2つのCSVファイルがあり、それを結合したいと考えています。 2つのファイルの中で1列同じ項目があるので、その列をキーに と考えています。 (ファイル1)A,B,C (ファイル2)a,b,c 上記のようなイメージでA列とa列を結合し A,B,C,b,cと表示したいです。 何か簡易な方法はありませんでしょうか? C言語 CSVからTXTへ書き込み CSVファイルのデータを配列に格納してtest.txtに書き込みたいです。 その際、指定した列だけを書き込むのですが、うまくいきません。 a.txtの中身が a1,a2,a3,a4,a5 b1,b2,b3,b4,b5 c1,c2,c3,c4,c5 だとしたら、a1,a2,a3,a4,a5だけしか書き込めていません。 test.txtに書き込みたいのは、 a3 b3 c3 のようにしたいです。 初心者ですが、なかなかうまくいかないのでくやしいです。。。 お詳しい方、ご教授よろしくお願いします。 #define LINE_MAX 1024 #define ITEM_MAX 200 FILE *fp; char in_file[] = "a.txt"; char line[LINE_MAX]; char delmit[] = ",\n"; char item[ITEM_MAX][100]; char *item_p; int item_idx,ii; if((fp = fopen(fnamebuff, "r")) != NULL) { while(fgets(line, LINE_MAX, fp) != NULL) { if((item_p = strtok(line, delmit)) != NULL) { strcpy(&item[0][0], item_p); for(item_idx = 1; item_idx < ITEM_MAX; ++item_idx) { if((item_p = strtok(NULL, delmit)) != NULL) { strcpy(&item[item_idx][0], item_p); } else { item[item_idx][0] = '\0'; } } } FILE *fl; fl=fopen("test.txt","w"); for(ii=0;ii<200;ii++){ fprintf(fl," %s ", &item[ii][0]); } fclose(fl); fclose(fp); } } vb.netでCSVファイルを変換して新しいCSVファイルを作りたいの vb.netでCSVファイルを変換して新しいCSVファイルを作りたいのですが、どのようにすれば良いかヒントを教えていただけないでしょうか? A組,10代,10 A組,20代,20 A組,30代,30 B組,10代,40 B組,20代,50 B組,30代,60 C組,10代,70 C組,30代,80 この様なCSVファイルを変換して ,A組,B組,C組 10代,10,40,70 20代,20,50, 30代,30,60,80 という表のようなCSVファイルを作りたいのです。 データベースなどに入れずに、ファイルtoファイルでの変換がしたいです。 最初のファイルの1列目と2列目の項目をそれぞれ配列に入れて重複をなくす位までは思いつくのですが、そこから先がどの様にすれば良いかよく分かりません。 ヒントだけでも良いのでよろしくお願いいたします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム SQL*LoaderでCSVから指定した列のみインポートしたい。 SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。 PHP 検索 システム with CSV file いつもお世話になっています。 早速ですが、 現在、データベース(DB)を使用しないで、PHPとCSVファイルで簡易データベースを作成しています。 (DBは、それだけでも使い方を覚える必要があり、簡易的に作るにはCSVが良いと考えました。) 一通り、CSVファイルの読み込み、保存をするプログラムを完成させました。 (参考 http://ponk.jp/php_file/index.php?page=5) が、ここで検索機能をつけたいと思い、いろいろ調べていました。 しかし、DBを用いる方法は見つかりますが、なかなかCSVファイルを用いた検索方法がみつかりません。 現在想定しているのは、CSVファイルからデータ(table)を読み込み、その中から検索ワードにヒットするデータ(Column)を見つけるといった感じです。 簡易的には、 <?php $list = array('a','b','c','d','e','f'); $search = "d"; foreach ($list as $value){ if ($search == $value) {print "発見!";} } ?> という感じで作れましたが、今想定しているのは、 <?php $list = array('abcd','1234','xyz','日本'); $search = "y"; foreach ($list as $value){ : : (検索方法) : print "xyz を 発見!"; } ?> という感じです。 なにやら、DBを用いる場合では直接検索できる方法があるみたいですが、DBを用いると今後プログラム引渡しを行う際に、PHP以外にもやることが増えてしまうため、また、規模も小さいため、CSVファイルで済ませることができないかと考えています。 ご教授よろしくお願いします。 エクセルでCSVファイルを一括読込できますか? エクセルの質問です。あるフォルダにa0801.csv,a0802.csv,a0803.csv・・・,b0801.csv,b0802.csv,b0803.csv・・・,c0801.csv,c0802.csv,c0803.csv・・・ があります。頭が『b』のファイルを一括で取り込みたいのですが出来ますか?ファイル名にある0801は日付となっています。教えてください。よろしくお願い致します。 csvファイルでの,(カンマ)の取扱について csvファイルをperlで取扱っています。 ,(カンマ)が含まれるデータは""で括ってやれば行がずれることなく入るのは分かっているのですが、今度は取り出すときどのようにしていいのか分かりません。 各行毎に一連のデータが羅列されていますが、それの分割方法を教えてください。 たとえば、 $bに,(カンマ)入りの文字列が入っていた場合、 ($a, $b, $c) = split(/,/, $query); とすると本来$bに入って欲しいデータの,(カンマ)から後の部分が$cに格納されてしまいます。(そこから先が1つずれます) これをずれずに分割させるにはどのようにしたらいいでしょうか? ちなみに ($a, "$b", $c) = split(/,/, $query); と試しにやってみましたが、エラーになってしまいました。 実は長年の悩みで、データを格納する際に,(カンマ)を別のあり得ないような文字列に置き換えて、取り出したあと,(カンマ)に戻すというやり方でやっていたのですが、1つのデータファイルを複数のperlで取扱うようになり、対応が難しくなってきたので、これを機にきちんとした方法でデータを取扱いたいと思っています。 CSVデータを部分的に再分割したい CSVデータの中のある特定の部分だけを再分割(CSV化)するソフトを ご存知の方はいらっしゃいませんか? CsvOpというシェアウエアは http://www.vector.co.jp/soft/win95/business/se078117.html インターフェイスも秀逸で使いやすいのですが、1項目を2つまでしか分割でき ない様で困っています。 具体的には、データの特定部分が繰返し(テーブル定義)されていて本来 10項目に分かれていなければならないはずが、全部でひとつの項目でCSV化 されています。 データ定義を残せるものが望ましいです。 なお、CSVですが固定長なので全体をカラムで再定義も可能ですが、 それも手間ですので、ご存知の方がいらしたらお願いします。 二つのCSVを共通のカラムで照合して1つのファイルに お世話になります。 今回の質問は、分かりやすく言うと シェアウェアの「ズバリ自動化」の 結合機能のみを再現するエクセル用マクロを知りたい、ということです。 http://shop.vector.co.jp/service/catalogue/sr049619/ (上記ソフトは持っていません) 質問を図示してみます。 データ量は少ないのですが、 毎日の作業なので、一発でできれば最高です。 まず二つのCSVがあります。 注文データ(A)と発送データ(B)です。 (*は任意のデータです。) CSV(A) A B C D E F G H I 1 * * * 佐藤A作 * * * * * 2 * * * 鈴木B三 * * * * * ・・・・・・・ 数行続きます。 CSV(B) A B C 1 * * 佐藤A作 2 * * 鈴木B三 ・・・ 氏名を照合カラムとして、それ以外のデータを結合して、 (注:CSV(B)の氏名を除いた後ろにCSV(A)を追加する) 別ファイルとして、出力するにはどういうマクロを使うのか? ということです。 二つのCSVでは名前の出てくる順序が違う場合があります。 また、 CSV(B)には(A)にない氏名も入っているので、 その場合、(B)のデータのみ引き継ぐようにするのも条件です。 よろしくお願いいたします。 CSV... <?php $csv = "system.csv"; $array = file($csv); $c = count($array); $item = 5; //1ページの表示件数 $page = $_GET['page']; //ページ番号 $start = $page * $item; //pageが0 $matched = 0; //条件にマッチした数 foreach( $array as $i => $row ) { $row = trim( $row ); list($id[$i],$name[$i],$sex[$i],$age[$i],$stamp[$i]) = split("\,",$array[$i]); if($sex[$i] == 1 ) { if( $matched >= $start ) { echo $name[$i]; } $matched++; if( $matched - $start >= $item ) break; } } echo "登録件数:$i件"; if( $page ) echo '<a href="search_4?page=' . ( $page - 1 ) . '">前へ</a>'; else echo '前へ'; if( $i < $c ) echo '<a href="search_4?page=' . ( $page + 1 ) . '">次へ</a>'; else echo '次へ'; ?> かなりアホな質問かもしれませんが、動くかテストしようと思い 次へのリンクを押すとsearch_4?page=1となりNot Foundと表示されます。 どうしてですか? csvの読み込みについて ある(A)ソフトからcsvファイルで出力し、その(B)ファイルを他のソフトへ入力したいのです。 出力すると項目が約20ほどあり、Bのソフトに必要な項目は10です。 残り10の項目は消さなければならないのですか? 項目の順番も関係があるのでしょうか? 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター データベース SQL ServerOraclePostgreSQLMySQLNoSQLその他(データベース) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
補足
>・1カラムにどれだけ長いデータが入っても、一部分でも更新するときにはカラム全体を取り出して更新しなくてはならないこと 今回のシステムにおいて&更新画面では一通りの項目を出して更新して 変更ある部分と内部分の差分チェックをして更新部分のみUPDATEを発行する予定はありません。 >・整合性・データ型などについて、データベースで保証できなくなること 今回のシステムにおいてデータ整合性をチェックしないといけないのは数値部分だけですね。後はほとんど通常のテキストタイプとリストボックスとチェックボックスですので数字部分はPHP側でctype_digitやis_numericで判別して入力チェックは実装します。 >・範囲検索はもちろん、データに対する一部検索も前方一致以外はできなくなること 各項目部分は「項目名(値)」を利用しますから範囲比較はできなくても 前方一致「%項目名(%値)%」 のほかに後方一致も「%項目名(値%)%」では駄目ですか? >・フィールド名にも制約が生じること(住所と自宅住所があったらダメ) これに関しては各種プロトコルの開始コード/終了コードみたいなものを項目名(値)の頭と最後につけて「^」を制御コードとして使って ^項目名(値)^みたいにすればいいかなって思っています。 そのかわり^は項目名で使えなくはなりますが >万一、検索が遅いと言われても打つ手がないこと(インデックスも効かないし) 検索に使うカラムはよく使いそうな物は個別のカラムとして用意してやるつもりです。 >存在しない属性は登録できないですし、 どっちにしてもシステムでデータベースエラーが出るのはまずいのでどのようなシステムを作るにしても入力チェックはPHP側でする必要があります。