9

"すべてのフィールドを囲まれた csv ファイルにクエリを出力したいと考えています。

以下:

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename='.$strFeederFileName.'');

$output = fopen('php://output', 'r+');
$fileheader = array( "FH", "READY TO PAY", "RTP060620134", "060620134RWKN", "");
fputcsv($output, $fileheader, ",", '"');

これを出力します:

FH,"支払い準備完了",RTP060620134,060620134RWKN

しかし、私はそれが必要です:

"FH"、"支払い可能"、"RTP060620134"、"060620134RWKN"

フィールドにエンクロージャーを追加しない理由はあります1, 3 & 4か?

4

3 に答える 3

2

fputcsv は、CSV を有効に保つために、どの列に括弧が必要で、どの列に必要でないかを非常に賢く推測します。

現時点では、有効な CSV を出力しています。

fputcsv は、引用符で囲むことを強制するオプションを提供していません。なぜそれらをすべて引用符で囲む必要があるのか​​ を知っておくとよいでしょうか?

于 2013-06-06T21:01:17.087 に答える
0

ご協力ありがとうございます。どのフィールドを囲み、どのフィールドを囲わないかを選択できるようにする必要があったため、回答の組み合わせを使用しました。囲みたくないフィールドの周りに一意の文字列 (xxx) を追加し、ファイルに行を書き込む前に str_replace を使用しました。

 header('Content-Type: text/csv; charset=utf-8');
 header('Content-Disposition: attachment; filename='.$strFeederFileName.'');

 function dumbcsv($file_handle, $data_array, $enclosure, $field_sep, $record_sep)
 {
 dumbescape(false, $enclosure);
 $data_array=array_map('dumbescape',$data_array);

 $line = $enclosure 
     . implode($enclosure . $field_sep . $enclosure, $data_array)
     . $enclosure . $record_sep;

 $line = str_replace('"xxx', '', $line);
 $line = str_replace('xxx"', '', $line);

 return $line;
}

function dumbescape($in, $enclosure=false)
  {
  static $enc;
  if ($enclosure===false) {
    return str_replace($enc, '\\' . $enc, $in);
  }
  $enc=$enclosure;
}

$output = fopen('php://output', 'r+');
$rows_csv = mysql_query('SELECT * FROM  tblfeeder');

//Add file header
$fileheader = array( "FH", "READY TO PAY", $fileheader, $strOracleBatchName);
$line = dumbcsv($output, $fileheader, "\"", ",", "\r\n" );
fwrite($output, $line);

// loop over the rows, outputting them
while ($row_csv = mysql_fetch_assoc($rows_csv)) fwrite($output, dumbcsv($output,  $row_csv, "\"", ",", "\r\n" ));

//Add file footer
$filefooter = array( "IF", "xxx".$batchtotal."xxx", "xxx".$invnum."xxx");
$line = dumbcsv($output, $filefooter, "\"", ",", "\r\n" );
fwrite($output, $line);
于 2013-06-06T22:20:21.650 に答える