代码之家  ›  专栏  ›  技术社区  ›  mrpatg

使用奇数封装的csv文件//php

  •  0
  • mrpatg  · 技术社区  · 14 年前

    我有一个csv文件,我正在使用,所有的字段都是逗号分隔的。但有些字段本身包含逗号。在原始csv文件中,包含逗号的字段用引号封装,如下所示;

    "Doctor Such and Such, Medical Center","555 Scruff McGruff, Suite 103, Chicago IL 60652",(555) 555-5555,,,,something else
    

    我使用的代码如下

    <?PHP
        $file_handle = fopen("file.csv", "r");
        $i=0;
        while (!feof($file_handle) ) {
            $line = fgetcsv($file_handle, 1024);
            $c=0;
            foreach($line AS $key=>$value){
                if($i != 0){
                    if($c == 0){
                        echo "[ROW $i][COL $c] - $value"; //First field in row, show row #
                    }else{
                        echo "[COL $c] - $value"; // Remaining fields in row
                    }
                }
                $c++;
            }
            echo "<br>"; // Line Break to next line
            $i++;
        }
        fclose($file_handle);
    ?>
    

    问题是我把带逗号的字段分成了两个字段,这会弄乱我应该拥有的列数。

    有没有什么方法可以搜索引号中的逗号并将其转换,或者有其他方法来处理这个问题?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Peter Mortensen icecrime    14 年前

    您可以使用“enclosure”参数。见 fgetcsv documentation .

    $handle = fopen("file", "r");
    if ($handle ) {
        while (($line = fgetcsv($handle, 2048, ",", '"')) !== FALSE) {
          print_r( $line)."\n";
        }
        fclose($handle);
    }
    

    输出:

    $ cat file
    "Doctor Such and Such, Medical Center","555 Scruff McGruff, Suite 103, Chicago IL 60652",(555) 555-5555,,,,something else
    
    $ php test.php
    Array
    (
        [0] => Doctor Such and Such, Medical Center
        [1] => 555 Scruff McGruff, Suite 103, Chicago IL 60652
        [2] => (555) 555-5555
        [3] =>
        [4] =>
        [5] =>
        [6] => something else
    )
    
        2
  •  0
  •   Sarfraz    14 年前

    您可以搜索每一行是否包含逗号,并相应地执行以下操作:

     foreach($line AS $key => $value){
        if (strpos($value, ',') !== false)
        {
           // there is a comma in this value
        }
        else
        {
           // there is no comma
        }
    }