如何使用PHP获取CSV文件中的总行数?

2021/01/15 12:21 · php ·  · 0评论

如何使用PHP获取CSV文件中的总行数?我正在使用此方法,但可以使其正常工作。

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

  echo $row;
}

这是file()用于将整个文件读入数组,自动分析新行等的另一个选项

$fp = file('test.csv');
echo count($fp);

另外,从PHP5开始FILE_SKIP_EMPTY_LINES,如果您要执行以下操作,则可以输入...跳过空行:

$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);

手册: http //php.net/manual/en/function.file.php

使用创建一个新的文件引用SplFileObject

$file = new SplFileObject('test.csv', 'r');

尝试seek将最高的Int PHP可以处理:

$file->seek(PHP_INT_MAX);

然后实际上它将寻求文件中可能的最高行,这是您的最后一行,最后一行+ 1等于您的总行数:

echo $file->key() + 1;

棘手的,但是这可以避免您将文件内容加载到内存中,这在处理非常大的文件时是一件很酷的事情。

尝试

$c =0;
$fp = fopen("test.csv","r");
if($fp){
    while(!feof($fp)){
          $content = fgets($fp);
      if($content)    $c++;
    }
}
fclose($fp);
echo $c;

我知道这已经很老了,但实际上我遇到了同样的问题。作为解决方案,我假设使用linux特定的逻辑:

$rows = shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');

注意:这仅适用于linux,并且仅在您100%确定文件没有多行单元格时才应使用

CSV行由换行符分隔。因此,通过换行符将行拆分,您将获得一个行数组,该数组是可数的。

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
    $rows = explode("\n", $fp);
    $length = count($rows);

    echo $length;
}

注意; 没有一个更高级别的解决方案可以对文件中的行进行计数,因此它们都不可靠,因为它们仅对行进行计数,而不对csv条目(可以包含换行符)进行计数

我对op使用类似的解决方案,并且效果很好,但是使用op的代码,while部分可能会在空行上中断,这可能是他的问题。

所以看起来像这样(编辑后的操作码)

$rowCount=0;
if (($fp = fopen("test.csv", "r")) !== FALSE) {
  while(!feof($fp)) {
    $data = fgetcsv($fp , 0 , ',' , '"', '"' );
    if(empty($data)) continue; //empty row
    $rowCount++;
  }
  fclose($fp);
}
echo $rowCount;

我发现这是最可靠的:

$file = new SplFileObject('file.csv', 'r');
$file->setFlags(
    SplFileObject::READ_CSV |
    SplFileObject::READ_AHEAD |
    SplFileObject::SKIP_EMPTY |
    SplFileObject::DROP_NEW_LINE
);

$file->seek(PHP_INT_MAX);

$lineCount = $file->key() + 1;

我知道这是一篇过时的文章,但是我一直在搜索这个问题,发现原始代码的唯一问题是您需要$row在while循环之外进行定义,如下所示:

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
$row = 1;
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

以防万一它可以帮助某人:) echo $ row; }

如果您要从表单获取文件

$file = $_FILES['csv']['tmp_name'];
                $fp = new SplFileObject($file, 'r');
                $fp->seek(PHP_INT_MAX);
                echo $fp->key() + 1;
                $fp->rewind();

像魅力一样工作!!!!!!!!!!!!!!!!!!

$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;

while ((fgetcsv($file)) !== FALSE) 
{
    $RowCount++;
}

echo $RowCount;
fclose($file);
本文地址:http://php.askforanswer.com/ruheshiyongphphuoqucsvwenjianzhongdezongxingshu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!