Domanda

Stavo per chiedere le stesse domande la domanda aksed qui.... Costringendo fputcsv Utilizzare Custodia Per *tutti* i Campi

La domanda era

Quando uso fputcsv per scrivere una riga per un handle di file aperto, PHP aggiungere un allegando carattere a qualsiasi colonna che si ritiene necessario, ma lasciare le altre colonne senza custodie.

Per esempio, si potrebbe finire con un riga come questa

11,"Bob ",Jenkins,"200 main st.USA ",ecc

Breve di aggiungere un falso spazio per alla fine di ogni campo, c'è qualche un modo per forzare l'fputcsv per racchiudere sempre le colonne con la custodia (impostazioni predefinite per un " carattere?

La risposta è stata:

No, fputcsv() solo racchiude il campo sotto le seguenti condizioni

/* enclose a field that contains a delimiter, an enclosure character, or a newline */
if (FPUTCSV_FLD_CHK(delimiter) ||
  FPUTCSV_FLD_CHK(enclosure) ||
  FPUTCSV_FLD_CHK(escape_char) ||
  FPUTCSV_FLD_CHK('\n') ||
  FPUTCSV_FLD_CHK('\r') ||
  FPUTCSV_FLD_CHK('\t') ||
  FPUTCSV_FLD_CHK(' ')
)

Non c'è "di racchiudere sempre" opzione.

Ho bisogno di creare un file CSV di ogni campo recintato...Quale sarebbe la soluzione migliore?

Grazie in anticipo...

È stato utile?

Soluzione

Arrotolare la funzione non è difficile:

 function dumbcsv($file_handle, $data_array, $enclosure, $field_sep, $record_sep)
 {
     dumbescape(false, $enclosure);
     $data_array=array_map('dumbescape',$data_array);
     return fputs($file_handle, 
         $enclosure 
         . implode($enclosure . $field_sep . $enclosure, $data_array)
         . $enclosure . $record_sep);
 }
 function dumbescape($in, $enclosure=false)
 {
    static $enc;
    if ($enclosure===false) {
        return str_replace($enc, '\\' . $enc, $in);
    }
    $enc=$enclosure;
 }

(sopra utilizza in stile unix in fuga)

C.

Altri suggerimenti

Una soluzione alternativa:Supponendo di avere i vostri dati in un 2-matrice bidimensionale, è possibile aggiungere una stringa forza citando e sono sicuro che non è contenuta nei dati ("#@ @#" qui) e poi rimuoverlo:

    $fp = fopen($filename, 'w');
    foreach ($data as $line => $row) {
        foreach ($row as $key => $value) {
            $row[$key] = $value."#@ @#";
        }           
        fputcsv($fp, $row);
    }

    fclose($fp);
    $contents = file_get_contents($filename);
    $contents = str_replace("#@ @#", "", $contents);
    file_put_contents($filename, $contents);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top