«
»

2011.05.26

PHPでテキストファイル合体

たくさんのテキストファイルをPHPで結合しました。
やっていることはテキストファイルを読み込んで、一行づつ送り出してるだけです。
テキストファイル結合自体は、フリーソフトを使う方法や、コマンドプロンプトでもできるようです。
今後の処理のためPHPでやります。

※追記 これだとログファイルがでかすぎるとメモリエラーが出るので、追々改変。

PHP:
  1. //logフォルダにtxtを放り込んで実行
  2.  
  3.  
  4. $dirAddress = "./log/";
  5. $serchFileWorld = "txt";
  6.  
  7. $tinfo=date("Ymd_His")//時間情報
  8. $fn=sprintf("./bindLogs/bind-%s.txt",$tinfo);
  9. $fp=fopen($fn,"ab");
  10.  
  11. $fnLog=sprintf("./bindLogs/bind-%s-writeLog.txt",$tinfo);
  12. $fpLog=fopen($fnLog,"ab");
  13.  
  14. $cntFile=0;
  15. $cntLine=0;
  16. $cntIndiviFile=0;
  17. $cntAll=0;
  18.  
  19. $d = dir($dirAddress)//検索対象ディレクトリ指定
  20. while (($entry = $d->read())) {  //ディレクトリ検索
  21.     if(eregi($serchFileWorld,$entry)){    //ファイル名にtxtが含まれているか
  22.  
  23.         $cntLine=0;
  24.         $cntIndiviFile=0;
  25.  
  26.         $line=file($dirAddress.$entry)//該当ファイル読み込み
  27.  
  28.         foreach ($line as $l ) {
  29.             fputs($fp,$l);
  30.             $cntIndiviFile++;
  31.         }
  32.  
  33.         $sayLoadOK = $entry."    ----LOAD OK----    line is    ".$cntIndiviFile;
  34.         echo $sayLoadOK;
  35.  
  36.  
  37.         $cntAll += $cntIndiviFile;
  38.         $cntFile++;
  39.  
  40.         $sayNow = "    NOW    ".$cntAll."    <br />";
  41.         echo $sayNow;
  42.        
  43.         $saying = $sayLoadOK.$sayNow."\n";
  44.         fputs($fpLog, $saying);
  45.  
  46.     }
  47. }
  48. fclose($fp);
  49.  
  50. $d->close();
  51.  
  52. $reFn = "bind_file".$cntFile."_line".$cntAll;
  53.  
  54. rename($fn, "./bindLogs/$reFn.txt");
  55.  
  56. $sayAll = "\n"."\n"."<br />"."<br />"."$reFn"."<br />"."    ALL LINE is    ---------    ".$cntAll;
  57. echo $sayAll;
  58.  
  59.  
  60. fclose($fpLog);
  61.  
  62. $reFnWriteLog = $reFn."_writeLog";
  63. rename($fnLog, "./bindLogs/$reFnWriteLog.txt");

勉強になったところは「ディレクトリ全てに処理を行う」部分

PHP:
  1. $d = dir($dirAddress)//検索対象ディレクトリ指定
  2. while (($entry = $d->read())) {}        //ディレクトリ検索

また↓の部分をゴニョゴニョしたら、一行ごとにパターンマッチで条件分岐もできるはず。

PHP:
  1. foreach ($line as $l ) {
  2.             fputs($fp,$l);
  3.             $cntIndiviFile++;
  4.         }

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

コメントリンクを nofollow free に設定することも出来ます。