• 締切済み

PHP fgetcsv 置換

失礼します。 例えば要素 $hoge $piyo $temp まで要素があるとして 現在fgetcsvで読み込んだデータを $data[0]を$hogeに置換 $data[1]を$piyoに置換 $data[2]を$tempに置換といったことをやりたいです。 現在 $hoge = 1; $piyo = 2; $temp = 3; $old_fp = fopen($C_result_path, 'r'); //csvを1行をカンマ区切りで読み込む while (($old_data = fgetcsv($old_fp)) !== FALSE) { } fclose($old_fp); } この$old_dataに対して置換していきたいです。 ご教授よろしくお願いいたします。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5027/13124)
回答No.2

> なんといいますか$C_result_pathの中身を書き換えたくて、 読み込んだ行をその場で書き換えると言うのは難しいので、一旦読み込んで処理をして、改めて書き出すと言うのが現実的だと思います。 同じファイル名で、CSVで書き出したいのであれば、こんな感じですかね。 ========== $hoge = 1; $piyo = 2; $temp = 3; $new_data = array(); $old_fp = fopen($C_result_path, 'r'); //csvを1行をカンマ区切りで読み込む while (($old_data = fgetcsv($old_fp)) !== FALSE) { $old_data[0] = $hoge; $old_data[1] = $piyo; $old_data[2] = $temp; $new_data[] = implode(',' , $old_data); } fclose($old_fp); } file_put_contents($C_result_path, implode("\r\n" , $new_data));

  • t_ohta
  • ベストアンサー率38% (5027/13124)
回答No.1

やりたい事がイマイチ判らないのですが、こういう事ですかね。 ========== $hoge = 1; $piyo = 2; $temp = 3; $new_data = array(); $old_fp = fopen($C_result_path, 'r'); //csvを1行をカンマ区切りで読み込む while (($old_data = fgetcsv($old_fp)) !== FALSE) { $old_data[0] = $hoge; $old_data[1] = $piyo; $old_data[2] = $temp; $new_data[] = $old_data; } fclose($old_fp); }

losloson
質問者

補足

説明が下手ですいません そういえばfopenで引数はrでは確か書き込めないですね、、、 なんといいますか$C_result_pathの中身を書き換えたくて、 $old_data[0] = $hoge; $old_data[1] = $piyo; $old_data[2] = $temp; みたいなことが出来るのが目標です。

関連するQ&A

  • メールをパイプでPHPへ渡すと複数届く

    レンタルサーバでキャッチオールメールのスクリプト渡しができるとの事で hoge.comへ来たメールをPHPへ渡す実験をしています。 |/(サーバパス)/public_html/test.php と設定し、test.phpには以下を記述しました。 #!/usr/bin/php -q <?php $source=file_get_contents("php://stdin"); if(!$source){ exit; } else{ //メールをファイルに保存 $logfilename="/(サーバパス)/public_html/test.txt"; $fp=fopen($logfilename,"a"); fwrite($fp,$source); fclose($fp); } そしてa@hoge.comへ送信してみると無事に保存されています。 しかし送信先として a@hoge.com,b@hoge.com とカンマ区切りで送信してみると、同じメールが2回保存されます。 3つのアドレスをカンマ区切りで送信すると3回保存されています。 同様にカンマで区切った分だけ同じ内容が保存されます。 これは普通の事なのでしょうか? OSは Linux CentOS 5 となっています。

  • C言語 配列挿入

    失礼します。カンマ区切りのC言語を配列に挿入したいのですが、エラーが出てしまいます。 初心者的な質問で申し訳ございませんが、よろしくお願いします。 途中までですが、コードを掲載させていただきます。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include<string.h> #define piyo 11 #define hoge 2900 int main(void) { FILE *fp; char test[piyo][hoge]; char buf[hoge]; char *ary[hoge]; int i, k; test[piyo][hoge] = NULL; if ((fp = fopen("testfile.csv", "r")) == NULL) { printf("\aファイルをオープンできません\n"); }else{ while (fgets(buf, hoge, fp) != NULL) { for (k = 0; k < hoge; k++) { ary[k] = strtok(buf, ","); } } fclose(fp); return(0); } エラーメッセージ 警告 C4047 '=': 間接参照のレベルが 'char' と 'void *' で異なっています。 C1075 左側の 中かっこ '{' に対応するものがファイルの最後まで検出されませんでした。

  • awkのgsubによる置換

    awkのgsubで置換をしているのですが、置換後、全体をprintするため $0で出力したところ、セパレータがカンマ区切りから半角スペースに なってしまいます。 置換されなかった場合は、何事もなくそのまま出力されます。 これは、そのようなものなのでしょうか もし、カンマ区切りで出力したい場合は、ループなどで繰り返して 出す以外ないのでしょうか gawk -F"," '{if ($5=="1") {gsub($2,'abc',$2); print $0} else {print $0}}' hoge.txt

  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP
  • php初心者の質問fgetcsv

    いつもお世話になっております。 下記のプログラムを実行しますと、 999,test,90, 999,test,90, 999,test,90, のようになりますが、 行末の最後のカンマを取り除きたいです。 すみません。どの部分修正すればよいか、ご教授いただきたくどうぞよろしくお願い致します。 <?php $file_name="test.csv"; $id=999; $name="test"; $point=90; $array = compact("id","name","point"); $string = implode(",",$array); $file = fopen($file_name,"a+") or die("OPENエラー{$file_name}"); flock($file,LOCK_EX); fputs($file,mb_convert_encoding($string."\n",'Shift-JIS','UTF-8')); flock($file,LOCK_UN); fclose($file); $file = fopen($file_name,"r"); while ($row = fgetcsv($file,1000,",")){ echo "<hr>"; for ($i = 0 ; $i<count($row); $i++){ echo mb_convert_encoding($row[$i].",",'UTF-8','Shift-JIS'); } } fclose($file); ?>

    • ベストアンサー
    • PHP
  • $.get通信で、指定した要素だけを表示したい

    $.jQueryの$.get通信で、指定した要素だけを表示したいのですが、 どうすればよいでしょうか? ▼hoge.html <h1>練習</h1> <div id="piyo">ここだけ表示させたい</div> ▼index.html $.get(  "hoge.html",  function(data, status) {   $("#result")    .append($("<p/>")     .append(data)    ); },  "html" ); このままだと、全部表示されてしまうので、 $("#piyo")か何かを使って、 "piyo" IDの要素だけを表示させたいのですが、 どうすればよいでしょうか。

  • fopenの"r+"モードで同時に読み書きする

    カンマ区切りで一行に10個のデータ(data[0]からdata[9]とする)が入っているtxtファイルがあるとします。data[]はlong型とします。 ファイルを"r+"モードで読み込み、各行で、data[0]の値によって異なる計算を行い、その結果をdata[9]の値に加えたいとおもいます。 恐らく非常に基本的なことで、申し訳ないのですが、教えていただけると助かります。。 FILE *fp; fp=fopen(fp,"test.txt","r+"); for(int i=1;i<=rowcount;i++){ //ここでdata[0]からdata[9]を読み込んだとする // data[9]+=data[0]*2;//こういう処理をする /*そして、新しいdata[9]の値をもとのdata[9]の値と置き換えたい*/ } fclose(fp);

  • 100行のカンマ区切りのデータ

    100行のカンマ区切りのデータがあります。 たとえば10行目のみ上書きしたいのですが 任意の行を上書きする際はどのような手段を使うのですか? やはりfopen fput fcloseが一般的でしょうか?

    • ベストアンサー
    • PHP
  • PHP、CSVファイルの日本語データが表示されない

    どうもこんにちわ。PHP初心者です。 どうか助けてください! CSVファイルを読み込んで表示させるプログラムなんですが、 サーバーが変わったら、日本語のデータのみ表示されなくなりました。 以前質問があった下記件と同じ事象で、 参考に色々試してみましたが上手くいきません。 http://oshiete1.watch.impress.co.jp/qa5972094.html ソースは下記です。 どうか、どこをどういじれば良いか、どなたか教えて頂けないでしょうか? 何卒よろしくお願いします。 ------------------ <?php //今日の日付を取得 $today = date("Ymd"); //表示数の設定。 $disp_num = 1; //CSV格納先 $fp = fopen("data/today_word.csv", "r"); while ($data = fgetcsv($fp, 10000)) { for($n = 0; $n < count($data); $n++){ $data[$n] = mb_convert_kana($data[$n], "ak", "SJIS"); } if ((ereg($today,$data[0]))) { $result[] = "<a href='$data[2]'>$data[1]</a><br />"; } } fclose ($fp); ?> -----------------------------

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう