문제

인클로저가없는 CSV 파일에 배열을 라인으로 작성하기위한 기본 기능 또는 솔리드 클래스/라이브러리가 있습니까? fputcsv 기본값이됩니다 " 인클로저 파라에 전달되지 않은 경우. Google이 실패하고 있습니다 (많은 페이지에 대한 결과를 반환합니다. fputcsv), 그리고 배의 라이브러리는 fputcsv.

정확히 같은 것과 같은 것 fputcsv, 그러나 필드는 인용되지 않은 상태로 유지할 수 있습니다.

현재: "field 1","field 2",field3hasNoSpaces

원하는 : field 1,field 2,field3hasNoSpaces

도움이 되었습니까?

해결책

전술 한 인클로저에 대한 경고는 유효하지만 유스 케이스에는 적용되지 않는다고 말했습니다.

왜 이런 식으로 사용할 수 없는지 궁금합니다.

<?php
$fields = array(
    "field 1","field 2","field3hasNoSpaces"
);
fputs(STDOUT, implode($fields, ',')."\n");

다른 팁

와 일하다 chr () 기능:

fputcsv($f,$array,',',chr(0));

fputcsv($file, $data, ';', chr(127));

이게 작동하지 않습니까?

fputcsv($fp, split(',', $line),',',' ');

car(0) 그대로 작동하지 않았습니다 NULL 가치는 대부분의 CSV 파서를 질식시킬 가능성이 높습니다.

나는 사용을 끝냈다 fputcsv() 초기 파일을 작성하려면 모든 따옴표를 통과하여 제거했습니다. 우아한? 어쩌면 그렇지는 않지만 작업이 완료되었습니다 :).

<?php       

$filename = "sample.csv";
$handle = fopen($filename, 'w+');
fputcsv($handle, ['column 1','column 2']);
$data = ['sample','data'];

fputs($handle, implode($data,',')."\n");

// or

fwrite($handle, implode($data,',')."\n");

fclose($handle);
$headers = array(
    'Content-Type' => 'text/csv',
);

까다로운 방법을 사용하여 이중 견적을 제거하지만 Linux에서만

....
fputcsv($fp, $product_data,"\t");
....
shell_exec('sed -i \'s/"//g\' /path/to/your-file.txt ');

이것이 제가 표준 CSV를 배열에 넣는 데 사용하는 것입니다 ...

function csv_explode($delim=',', $str, $enclose='"', $preserve=false){
        $resArr = array();
        $n = 0;
        $expEncArr = explode($enclose, $str);
        foreach($expEncArr as $EncItem){
                if($n++%2){
                        array_push($resArr, array_pop($resArr) . ($preserve?$enclose:'') . $EncItem.($preserve?$enclose:''));
                }else{
                        $expDelArr = explode($delim, $EncItem);
                        array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
                        $resArr = array_merge($resArr, $expDelArr);
                }
        }
        return $resArr;
} 

그런 다음 Foreach 루프에서 원하는 것을 출력 할 수 있습니다.

인클로저가없는 CSV 파일이있는 단점은 사용자 입력의 잘못된 쉼표가 행을 방해한다는 것을 의미합니다. 따라서 CSV 행을 작성하기 전에 쉼표를 제거해야합니다.

CSV를 처리하는 까다로운 부분은 Parsing 인클로저로 PHP & Pear CSV 기능을 가치있게 만듭니다. 본질적으로 당신은 열에 대해 쉼표로 분류되고 줄에 대한 Newline이 불분명 한 파일을 찾고 있습니다. 간단한 시작점은 다음과 같습니다.

<?php
$col_separator= ',';
$row_separator= "\n";

$a= array(
 array('my', 'values', 'are', 'awes,breakit,ome'),
 array('these', 'values', 'also', "rock\nAND\nROLL")
);

function encodeRow(array $a) {
 global $col_separator;
 global $row_separator;
 // Can't have the separators in the column data!
 $a2= array();
 foreach ($a as $v) {
  $a2[]= str_replace(array($col_separator, $row_separator), '', $v);
 }
 return implode($col_separator, $a2);
}

$output= array();
foreach ($a as $row) {
 $output[]= encodeRow($row);
}

echo(implode($row_separator, $output));

?>

chr(0) 나도 나를 위해 일했다 :

 fputcsv($fp, $aLine, $sDelimiter, chr(0));

그것을 알아 냈습니다. NULL에 대한 ASCII 코드를 car() 기능은 잘 작동하는 것 같습니다.

fputcsv($f, $array, $delimiter, car(0))

답변 해 주셔서 감사합니다 !!!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top