4

「列」が何も囲まれていない入力CSVがあります。

ファイルの内容($ input = fopen(filename);):

    1,2,3,4,5,6,7
    a、b、c、d、e、f、g
    9,8,7,6,5,4,3
    z、y、x、w、v、u、t

値の周りにエンクロージャがないため、fgetcsv()を機能させるのに問題があります。



    while($row = fgetcsv($input)) {
      print_r($row);
    }

結果:

1111

私は頭のてっぺんから考えることができるいくつかの基本的なことを試しました:

fgetcsc($file, 0, ',', '\');

fgetcsc($file, 0, ',', '');

回避策のアイデアはありますか?入力ファイルは数百万行あるため、手動で編集することは実際にはオプションではありません。

4

3 に答える 3

4

あなたの問題が何であるかは明らかではありません。また、引用符のない列fgetcsvでも機能します。str_getcsv

print_r(str_getcsv('1,2,3,4,5,6,7'));

戻り値:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)

引用符はオプションであり、値内に列区切り文字を含めることができるCSVのみを対象としています。

 column1, "Column 2 with , comma inside", colum3
于 2011-11-18T21:23:37.290 に答える
1

最後の2つのパラメーターを使用する必要はありません。これらはオプションです。使用するだけです:

fgetcsv($file, 1000);

これにより、区切り文字がコンマであると自動的に想定されます。また、長さは0であってはならず、読み取る必要のある正の数の文字でなければなりません。

代わりに:あなたは頼る必要はありませんfgetcsv、あなたはただ使うことができますexplode

$values = explode(",", $row);
于 2011-11-18T21:19:42.893 に答える
0

これを行うためのより適切な方法は、エンクロージャーの値をめったに使用されない(またはまったく使用されない)ものに変更することです。

私が見つけたそのような最良のバリエーションは、chr(0)文字です。

fgetcsv($handle, null, "\t", chr(0))

CSVデータの非常に極端なケースがない限り、私にとっては問題なく動作し、壊れることはありません。

于 2017-10-10T17:09:33.947 に答える