GVKun编程网logo

php – 如何使用fgetcsv省略空白行(php fputcsv)

8

在本文中,您将会了解到关于php–如何使用fgetcsv省略空白行的新资讯,同时我们还将为您解释phpfputcsv的相关在本文中,我们将带你探索php–如何使用fgetcsv省略空白行的奥秘,分析p

在本文中,您将会了解到关于php – 如何使用fgetcsv省略空白行的新资讯,同时我们还将为您解释php fputcsv的相关在本文中,我们将带你探索php – 如何使用fgetcsv省略空白行的奥秘,分析php fputcsv的特点,并给出一些关于php fgetcsv 函数、php fgetcsv 函数_PHP教程、PHP fgetcsv()分隔符’;’未识别、php fgetcsv读取csv文件代码的实用技巧。

本文目录一览:

php – 如何使用fgetcsv省略空白行(php fputcsv)

php – 如何使用fgetcsv省略空白行(php fputcsv)

我一直在努力将csv文件导入mysql数据库.问题是我的客户端已经获得了一些格式错误的文件.行以43结尾但文件下降到65078 !!

导入时,脚本需要永久.我该怎么做才能确保只导入0到44之间的行?这是我正在使用的代码.

  <table>
<?PHP
//fgetcsv($handle, 1024, delimiter)
$file = fopen("prices.csv", "r");
$row = 0;

    while($csv_line = fgetcsv($file,1024)) {

      if($row ==    4){
        echo "How many headers do we have: ".count($csv_line)."<tr>";

         foreach($csv_line as $header){

           if($header !== NULL){
            print "<td>$header</td>";
           }
         }
         echo "</tr>";
      } 

      if($row > 6) {

        echo '<tr>';

        for ($i = 0, $j = count($csv_line); $i < $j; $i++) {

          echo '<td>'.$csv_line[$i].'</td>';

        }

        echo "</tr>\n";

      } else {

        $row++;

      }

    } 
?>

</table>

解决方法:

如果填充的行数没有修复,您可以使用类似的方法:

if (empty($line)) { break; }

您的评论给了我一个更好的解决方案的想法:

这里http://php.net/manual/en/function.fgetcsv.php出现这个“CSV文件中的空白行将作为包含单个空字段的数组返回”,所以这可能有助于:

while(($csv_line = fgetcsv($file,1024))&& $csv_line [0]){

将只读取,直到找到一个空行.

php fgetcsv 函数

php fgetcsv 函数

php fgetcsv 函数  

fgetcsv
( PHP 4中, PHP 5中)

fgetcsv -获取线从文件指针和解析为的CSV领域

描述
阵列fgetcsv (资源$处理[摘要$长度[ ,字符串$定界符[ ,字符串$附文[ ,字符串$逃生] ] ] ] )
类似fgets ( ) ,但fgetcsv ( )解析行读取的领域以CSV格式并返回一个数组包含字段读取。

参数

把柄
一个有效的文件指针到文件成功打开fopen ( )函数, popen ( )或fsockopen ( ) 。

长度
必须大于最长线(在字符)中可以找到的CSV文件(允许尾随线年底字符) 。它成为可选PHP 5中。省略此参数(或设置为0在PHP 5.0.4及更高版本)的最大行的长度不限,这是略为放缓。

定界符
集的字段分隔符(只有一个字符) 。默认值为一个逗号。


集外地文字符(一个字符只) 。默认为双引号。

逃生
设置转义字符(一个字符只) 。默认值为反斜杠( )


返回值
返回一个数组包含索引的字段读取。

注:一个空白行的CSV文件将返回一个数组组成一个单一的空场,并不会被视为一个错误。


注:如果PHP没有正确认识到行结尾时,无论是阅读文件或创建的Macintosh电脑,使auto_detect_line_endings运行时配置选项可能有助于解决这个问题。

fgetcsv ( )返回FALSE的错误,包括档案结尾。

修改

版本说明
5.3.0越狱参数增加
4.3.5 fgetcsv ( )现在是二进制安全
4.3.0附件参数增加


实例

例如# 1读取和打印的全部内容CSV文件

$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "

$num fields in line $row:

n";
    $row++;
    for ($c=0; $c         echo $data[$c] . "
n";
    }
}
fclose($handle);
?>

 


php fgetcsv 函数_PHP教程

php fgetcsv 函数_PHP教程

php fgetcsv 函数  

fgetcsv
( PHP 4中, PHP 5中)

fgetcsv -获取线从文件指针和解析为的CSV领域

描述
阵列fgetcsv (资源$处理[摘要$长度[ ,字符串$定界符[ ,字符串$附文[ ,字符串$逃生] ] ] ] )
类似fgets ( ) ,但fgetcsv ( )解析行读取的领域以CSV格式并返回一个数组包含字段读取。

参数

把柄
一个有效的文件指针到文件成功打开fopen ( )函数, popen ( )或fsockopen ( ) 。

长度
必须大于最长线(在字符)中可以找到的CSV文件(允许尾随线年底字符) 。它成为可选PHP 5中。省略此参数(或设置为0在PHP 5.0.4及更高版本)的最大行的长度不限,这是略为放缓。

定界符
集的字段分隔符(只有一个字符) 。默认值为一个逗号。


集外地文字符(一个字符只) 。默认为双引号。

逃生
设置转义字符(一个字符只) 。默认值为反斜杠( )


返回值
返回一个数组包含索引的字段读取。

注:一个空白行的CSV文件将返回一个数组组成一个单一的空场,并不会被视为一个错误。


注:如果PHP没有正确认识到行结尾时,无论是阅读文件或创建的Macintosh电脑,使auto_detect_line_endings运行时配置选项可能有助于解决这个问题。

fgetcsv ( )返回FALSE的错误,包括档案结尾。

修改

版本说明
5.3.0越狱参数增加
4.3.5 fgetcsv ( )现在是二进制安全
4.3.0附件参数增加


实例

例如# 1读取和打印的全部内容CSV文件

$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "

$num fields in line $row:

n";
    $row++;
    for ($c=0; $c         echo $data[$c] . "
n";
    }
}
fclose($handle);
?>

 


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445476.htmlTechArticlephp fgetcsv 函数 fgetcsv ( PHP 4中, PHP 5中) fgetcsv -获取线从文件指针和解析为的CSV领域 描述 阵列fgetcsv (资源$处理[摘要$长度[ ,字符串$定界...

PHP fgetcsv()分隔符’;’未识别

PHP fgetcsv()分隔符’;’未识别

看来我对“;”有疑问分隔符.这是我的csv文件:

First Name;Last Name;Email;Age
Julie;brown;julie@example.com;52
Dan;Wong;dan@example.com;19
Tim;Hortons;tim@example.com;27

和我的PHP代码:

$row = 1;
if (($handle = fopen("upload/".$_FILES['fichier']['name'], "r")) !== FALSE) {
    while (($data = fgetcsv($handle, ";")) !== FALSE) {
        $num = count($data);
        echo "<p> $num champs à la ligne $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
fclose($handle);
}

而且我有这个:

1 champs à la ligne 1: 
First Name;Last Name;Email;Age
1 champs à la ligne 2: 
Julie;brown;julie@example.com;52
1 champs à la ligne 3: 
Dan;Wong;dan@example.com;19
1 champs à la ligne 4: 
Tim;Hortons;tim@example.com;27

当我使用’,’分隔符时,而不是像这样的东西

4 champs à la ligne 1: 
First Name
Last Name
Email
Age

此外,我想知道是否有可能有各种分隔符.因为我想显示用户上传的csv文件,我不想强​​迫他们使用一个预定的分隔符.

谢谢

解决方法:

第二个参数是长度,所以你的fgetcsv应该是

fgetcsv($handle, 0, ';');

导致

4 champs à la ligne 1: 

First Name
Last Name
Email
Age
4 champs à la ligne 2: 

Julie
brown
julie@example.com
52
4 champs à la ligne 3: 

Dan
Wong
dan@example.com
19
4 champs à la ligne 4: 

Tim
Hortons
tim@example.com
27

至于关于变量分隔符的第二个问题.到目前为止,最简单的方法是允许用户定义在上载表单上使用哪个分隔符,可能使用可接受分隔符的select元素,然后在读取csv时使用它.

例如

$allowedDelimiters = [',', ';'];
$defaultDelimiter = ';';
if (true === empty($_POST['delimiter'])) {
    $_POST['delimiter'] = $defaultDelimiter;
}
if (!in_array($_POST['delimiter'], $allowedDelimiters, true)) {
    $_POST['delimiter'] = $defaultDelimiter;
    //alternatively redirect back to the form with an error message
}
$delimiter = $_POST['delimiter'];

您还可以解析检查所需分隔符的行.

$filename = "upload/".$_FILES['fichier']['name'];
if (($handle = fopen($filename, "r")) !== false) {
    $content = fread($handle, filesize($filename));
    fclose($handle);
    //count the delimiters
    $semiColons = substr_count($content, ';');
    $commas = substr_count($content, ',');
    //read each row
    $rows = str_getcsv($content, "\n");
    $rowCount = count($rows);
    $delimiter = null;
    foreach ($rows as $line => $row) {
        //check the delimiters
        if (false === isset($delimiter)) {
            /* 
              determine if the delimiter total divided by the number 
              of rows matches the delimiters found on this row 
              and use it to parse the columns 
            */
            if ($semiColons > 0 && $semiColons / $rowCount === substr_count($row, ';')) {
                $delimiter = ';';
            } elseif ($commas > 0 && $commas / $rowCount === substr_count($row, ',')) {
                $delimiter = ',';
            }
        }
        //read the columns using the detected delimiter 
        //otherwise use a default if a delimiter Could not be determined
        $columns = str_getcsv($row, $delimiter ? : ';');
        echo "<p>$rowCount champs à la ligne " . ($line + 1) . "</p>\n";
        foreach ($columns as $column) {
            echo $column . "<br/>\n";
        }
    }
}

php fgetcsv读取csv文件代码

php fgetcsv读取csv文件代码

<?php
function get_csv_contents( $file_target ){ 
$handle  = fopen( $file_target, &#39;r&#39;); 
while ($data = fgetcsv($handle, 1000, ",")) { 
$num = count($data); 
echo "<p> $num fields in line $row: <br> "; 
$row++; 
for ($c=0; $c < $num; $c++) { 
echo $data[$c]. "<br> ";; 
/*echo getUTFString($data[$c])*/  
} 
} 
fclose($handle); 
}
?>
登录后复制

array fgetcsv ( int handle [, int length [, string delimiter [, string enclosure]]] )

handle

一个由 fopen()、popen() 或 fsockopen() 产生的有效文件指针。

length (可选)

必须大于 CVS 文件内最长的一行,在 PHP 5 中该参数是可选的,如果忽略(在 PHP 5.0.4 以后的版本中设为 0)该参数的话,那么长度就没有限制,不过可能会影响执行效率.

立即学习“PHP免费学习笔记(深入)”;

delimiter (可选)

设置字段分界符(只允许一个字符),默认值为逗号.

enclosure (可选)

设置字段环绕符(只允许一个字符),默认值为双引号,该参数是在 PHP 4.3.0 中添加的.和 fgets() 类似,只除了 fgetcsv() 解析读入的行并找出 CSV 格式的字段然后返回一个包含这些字段的数组.

fgetcsv() 出错时返回 FALSE,包括碰到文件结束时.

注意:CSV 文件中的空行将被返回为一个包含有单个 null 字段的数组,不会被当成错误.

例 1.读取并显示 CSV 文件的整个内容,代码如下:

$row = 1; 
$handle = fopen("test.csv","r"); 
while ($data = fgetcsv($handle, 1000, ",")) { 
$num = count($data);
echo "<p> $num fields in line $row: <br> "; 
$row++; 
for ($c=0; $c < $num; $c++) { 
echo $data[$c] . "<br> "; 
} 
} 
fclose($handle);
登录后复制


永久链接:

转载随意!带上文章地址吧。

今天关于php – 如何使用fgetcsv省略空白行php fputcsv的分享就到这里,希望大家有所收获,若想了解更多关于php fgetcsv 函数、php fgetcsv 函数_PHP教程、PHP fgetcsv()分隔符’;’未识别、php fgetcsv读取csv文件代码等相关知识,可以在本站进行查询。

本文标签: