2017-05-04 6 views
1

私は自分のサーバーからユーザーの電子メールアドレスを抽出しようとしました。しかし、問題は最大ファイルが.txtですが、いくつかはCSVファイルの拡張子はtxtです。私が読んで抽出しようとすると、私はTXT拡張子を持つCSVファイルを読むことができませんでした。ここに私のコードです:php7を使ってどのようなファイルタイプを読み込むのですか?

<?php 
$handle = fopen('2.txt', "r"); 
while(!feof($handle)) { 
     $string = fgets($handle); 
    $pattern = '/[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}/i'; 
    preg_match_all($pattern, $string, $matches); 
    foreach($matches[0] as $match) 
{ 
echo $match; 
echo '<br><br>'; 
} 
} 
?> 

私はこのコードを使用しようとしました。プログラムは、テキストファイルであるCSVである行ごとに完全なファイルを読み込みます。何千ものファイルが存在するため、識別が困難です。

問題を解決するために何をすべきか教えてください。任意の形式を読み取ることができるソリューションはありますか?それは素晴らしいでしょう。

+0

まだ問題が発生していませんか? 'fgets'を使うと全てのファイルを行単位で読むことができます –

+0

@AlexSlipknotファイル拡張子が変更された場合のファイルです。私は 'TXT'ファイルの中に' CSV'ファイルを持っています。しかし、CSVファイルのファイル拡張子は '.TXT'です。プログラムはファイルを読み取ることができないため、ファイルを処理できません。そこには、ファイルがそこから拡張子を離れて読み込まれる方法があります。 –

+0

'fgets'はCSVを読むことができるので、おそらくCSVではないでしょうか? –

答えて

1

よくファイルが異なります。そのため、それらのそれぞれについて異なるアプローチをとる必要があります。より一般的に言えば、これは通常適応と呼ばれ、ほとんどはAdapter design patternを使用して提供されます。

はあなたがそれぞれのいずれかtxtまたはcsv. Based on the value you would retrieve a TxtParser or a CsvParser`で開くとswitchするファイルの拡張子を検査するコードを持っているでしょうアダプターデザインパターンを使用する必要があります。

しかし、この領域に深く入り込む前に、まずファイルを見たいと思うかもしれません。私は構造を見ることなくこれを確実に言うことはできませんが、あなたはそうすることができます。テキストファイルとcsvファイルの内容が同じ場合、非常に簡単な方法は、拡張子をすべてのファイルのtxtまたはcsvに変更し、同じロジックを使用して処理し、同じ拡張子を持つファイルが処理されるようにすることです同じように。

しかし、ファイル構造が実際には違っていると私は理解しています。したがって、コードを簡潔にするために、パースのための2つの別個のクラス/関数と、適切な解析関数を選択するためのもう1つの関数(このトップ関数は実際にはstrategyの形式になります)を実行します。

いずれにしても、私は非常に疑念があります。そのため、ファイル構造があなた自身とあなた自身の問題であるため、解決策があります。

0

問題は、CSVファイルの文字列が長すぎるためです。この制限に基づいて、php.netの例を使用することをお勧めします。

$handle = @fopen("/tmp/inputfile.txt", "r"); 

if ($handle) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     echo $buffer; 
     // do your operation for searching here 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
} 
関連する問題