如何在php中逐行阅读

时间:2011-05-20 14:16:29

标签: php

当我尝试将每一行插入我的oracle数据库时,我收到一条错误,指出无效的数字,但如果文件中只有一行则可以正常工作。

$file = @fopen('file.text', "r") ;  


// while there is another line to read in the file
while (!feof($file))
{
    // Get the current line that the file is reading
    $currentLine = fgets($file) ;
    $currentLine = explode('        ',$currentLine) ;
    insert($currentLine) ;


}   

fclose($file) ;

线条看起来像这样

1     4     100
1     4     101

5 个答案:

答案 0 :(得分:7)

试试这个:

$currentLine = trim(fgets($file)); 

在行尾可能没有换行/回车。

如果没有,这个insert()函数在哪里定义?构建一个调试部分,回显或写出尝试的查询,以便您真正看到问题。

答案 1 :(得分:2)

您的explode()来电使用了9个空格作为分隔符,但您的文件在每个数字之间只有5个空格。这意味着您的$currentline是包含原始行的单个元素数组,而不是每个元素中包含数字的单独元素。

更改爆炸调用中的空格数,或更改为

$currentLine = preg_split('/\s+/', $currentLine);

将在任意数量的连续空格上分割。

答案 2 :(得分:1)

我会仔细检查文件末尾是否有新行。甚至可以在php内部仔细检查读取的行不是空白。

$lineCount=0;
// while there is another line to read in the file
while (!feof($file))
{
    $lineCount++;
    // Get the current line that the file is reading
    $currentLine = fgets($file);
    if(trim($currentLine) != ''){
        $currentLine = explode('        ',$currentLine) ;
        insert($currentLine) ;
        echo "Inserted line number $lineCount<br />";
    } else {
        echo "There was a blank line at line number $lineCount.<br />";
    }
} 

答案 3 :(得分:0)

$lines = explode("\n", str_replace("\r", "", file_get_contents("file.text")));

foreach ($lines as $line)
{
     insert(explode('        ', $line);
}

答案 4 :(得分:0)

试试这个:

// Read all data in the file
$file_all = file_get_contents('file.text') or die("unable to open file");
// create an array with each index = a line
$file_lines = explode(chr(13),$file_all);
// Insert each line found
foreach ($file_lines as $file_line) { insert($file_line); };