2010-03-25 10 views
7

मैं बस के बारे में सवाल यहाँ aksed रूप में एक ही सवाल पूछने के लिए था .... Forcing fputcsv to Use Enclosure For *all* Fieldsphp fputcsv और संलग्न क्षेत्रों

सवाल था

जब मैं fputcsv का प्रयोग कर एक लाइन को लिखने के लिए एक खुले फ़ाइल हैंडल करने के लिए, पीएचपी किसी भी स्तंभ यह मानना ​​है कि यह जरूरत के लिए एक संलग्न चरित्र जोड़ देगा, लेकिन बाड़ों के बिना अन्य स्तंभों को छोड़ देगा।

उदाहरण के लिए, यदि आप एक लाइन की तरह इस

11 के साथ खत्म हो सकता है, "बॉब", जेनकींस, "200 मुख्य सेंट। संयुक्त राज्य अमेरिका ", आदि

करने के लिए एक फर्जी अंतरिक्ष जोड़कर की कमी हर क्षेत्र के अंत में, वहाँ किसी भी तरह से हमेशा कॉलम बाड़े के साथ (चूक एक "करने के लिए ) चरित्र को संलग्न करने fputcsv मजबूर करने के लिए है?

जवाब था:

नहीं है, fputcsv() केवल क्षेत्र निम्न स्थितियों

/* 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(' ') 
) 

कोई "हमेशा लगा" विकल्प है के तहत encloses।

मुझे प्रत्येक क्षेत्र संलग्न एक सीएसवी फ़ाइल बनाने की आवश्यकता है ... सबसे अच्छा समाधान क्या होगा?

अग्रिम धन्यवाद ...

+0

PHP स्रोतों को बदलना एक विकल्प होगा? अर्थात। आपके मामले में व्यवहार्य फ़ंक्शन पैरामीटर में कुछ "संलग्न" ध्वज जोड़ रहा है? – VolkerK

उत्तर

7

रोल अपनी खुद की समारोह - अपने मुश्किल नहीं:

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; 
} 

सी

+0

$ file_handle, $ data_array, $ संलग्नक, $ field_sep, $ record_sep - क्या आप उदाहरण दे सकते हैं कि मूल्यों को किस प्रकार पारित करने की आवश्यकता है ... कृपया ... अग्रिम में धन्यवाद – Anudeep

+0

$ file_handle इस चर के लिए किस मूल्य को पास करने की आवश्यकता है @ सिमकबीन – Anudeep

+0

रिटर्न फ़ुटपुट ($ file_handle, $ संलग्नक । इंपोड ($ संलग्नक। $ Field_sep। $ संलग्नक, $ data_array) । $ संलग्नक $ record_sep); मुझे इस पंक्ति में त्रुटि मिल रही है संदेश: स्ट्रिंग रूपांतरण के लिए ऐरे – Anudeep

1

का संभावित हल (ऊपर यूनिक्स शैली से बचने उपयोग कर रहा है) : मान लीजिए कि आपके पास 2-आयामी सरणी में आपका डेटा है, आप एक स्ट्रिंग जोड़ सकते हैं जो उद्धरण को मजबूर करेगा और आप निश्चित रूप से अपने डेटा ("# @ @ #") में निहित नहीं हैं और फिर हटा दें यह:

$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); 
संबंधित मुद्दे