2009-04-21 8 views
5

EDIT: इस प्रश्न में फ़ंक्शन का गलत हिस्सा कॉपी किया गया है, नीचे उचित है।स्ट्रिंग डब्ल्यू/कॉमा को उचित रूप से एक CSV फ़ाइल में निर्यात करने की आवश्यकता है

$values = mysql_query("SELECT lname, fname, email, dtelephone, etelephone, contactwhen, thursday, 
friday, saturday, sunday, monday, comments FROM volunteers_2009 WHERE venue_id = $venue_id"); 

while ($rowr = mysql_fetch_row($values)) { 
    for ($j=0;$j<$i;$j++) { 
     $csv_output .= $rowr[$j].", "; 
    } 
    $csv_output .= "\n"; 
} 

मैं जब यह टिप्पणी क्षेत्र में एक अल्पविराम है, यह दूर फेंक पूरे csv फ़ाइल टिप्पणी उस में एक अल्पविराम हो सकता है, और यहां तक ​​कि दोहरे उद्धरण चिह्नों है,।

नीचे दिया गया कोड यह है कि यह सीएसवी फ़ाइल में डालने के लिए डेटा को सीएसवी स्ट्रिंग में कैसे लोड करता है।

मैं इसे टिप्पणी फ़ील्ड डेटा को सही तरीके से निर्यात करने के लिए कैसे प्राप्त करूं?

उत्तर

6

डबल कोट्स में फ़ील्ड संलग्न करें। किसी भी एम्बेडेड डबल कोट्स को डबल करें।

ordinary field,"field with , in it","field with double double quote ("""")" 

ध्यान दें कि यह बहुत, बहुत सवाल Dealing with commas in a CSV file

+0

अच्छा, यह एक और भाषा विशिष्ट है (मुझे लगता है कि उस प्रश्न का चुना गया उत्तर सी या सी ++ में लिखा गया था?)। sshow ने यहां एक बहुत अच्छा PHP-विशिष्ट समाधान प्रदान किया है जो दूसरे प्रश्न में नहीं दिया गया था। – Calvin

+0

यही कारण है कि मैंने "दूसरे प्रश्न के नजदीक" कहा और "बंद - क्योंकि सटीक डुप्लिकेट" (और यह मजाकिया है, लेकिन उन दो शब्दों के 'करीबी' को अंग्रेजी की अपनी बोली में अलग-अलग उच्चारण किया जाता है; पहले के पास एक तेज सिबिलेंट होता है ; दूसरा एक आवाज उठाई जेड ध्वनि)। –

+1

इसके अलावा, एक्स-रेफ किए गए प्रश्न का उत्तर इस समाधान को हल करने के लिए कोड उत्पन्न करने के लिए आवश्यक एल्गोरिदमिक जानकारी देता है (या प्रस्तावित समाधानों से आउटपुट की गुणवत्ता का आकलन करने के लिए)। –

0

संपादित करें: मेरा बुरा, मैंने अभी परीक्षण किया है और यह काम नहीं करता है - कम से कम एक्सेल में नहीं।

आपसे किसी और चीज़ के साथ अल्पविराम का स्थान ले सकता है, तथापि:

$field = str_replace(',','#COMMA#',$row['Field']); 
$csv_output .= $field.', '; 
0

आप की तरह एक अलग सीमांकक इस्तेमाल कर सकते हैं "|" या "@" या कुछ अन्य वर्ण जो डेटा में प्रकट होने की संभावना नहीं है।

अधिकांश सीएसवी सॉफ़्टवेयर में "सीएसवी" फ़ाइल में पढ़ने की क्षमता है जो एक अल्पविराम के रूप में अल्पविराम के अलावा कुछ अन्य उपयोग करता है।

+0

@ शायद एक अच्छा उदाहरण न हो, क्योंकि यह ईमेल पते में होगा ... लेकिन यह सिर्फ एक उदाहरण है। –

10

आप बाहर fputcsv() की जाँच करनी चाहिए के करीब है। वहां कुछ उपयोगी टिप्पणियां भी हैं।

int fputcsv (resource $handle , array $fields [, string $delimiter = ',' 
    [, string $enclosure = '"' ]]) 

निर्दिष्ट फ़ाइल हैंडल करने के लिए fputcsv() एक लाइन (एक क्षेत्रों सरणी के रूप में पारित कर दिया ) सीएसवी के रूप में प्रारूप और इसे लिखने (एक नई पंक्ति द्वारा समाप्त)।

1

उम, क्यों न केवल अंतर्निहित mySQL कमांड का उपयोग करें? अगर मैं कुछ छूट गया हो, तो कृपया ध्यान न दें, लेकिन मुझे लगता है यह सबसे तेजी से मार्ग है:

http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html

वेबसाइट मूल रूप से पता चलता है:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM <table> WHERE <condition> 
0

यह आपके डेटा में अल्पविराम और डबल कोट्स रखना महत्वपूर्ण है जब आप इसे निर्यात करते हैं? आप सीएसवी को निर्यात करने से पहले इसे हमेशा पढ़ सकते हैं और फिर डेटा को संशोधित कर सकते हैं।

जो मैं आम तौर पर करता हूं वह सब कुछ डबल कोट्स में संलग्न करता है और मेरे डिलीमीटर के "," (डबल कोट कोमा डबल कोट) का संयोजन बनाता है। इस तरह अगर मैं एक यादृच्छिक डबल कोट या यादृच्छिक अल्पविराम पर ठोकर खाता हूं, तो यह एक बड़ा सौदा नहीं है।

संबंधित मुद्दे