• ベストアンサー

変数からテキストファイルを保存

サイトのソースを自動で取得するプログラムを考えいます。 その際にどこのサイトから取得したソースなのかをファイル名で整理したいと考えていますが、変数から自動的にテキストファイルを作ることができません。 どなたかお力をお貸し頂ければ幸いです。 それでは宜しくお願いいたします。 cate.txt======= shopping auction sports ============= <?PHP $Data = file("cate.txt"); for($c=0; $c<sizeof($Data); $c++){ //ここがうまく動いてくれません。。。 $filename == "{$Data[$c]}"."."."txt"; for($i=0; $i<1; $i++){ $url = "http://{$Data[$c]}.yahoo.co.jp/page={$i}"; $lines = file($url); $fp = fopen("data.txt","a"); foreach($lines as $newdata){ fwrite($fp, $newdata); } fclose($fp); } } ?>

  • PHP
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

$filename を使っている処が見あたりませんが、 file で読み込んだものは、改行が取り除かれませんから $filename = rtrim($Data[$c]).".txt"; とかした方がいいと思います。 そういうことかな?

yun100
質問者

お礼

お忙しいところご返信を下さり本当にありがとうございます。 まさにファイル名にする際に改行が取れていなくて エラーが発生していました。 おかげさまで解決できました。本当にありがとうございました。

その他の回答 (2)

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

とりあえず真剣に読んでないのですが・・ $filename == "{$Data[$c]}"."."."txt"; の行は代入演算子は「=」でよいのでは? せっかく{}でくくってあるならすべてコーテーションの なかに入れてしまうほうが見やすいかと。 $filename = "{$Data[$c]}.txt";

yun100
質問者

お礼

お忙しいところご返信を下さり本当にありがとうございます。 ご指摘ありがとうございました。 確かにおっしゃる通りで、プログラムをより綺麗に書く努力をしていきたいと思います。 このたびはお答えいただきありがとうございました。

  • f_motion
  • ベストアンサー率53% (7/13)
回答No.1

こんな感じでしょうか、 <?php $data0 = 1; $data1 = 2; for ($a=0;$a<2;$a++){ echo ${data.$a}.".txt"; } ?> 結果 1.txt 2.txt

yun100
質問者

お礼

お忙しいところご返信を下さり本当にありがとうございます。 ご指摘ありがとうございました。 試しながら自分なりに問題点を考えてみたいと 思います。 この度はお答えいただきありがとうございました。

関連するQ&A

  • textファイルについて

    あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

    • ベストアンサー
    • PHP
  • ファイルに書き込む時の負荷について

    PHPバージョン5.2.4を使っています。 次のような // ------------------------------------ $fp = fopen("data.txt", "w"); $buf = ""; for ($i = 1; $i <= 3; $i++) { $buf .= "aaa$i\n"; } fwrite($fp, $buf); fclose($fp); // ------------------------------------ という変数にいったん保存してから書き込む場合と // ------------------------------------ $fp = fopen("data.txt", "w"); for ($i = 1; $i <= 3; $i++) { $buf = "aaa$i\n"; fwrite($fp, $buf); } fclose($fp); // ------------------------------------ というその都度ファイルに書き込む場合とでは どちらが良い悪いというのはあるのでしょうか? たとえばこちらのやり方は負荷がかかるなど ループが多くなっていった場合に違いがでてくるのでしょうか?

    • ベストアンサー
    • PHP
  • テキストファイルの出力について

    今、学校の課題でC言語を使ってプログラムを作っています。 20000個のデータを読み込んで、200個ずつに区切り、別々のテキストファイルで出力するというものです。 最初につくったのは、以下の通りです。 *********************************************** FILE *fp; { int b,i=0; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; fp = fopen("D1.txt","w"); for(i=0;i<=199;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); fp = fopen("D2.txt","w"); for(i=200;i<=399;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); ・・・ ***************************************** これだと20000まで繰り返し記述しなければならずかなり困難だと思いました。そこで、ループを作ろうとしたのですが、テキストファイルをループを使って複数作成する方法がわかりません。 以下のようなプログラムを作ったのですが、テキストファイルが一つしか作られませんでした。 どのように記述すればよいのでしょうか? **************************************** FILE *fp; { int a,i=0; int b=1; int c=199; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; start: fp = fopen("D[1+b].txt","w"); for(i=a;i<=c;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); if(i > c) c = c+200; a = a+200; b++; goto start; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } ****************************************** よろしくお願い致します。

  • PHP ファイル操作について

    PHPのファイル操作についてご教授ください 同じサーバー内に置いている同じ環境の別ドメインに設置した 同じPHPの挙動が異なる為、その原因を教えて頂きたいです。 ファイルへ保存した場合の改行の有無についてです。 以下一部を抜粋しています。 初期状態(abc.txtの中身) -----ここから----- すもも<>あんず<>すいか<> -----ここまで----- ▼以下を実行 [入力内容] data01:すもも data02:あんず data03すいか $log_file = 'abc.txt'; $lines = ""; $fp = fopen($log_file, "rb+"); set_file_buffer($fp, 0); flock($fp, LOCK_EX); $freadsize = @fread($fp,filesize($log_file)); $freadsize = chop($freadsize); $lines = explode("\n",$freadsize); $lnum = count($lines); for($i=0;$i<$lnum;$i++){ $lines[$i] = "$lines[$i]\n"; } array_unshift ($lines, "$data01<>$data02<>$data03<>$blank"); rewind($fp); $lnum = count($lines); for($i=0;$i<$lnum;$i++){ if(preg_match("/^[0-9]{10}<>+/",$lines[$i])){$check = 1;}else{$check = 0;} if($check == 1){ fputs($fp,$lines[$i]); } } ftruncate($fp, ftell($fp)); flock($fp, LOCK_UN); fclose ($fp); ▼実行後(abc.txtの中身) りんご<>ばなな<>ぶどう<> すもも<>あんず<>すいか<> 別のドメイン下では、改行されません。 りんご<>ばなな<>ぶどう<>すもも<>あんず<>すいか<> この同じPHPを同じサーバー内の別ドメインで 実行した場合、改行される場合と改行されない場合があるのです。 ドメインが異なる以外は同じ環境のはずなのですが、挙動が異なります。 改行をして保存したいのですが、改行されないドメイン下のPHPは array_unshift ($lines, "$data01<>$data02<>$data03<>$blank"); ↓ array_unshift ($lines, "$data01<>$data02<>$data03<>$blank\n"); としています。 何故挙動が異なるのでしょうか? 文字コード、改行コードは同じです。

    • ベストアンサー
    • PHP
  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 任意の行を修正し、ファイルを上書きしたいのですが…

    <html> <head> <title>修正・変更</title> </head> <body> <?php  $aaa = $_POST['aaa'];  $bbb = $_POST['bbb'];  $ccc = $_POST['ccc'];  $dummy = $_POST['hidden'];  $lines = array($aaa, $bbb, $ccc,$dummy);  $lines = implode(",", $lines);  $lines = mb_convert_encoding($lines, "SHIFT-JIS" , "EUC-JP");  $file = file('sample.csv');  $file[$i] = $lines."\n";  $fp = fopen("sample.csv","w+");  for($i=0 ; $i<count($file) ; $i++) {   flock($fp, LOCK_EX);   fwrite($fp, $file[$i]);  }  fclose($fp); ?> <div align="center"> 修正・変更しました!! <br><br> <input type="button" name="button" value="戻る" onClick="location.href='aaa.php'"> </div> </body> </html> 上記の様なプログラムを「CSVファイルを書き込む方法」を基に書いて みました。 しかしながら、どうしても任意の行のデータを修正して上書きする ことができません(涙 どうやったら任意の行のデータかどうかを認識して、上書きする事が できるのでしょうか?? 皆様お忙しい中かとは思いますが、ご教授して頂けませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テキストファイルに情報を格納したい。上手に動作せず

    数百ページの各ページの特定部分の情報をテキストファイルに格納するものを作りたいのです。 テキストファイルを作るところまではできたのですが、上手にできません。 初めてページを開くなら情報の新規作成、2回目以降であれば上書きしたいです。 なにが原因で動かないのでしょうか。 <?php $filename = "samplefile.txt"; $page_list = file($filename); //-------------------------------- //手入力で内容を更新するエリア //-------------------------------- $url = 1 ."page.php"; //現在開いているページ。http://test.com/236page.phpなどのようになる $h1DATE = "タイトルテスト"; $imgDATE = "img/sample.jpg"; //全てのページで固定 $comeDATE = "これはテストです。"; //-------------------------------- $lines = $url."|".$h1DATE."|".$imgDATE."|".$comeDATE."\n"; //samplefile.txtに追加する行 $fp = fopen($filename, "a"); $file = file_get_contents($filename); //ファイルを全て文字列として取得 $text = explode("\n",$file); //\nを元に行を分けて配列に格納 for($i = 0; $i <= count($text) - 1; $i++){ if(ereg($url,$text[$i]) || ereg($h1DATE,$text[$i]) || ereg($imgDATE,$text[$i])|| ereg($comeDATE,$text[$i])){ $text[$i] = ""; //このページの$url、$h1DATE、$imgDATE、$comeDATEのどれかに一致するものはその行を削除 } } $text[count($text)] = $lines; fwrite($fp, $text[count($text)]); fclose($fp); ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ページ1</title> </head> <body> <div id="main"> <h1><?php echo $h1DATE ?></h1> <?php echo '<img src="'.$imgDATE.'" id="imgID" />' ?> <p id="comeID"><?php echo $comeDATE ?></p> </div> </body> </html>

    • ベストアンサー
    • PHP
  • テキストファイルの同期

    はじめまして、超初心者プログラマのmoominといいます。 ファイルの同期プログラムに関して質問があるのですが、 あるテキストファイルを、他のディレクトリのテキストファイルとを 常に同期をするプログラムを作成しています。 これが作成したソースです。 ------------------------- #include "stdafx.h" #include <stdio.h> #include <windows.h> int _tmain(int argc, char *argv[]) { FILE *fp,*copy; int buffer; fp=fopen("○○○/×××.txt","rb"); copy=fopen("aaa/fff.txt","wb"); for(int i=1;i>0;i++){ fread(&buffer,sizeof(buffer),1,fp); fwrite(&buffer,sizeof(buffer),1,copy); if(feof(fp)){ fclose(fp); fclose(copy); } } return 0; } VC2008を利用して作成していますが、 一度きりの同期なら可能なのですが、 常に同期するというプログラムがわかりません。 どう変えればよいでしょうか?

  • 構造体の文字列データをファイルへ書き込む方法は?

    構造体の文字列データをファイルへ書き込む方法として、構造体のデータを一気に書き込まずに、データ毎に書き込むことを勉強としてやってみようとしました。 数字の場合はうまくいったのですが、文字列の場合が分かりません。 ご存知の方、よろしくお願いいたします。 <数字の場合> typedef struct { int m1, m2; } Data; fwrite(&data[i].m1, sizeof(int), 1, fp); fwrite(&data[i].m2, sizeof(int), 1, fp); <文字列の場合> #include <stdio.h> typedef struct { char m1[10], m2[10]; } Data; int main() { static Data data[3] = { { "a1", "b1"}, { "c1", "d1"}, { "e1", "f1"}, }; Data data2[10]; FILE *fp; int i, n; fp = fopen("file.dat", "wb"); if (fp == NULL) return 1; for (i = 0; i < 3; i++) { fwrite(&data[i].m1, sizeof(Data.m1[10]), 1, fp); ← sizeofでエラーが出る fwrite(&data[i].m2, sizeof(Data.m2[10]), 1, fp); } fclose(fp); 以下省略