• ベストアンサー

CSVデータの一部を変換したい

for( $i = 0; $i < sizeof( $Data ); $i++ ) { $CSV = ereg_replace( "[\r\n]", "", join( ",", $Data[ $i ] ) ). "\n"; とデータをCSVに書き込み、 abcd,2009,04,30,あいうえお efgh,2009,06,15,かきくけこ ・・・ xyz,2009,07,09,らりるれろ となっています。このCSVの日付部分だけを、コンマ区切りでなくハイフンで結び、 abcd,2009-04-30,あいうえお efgh,2009-06-15,かきくけこ ・・・ xyz,2009-07-09,らりるれろ としたいのですが、どのようにすれば宜しいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.5

>>$Dataに入れる時点で年月日をまとめておけるといいのですが >とありますが、上記の方法に適する良い方法がありますでしょうか? そうしないといけないわけではありません。 プログラムのほかの箇所がどうなっているか判りませんが、$Dataの年月日を個別に再利用するような場合もあるかもしれませんし。 なので、上記の件はとりあえず忘れてください。 >>単純に判りやすく >やっておくのが、やはりベターでしょうか 私の場合はそうしています。 直感的でないコードになる場合はコメントをしっかり書くようにしています。メンテナンス性を上げるためですね。 コーディングスタイルは人それぞれなので、自分がやりやすいようにどうぞ。

spindle
質問者

お礼

まだ解決できたわけではありませんが、大変有意義なご示唆を感謝します。 お二人からの回答を参考に、いろいろ工夫をして行けば、正解に辿り着けるのではないかと思って、 一生懸命、取り組んでいるところです。 本当に有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.4

$Dataに入れる時点で年月日をまとめておけるといいのですが... 単純に判りやすくやるなら、 $Data = array(array('abcd',2009,7,10,'あいうえお')); $csv = ""; foreach($Data as $v){ $csv .= vsprintf("%s,%d-%d-%d,%s\n", $v); } とか。 itemとmemoにカンマや改行コードが入ることがある場合は別途処理が必要です。

spindle
質問者

補足

有難うございます。 ご回答を参考書を参照しながら解読している状態ですので、レスポンスがズレ気味で申し訳ありません。 実はitem はdate()で本当の(?)日付を入れ、2009,04,30,等は、それぞれ<select><option>で選択メニューで入れています。 >$Dataに入れる時点で年月日をまとめておけるといいのですが とありますが、上記の方法に適する良い方法がありますでしょうか? >単純に判りやすく やっておくのが、やはりベターでしょうか?幼稚な質問で重ねて申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。
  • level2012
  • ベストアンサー率63% (12/19)
回答No.3

その場合は、 $dt = $year ."-" .$mon ."-" .$day $Data[$i][item] = $item $Data[$i][dt] = $dt $Data[$i][memo] = $memo の方が配列っぽいです。 それ以前に日付が分かれているのが気になりますが。

spindle
質問者

お礼

まだ解決できたわけではありませんが、大変有意義なご示唆を感謝します。お二人からの回答を参考に、いろいろ工夫をして行けば、正解に辿り着けるのではないかと思って、一生懸命、取り組んでいます。 本当に有難うございました。

spindle
質問者

補足

有難うございます。 たどたどしいレスポンスで申し訳ありません。 >それ以前に日付が分かれているのが気になりますが。 とありますが、実は item はdate()で本当の(?)日付を入れ、2009,04,30,等は、それぞれ<select><option>で選択メニューで入れているのです。ご指導の方法で週末を使ってテストしたいと思っていますが、他に、よりマッチするやり方があればご示唆頂けると有難いです・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • tk_uc
  • ベストアンサー率68% (33/48)
回答No.2

$Data配列の段階で、日付が入っている要素に対して変換をかけるのが簡単でしょうね。 $Dataの5番目の要素が日付だとして、 foreach($Data as $k=>$v){ $Data[$k][4] = str_replace(',', '-', $Data[$k][4]); } とかですかね。 やり方はいろいろあると思いますが、うまくいかないようならNo.1さんの言うように$Dataの配列の中身のサンプルを書いてみては?

spindle
質問者

お礼

回答の補足を間違えました。 「5個あるコンマ区切りのデータのうち、2,3,4個目のデータを」です。よろしくお願い致します。

spindle
質問者

補足

有難うございます。レスポンスが遅くなり申し訳ありません。 コンマでなくハイフンで join( "-", $Data[ $i ] ) のようにしたら1個の繋がったレコードになってしまい(当然ですが)いろいろTryしてみたが解決出来ず、遂に質問させて頂いた次第です。 上のやり方で試してみますが、最終目標は、 5個あるコンマ区切りのデータのうち、3,4,5個目のデータをハイフンで繋げたいのです・・・・。

全文を見る
すると、全ての回答が全文表示されます。
  • level2012
  • ベストアンサー率63% (12/19)
回答No.1

$Dataの配列の値はどうなっていますか?

spindle
質問者

補足

レスポンスが遅くなり申し訳ありません。 $Dataは2次元配列で、 array(array($item,$year,$mon,$day,$memo)) となっています。 つまり、 $Data[0][item] $Data[0][year] $Data[0][mon] $Data[0][day] $Data[0][memo] となっています。この内容でご質問の回答になっているでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • CSV出力について

    データベースから抽出したデータをカンマ区切りのCSVファイルにしたいと思います。 最終的に sCSVData = "りんご,みかん,オレンジ" のような形式です。 この場合、データにカンマが入ると列がずれてしまいます。 データをクオートすればいいのですが、 sCSVData = replace(sCSVData, ",", """,""") としたのですが、行頭と行末にカンマを入れれません。 どのようなコードを書けばよいのでしょうか。 ご教示よろしくお願いします。

  • csv変換について

    メモ帳(.txt)のデータをcsv方式でカンマ区切りにしてexcelに取り込みたいとおもうのですがうまくいきません。どうしたらうまくいくでしょうか? ちなみにtxtは数字の羅列です

  • CSVでの変換とエクセルデータ(日付)

    CSVでの変換データで日付がハイフンで結ばれているものを、エクセルで日付データ(2012/01/05)に一括で変換する方法を教えてください。ちなみに書式設定では一括でできませんでした。よろしくお願いします。

  • CSVをExcelに変換したい

    お世話になります。 CSVファイルをExcelファイルに変換する場合、CSVファイルをExcelで開いて拡張子を「xls」もしくは「xlsx」を指定して保存すればよいかと思いますが、PCにExcelがインストールされてない環境の場合、Excelに変換することは不可能でしょうか。 今回、Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。 なので、インポートする前準備としていったんExcelに変換したいと考えているのですが。。そのPCにExcelがインストールされてないと、やはり変換することは出来ないでしょうか。 もしくは、カンマ区切りのCSVファイルをタブ区切りに変換したりすることは出来ますでしょうか。 ご教授の程、宜しくお願い致します。

  • csvカンマ区切りデータに=""を入力したい

    csvカンマ区切りデータに、例えば、 ="00",="123",="456" といった感じで入力したいのです。 大元のcsvカンマ区切りデータで、 00,123,456 が入っているので、これをExcelを使ってText変換や書式設定で文字列にして みたのですが、csvデータとしては=""としては保存されていないのです。 どなたか、こういった型変換に詳しいかたご連絡をお待ちしています。

  • join関数について

    phpのjoin関数について教えてもらえないでしょうか? $temp = ereg_replace("[\r\n]", "", join( ",", $CsvData[ $i ] ) ). "\n"; アドバイスお願いします。

    • 締切済み
    • PHP
  • メールの内容をCSVなどのデータに起こしたい!

    メールで大量に受信した内容をテキストやカンマ区切り、あるいはCSVのデータに起こしたいと思っています。そのようなことが出来るフリーソフトなどありますか?

  • CSVファイルで出力した時

    家計簿サイトからCSVファイルとしてデータを出力したのですが、日付の欄が#####と表示されてしまいます。 そのセルをダブルクリックすると日付に戻るのですが、その後保存しようとしても、「CSV(カンマ区切り)と互換性のない機能が含まれている可能性があります」と表示され、保存できません。 どうすれば日付を#じゃないように表示できるのでしょうか?

  • データにカンマが入ったCSVデータのread方法

    VBにてCSVデータを読み込むロジックを組んでいるのですが データの中にカンマが入ったものがたまにあります。 通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。 たとえばCSVデータが下記の場合 123,de-ta,12,000,jjjj 実際のデータは 123 de-ta 12,000 jjjj ですが 12,000を2個のデータと認識して 123 de-ta 12 0000 jjjj のようになってしまいます。 どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。 よろしくお願い致します。

  • CSVからのデータ抽出と分岐

    はじめまして。ある事情からPHPを書くことになり、見よう見まねで やっておりますがどうにもこうにもなりません。お助けください。 あるPHPから「data.csv」を読み込み条件毎に表示を変えたいです。 <?php $ID=$_GET["say_id"]; $Data=file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[2]==$ID && $line[0]=="0"){ //この時だけ出力したいです。 //さらに if($line[1]=="1"){ //この時以下の処理をしたいです。 $say_no=str_replace("1","こんにちは",$line[1]); $say_url=str_replace("こんにちは","konnichiwa",$say_no); } elseif($line[1]=="2"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("2","おはよう",$line[1]); $shop_url=str_replace("おはよう","ohayou",$say_no); } elseif($line[1]=="3"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("3","こんばんは",$line[1]); $say_url=str_replace("こんばんは","konnbannwa",$say_no); } else($line[1]=="4"){////上記でない場合以下の処理をしたいです。 $say_no=str_replace("4","さようなら",$line[1]); $say_url=str_replace("さようなら","sayounara",$say_no); } break; } } ?> if($line[1]=="1"){   ここで処理が止まってしまっているのか画面に何も出なくなります。 見た目もよろしくないような気がします・・。恐れ入りますがお力お貸しください。

    • ベストアンサー
    • PHP