fgetcsv没有正确读取保存在linux系统中的csv文件

时间:2014-04-10 13:17:33

标签: php linux codeigniter csv

我正在尝试通过csv文件将一些数据导入我的数据库。问题是,在开发的最初阶段,我使用的是Windows,因此我的csv文件是在ms office上编写的。因此在导入时它工作正常。但是在保存csv文件的同时切换到linux(UBUNTU)它并没有像我想要的那样显示数据。我也没有得到任何解决方案。

这是由ms Office在Windows机器上生成的csv生成的数组,工作正常。

Array
(
[0] => Array
    (
        [0] => Student Name
        [1] => Student Roll
        [2] => Class
        [3] => Section
        [4] => Exam
        [5] => Subject
        [6] => Total Marks
        [7] => Grade
        [8] => Objective
        [9] => Subjective
        [10] => Practical
    )

[1] => Array
    (
        [0] => Sample Name
        [1] => 123
        [2] => Nine
        [3] => A
        [4] => Mid Term
        [5] => Math
        [6] => 80
        [7] => A+
        [8] => 40
        [9] => 20
        [10] => 20
    )

)

但在linux中我的csv格式无法正常工作。它将所有数据推送到一个密钥和一个密钥。一个元素如下。

Array
(
[0] => Array
    (
        [0] => Student Name Student Roll    Class   Section Exam    Subject Total Marks Grade   Objective   Subjective  Practical
    )

[1] => Array
    (
        [0] => Samp0le Name 123 Nine    A   Mid Term    Math    80  A+  40  20  20
    )

)

所以我的实际问题是如何才能读到它?

这是我对上层数组生成的编码:

$csv = array();
    //$file = fopen('myCSVFile.csv', 'r');
    ini_set("auto_detect_line_endings", true);
    while (($result = fgetcsv($fp)) !== false)
    {
        $csv[] = $result;
    }

    fclose($fp);

    echo '<pre>';
    print_r($csv);
    echo '</pre>';

请帮帮我,实际上我非常需要..

2 个答案:

答案 0 :(得分:1)

试试这个

$file = "FNAC_SPECTACLES.csv";
$handle = fopen($file, "r");
$row = 1;
while (($data = fgetcsv($handle, 0, ";","'")) !== FALSE) 
{
    if($row == 1)
    {
        // skip the first row   
    }
    else
    {
        echo "<pre>";
        print_r($data);
    }
    $row++;
}

fgetcsv()在分隔符中的第三个参数中要保存在csv文件中。例如:逗号,分号等。

答案 1 :(得分:0)

您已将文件保存为 - separate values using tab,而不是commas。 再次save as同一个文件,选择commas作为delimiter作为值分隔,选择double quotes作为值分隔符。