-3

我告诉你这个函数“fputcsv”有问题!我为什么这么说?我用 4 行创建了一个 csv 文件

l1data1;l1data2;l1data3;l1data4
l2data1;l2data2;l2data3;l2data4
l3data1;l3data2;l3data3;l3data4
l4data1;l4data2;l4data3;l4data4

好的,现在我使用 fgetcsv 和 fputcsv 简单地将这个文件复制到另一个文件中,如下所示:

$handle = fopen($nameFile, "r") or die("Cannot open file:  ".$nameFile);
$temporaryFile = fopen($nameTempFile, "w") or die("Cannot open file:  ".$nameTempFile);
while (($data = fgetcsv($handle,"", ";")) !== false) {
    fputcsv($temporaryFile, $data,";");
}
fclose($temporaryFile);
fclose($handle);

输出文件 :

l1data1;l1data2;l1data3;l1data4
l2data1;l2data2;"l2data3";l2data4
l3data1;l3data2;"l3data3";l3data4
l4data1;l4data2;"l4data3";l4data4

出于某种原因,它在我的第三列中没有明显的原因留下双引号。

现在我用一些旧方法来做:

while ($data=fgets($handle)){
   fputs($temporaryFile, $data);
}

输出如预期:

l1data1;l1data2;l1data3;l1data4
l2data1;l2data2;l2data3;l2data4
l3data1;l3data2;l3data3;l3data4
l4data1;l4data2;l4data3;l4data4

解释一下!

编辑 :

CodeOffreArtemis;CodeOffre42C;CodeOffreSagic;ServiceType;Rate;TypeInterface;Techno;Libelles;CodeOffreCristal
G8R1_ACAB;ABE;;ACA;18;Eth;A;ACo Max2;test
G8R1_ACAC;ABE;ACABUS;ACA;18;Eth;A;ACo 20MMax;
G8R1_ACAD;AKE;ACAD;ACA;2MMAX;Eth;A;ACo 2MMax;
G8R1_ACANBA;WAB;;ACA;18;Eth;A;DSL Access Max2 ACA Nu ligne active;X201
G8R1_ACANBC;WAB;;ACA;18;Eth;A;DSL Access Max2 ACA Nu sur pré-câblée;X201
G8R1_ACANBI;WAB;;ACA;18;Eth;A;DSL Access Max2 ACA Nu ligne inactive;X201
G8R1_ACANBPORA;QAB;;ACA;18;Eth;A;DSL Access Max2 ACA Nu avec portabilité L active;X201
G8R1_ACANBR;WAB;;ACA;18;Eth;A;DSL Access Max2 ACA Nu Nd de routage;X201
G8R1_ACANCA;WAB;ACANB;ACA;18;Eth;A;DSL Access 20MMax ACA Nu ligne active;X201

第一行是标题其余的是数据。

4

1 回答 1

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

看这里: http ://www.php.net/manual/en/function.fgetcsv.php

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = ',' [, string $enclosure = '"' [, string $escape = '\\' ]]]] )

关于 Length 参数:

必须大于要在 CSV 文件中找到的最长行(以字符为单位)(允许尾随行尾字符)。它在 PHP 5 中成为可选参数。省略此参数(或在 PHP 5.0.4 及更高版本中将其设置为 0)最大行长不受限制,速度稍慢。

我不能确定,但​​从代码中看起来你只是省略了句柄,这取决于版本可能是合法的,但似乎它也可能是模棱两可的?尝试在那里添加一个 0 参数?

于 2013-07-15T16:15:51.557 回答