2011-01-14 9 views
1

テキストファイルが約10.000行あるテキストファイル内で編集時間を短縮しようとしていますが、PHP:テキストファイルをループして特定の "開始点"を特定する行を隔離する

テキストファイルは、ほとんど特定のパターンに依存しているが、それは時から外れるが、維持するために、右の行を選択するために、私の「フォーカス」はラインが常にで始まること、である:z3455、その後持っていますその後、変数、例えば:z3455 http://url.com/data1/data1.1/data1.3/(342キロバイト)

私はURLとその内容をキャプチャするためのアルゴリズムを持っていますが、今、私は以外のすべての行を削除、テキストファイルをループするいくつかの方法が必要ではないことは、z3455で始まりますをクリックし、それらを一緒に「押し込んで」、それらが互いに下にリストされるようにします。

これはPHPでこれに対してさまざまなアプローチを試しましたが、正しい機能が見つからないようです。私は特定の行番号を「分離」することができますが、それが逸脱すると、このアプローチを完全に使用することはできません。

私はこのコードを提供するか、この問題をどのように解決するかについて正しい方向に私をノックすることによって、誰かが私を助けてくれることを願っています。事前

感謝敬具
- Mestika

もちろん
+0

試したことがありますか?擬似コードであっても、私たちがあなたの仕事を無意識に複製していない方が良いでしょう。 – XtSchon

+0

一般的なテキストエディタプログラムでは、正規表現を使用してファイルを検索/置換することができます。あなたはディレクトリ内のすべてのファイルに対してもそれを行うことができ、ステップバイステップで実行することができますので、赤ちゃんはその行動をとらえることができます。 – goat

答えて

6
$in = fopen('file.txt', 'rb') 
$out = fopen('filtered.txt', 'wb+') 
while($line = fread($in)) { 
    if (preg_match('/^z3455 http.*$/', $line)) { 
     fwrite($out, $line); 
    } 
} 

、コマンドラインからこれを実行している場合、あなたにもちょうどPHPをスキップとgrepを使用する場合があります、」はるかに効率的をd:

$ grep '^z3455 http' file.txt > filtered.txt 
+0

こんにちはマーク、ご協力いただきありがとうございます。私はあなたのコードを取って少し修正しました。それは魅力のように働いていました。 (何らかの理由で)正規表現の使用を考慮していませんでしたが、原因は正当な理由があります。 – Mestika

0

私は私の頭の中に持っていただけで最初のアイデア(未テストの非常に基本的な&):

<?php 
$filename = 'foo.txt'; 
$file = file($filename); 
$matchedLines = array(); 

foreach($file as $line) { 
    if(preg_match('/^z3455/', $line)) { 
    $matchesLines[] = $line; 
    } 
} 
?> 
1

これはトリックを行う必要があります。 substrは、ここでは正規表現よりも高速でなければなりません。

foreach (file($file) as $line) { 
    if (substr($line, 0, 5) != 'z3455') { 
     continue; 
    } 
    // $line is now a line of text that starts with 'z3455. 
    // Do with it whatever you need. If you want whatever comes 
    // after z3455, you could then do $line = substr($line, 5); 
} 
関連する問題