2013-07-31 72 views
0

時遇到的一個循環的問題。與fgets/FWRITE環PHP

我有一個文本文件,它看起來像這樣

AN Xixerella

AN維拉

AN Sornas

AN索爾德

AN Sispony的

AN Segudet

AN埃爾塔特

AN聖利亞洛里亞

AN聖瓊德卡塞列斯

來,我有超過200萬線除外。

我需要進入一個SQL請求,這對於插入

過去12小時裏,我一直在嘗試,但沒有成功

我已經試過這樣

<?php 
$file = "cities.txt"; 
$file_w = "cities.sql"; 
$f = fopen($file, "r"); 
$nf = fopen($file_w, "w+"); 

for($l = 0; $l<2; $l++){ 


$line = fgets($f); 
$ex = preg_split('/\s+/', $line); 

foreach($ex as $k => $v){ 

    echo $ex[0].' '. $ex[1]; 
    echo '<br>'; 

    $fw = fwrite($nf, "('" . $ex[0] . "','" . $ex[1] . "')\r\n"); 

} 
} 






fclose($f); 
fclose($nf); 
?> 

或甚至像這樣

$file = "cities.txt"; 
$file_w = "cities.sql"; 
$f = fopen($file, "r"); 
$nf = fopen($file_w, "w+"); 

while ($line = fgets($f, 4096000)) { 
    // echo $line; 


$ex = preg_split('/\s+/', $line); 
// var_dump($ex);die(); 
foreach($ex as $k => $v){ 

    // echo $ex[0].' '. $ex[1]; 
    // echo '<br>'; 

    $fw = fwrite($nf, "('" . $ex[0] . "','" . $ex[1] . "')\r\n"); 



} 
} 





fclose($f); 
fclose($nf); 

但這兩次我在我的書面文件

( '一個', 'Xixerella')

( '一個', 'Xixerella')

( '一個', 'Xixerella')

( 'AN','維拉')

(' 一個」, '維拉')

( '一個', '維拉')

各線被重複3次,我不能找出原因。

在此先感謝您的幫助

回答

0

因爲你有嵌套在while循環,你打破你的線分成了太多段不必要的foreach循環,你的邏輯是有缺陷的。

<?php 
$infile = "cities.txt"; 
$outfile = "cities.sql"; 
$rh = fopen($infile, "r"); 
$wh = fopen($outfile, "w+"); 

//this has to change because a blank line or a line that is simply '0' will break the loop 
while(($line = fgets($rh, 4096000)) !== false) { 
    $parts = preg_split('/\s+/', $line, 2); //limit to splitting into TWO parts, state and city. 
    $state = $parts[0]; 
    $city = preg_replace("/'/", '&#39;', $parts[1]); //replace stray apostrophes 
    $output = sprintf("('%s','%s')\r\n", $state, $city) 
    fwrite($wh, $output) 
} 

fclose($rh); 
fclose($wh); 
+0

又吼!它效果很好。非常感謝這個幫助。 –