2011-02-11 14 views
1

私は、私はこのようなテキストファイルを読み込むしようとしている問題が持っている:PHPでファイルを解析する。改行を検出する方法は?

Joe 
Johnson 

Linus 
Tourvalds 

をし、PHPでそれを解析している間、私は改行を検出できるようにする必要があります。私は$改行を正しく定義しようとしています。私は$ file変数の行の配列をループしています。

while($line = next($file)) 
    if($line = $newline) 
     echo "new line"; 

問題は、改行文字と一致しないようです。

while($line = next($file)) 
    echo $line; 

は、ファイルを逐語的に出力し、改行とすべてを出力するため、$ file配列に実際に表示されていることがわかります。私はすでに "\ n"、 ""を試しましたが、次に何を試していいのか分かりません。少しの援助?

+1

すでに分割ファイルの行を持っているので、「私は行の配列をループしていますか」? –

+0

正確です。どのように '$ file'配列を最初に取得しましたか?なぜ標準の 'foreach' /' for'の代わりに 'next()'を使っていますか? (理由はありますが、あまりにも多くはありません)... – ircmaxell

+0

next()を使って慎重に、要素を返す前にポインタを進めてください! (あなたは "ジョー"が欠場するでしょう)。 – jpwco

答えて

1
$file = file("path/to/file.txt"); 

// Incase you need to call it multiple times ... 
function isNewLine($line) { 
    return !strlen(trim($line)); 
} 

foreach ($file as $line) { 
    if (isNewLine($line)) { 
     echo "new line<br/>"; 
    } 
} 
0

多分このようなものがあなたのために働くでしょうか?

while($line = next($file)) { 
    if(in_array($line, array("\r", "\n", "\r\n"))) { 
     echo "new line"; 
    } 
} 
0

私はこの解決策があなたを助けるかもしれないと思います。これは、MacまたはWindowsから生成されたcsvを解析する場合に機能します。 Macで作成されたマルチラインでcsvを読むと問題が発生します。つまり、ループ内の各行を読み取ることはできませんが、すべてのcsvデータは1行として読み込まれます。

この問題は、解決策を以下により解決される:

//My CSV contains only one column 
$fileHandle = fopen("test.csv",'r'); 
$codesArray = array(); 
count = 0; 
while (!feof($fileHandle)) { 
$line = fgetcsv($fileHandle); 
if($line[0]!="") { 
    $data = str_replace("'", "", (nl2br ($line[0]))); 
    $dataArray = explode('<br />' ,$data); 
    foreach($dataArray as $data) { 
     $codesArray[] = trim($data); 
    } 
} 
} 
echo "<pre>"; 
print_r($codesArray); 
関連する問題