PHP

2013-02-26 193 views
6

में sprintf का उपयोग करते समय \ n न्यूलाइन प्रतीक जोड़ना मैं एक MySQL डेटाबेस से मौजूदा डेटा को रूबी कमांड में निर्यात करने का प्रयास कर रहा हूं, मैं rake db:seed के साथ चला सकता हूं।PHP

मेरा कोड यहां है।

# Generate db:seed data for proveedores. 
$proveedores = R::findAll('tbproveedores'); 
$proveedoresE = R::exportAll($proveedores); 

foreach ($proveedoresE as &$p) { 

    $line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"\n'; 
    $exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website']); 
    var_dump($exportedLine); 
    fwrite($seeds, $exportedLine); 
    echo "<br />"; 
} 

सूचना $ रेखाएं चर के अंत में \n न्यू लाइन प्रतीक। मैंने ऑनलाइन पढ़ा कि यह एक नई लाइन का उपयोग करने के लिए आवश्यक था।

BookSupplier.create(company: "Pearson", city: "Lima", country: "Peru", address: "Av. Limon", telephone: "4673535421", contact: "Javier", email: "", website: ""\nBookSupplier.create(company: "Project Management Institute - PMI", city: "Pennsylvania", country: "Estados Unidos", address: "Newtown Square, Pennsylvania", telephone: "1", contact: "Limberg Morales", email: "", website: "http://www.pmi.org/"\nBookSupplier.create(company: "UVirtual - Centro de Excelencia", city: "Santa Cruz", country: "Bolivia", address: "Av. Irala 585", telephone: "1", contact: "Limberg Morales", email: "", website: ""\nBookSupplier.create(company: "Ábaco de Rodolfo Depalma", city: "Buenos Aires", country: "Argentina", address: "Viamonte 1336, 4° (C1053 ACB) Buenos Aires", telephone: "5411-43711675", contact: "Limberg Morales", email: "", website: "http://www.abacoeditorial.com.ar/"\nBookSupplier.create(company: "Pablo Lledó - ProjectManagement", city: "Canadá", country: "Estados Unidos", address: "Victoria, BC, Canadá", telephone: "1", contact: "Limberg Morales", email: "", website: ""\n 

मैं, प्रत्येक कॉल अपने आप लाइन में होना चाहते हैं मेरी नई पंक्ति प्रविष्टि निम्नलिखित:

मेरी कोड के उत्पादन में ऊपर (vertabim, एक लंबी लाइन) है। मैं क्या गलत कर रहा हूँ पर कोई सुझाव?

उत्तर

22

न्यू लाइन प्रतीक \n केवल जब यह डबल उद्धरण में संलग्न है में व्याख्या की जा रही देगा: "। कि जैसा:

$line = '...............'; 
$line .= "\n"; 

तुम भी पता होना चाहिए के बारे में PHP_EOL यह एक निरंतर है कि सिस्टम न्यू लाइन सीमांकक जो कई ऑपरेटिंग सिस्टम पर अलग है शामिल हैं। उदाहरण के लिए यह लिनक्स पर \n होगा लेकिन विंडोज़ पर \r\n होगा।

$line = '.....'; 
$line .= PHP_EOL; 
0
$line = "BookSupplier.create(company: '%s', city: '%s', country: '%s', address: '%s', telephone: '%s', contact: '%s', email: '%s', website: '%s'\n"; 

डबल उद्धरण \ N (या \ t की तरह किसी भी अन्य whitescpace वर्ण) काम करने के लिए के लिए अनिवार्य हैं: जैसे सबसे पोर्टेबल कोड लगेगा।

+1

आपका स्ट्रिंग सिंटैक्स गलत है (यह भी [इसलिए] के सिंटैक्स हाइलाइटिंग के कारण दिखाई देता है)। आपको * स्ट्रिंग के अंदर * डबल कोट्स से बचने की आवश्यकता है। – Veger

+1

तेजी से था .. इसे संपादित किया। मुझे लगता है कि उन्होंने केवल वर्रों से डेटा को चिह्नित करने के लिए उद्धरणों का उपयोग किया था, इसलिए उन्हें एकल उद्धरण में बदल दिया (डबल कोट्स से बचने की एक और संभावना है)। –

2

तार में विशेष वर्ण केवल जब यह डबल कोट्स (") में संलग्न है काम करते हैं। अधिक जानकारी के लिए PHP string documentation देखें।

तो या तो दोहरे उद्धरण चिह्नों का उपयोग करें, जो बहुत काम है के रूप में आप काफी का उपयोग । अपने स्ट्रिंग में कुछ दोहरे उद्धरण चिह्नों के साथ-साथ और स्ट्रिंग के अंदर सभी दोहरे उद्धरण चिह्नों से बचने

या यदि आप आलसी हैं, नई लाइन बाद में जोड़:।

$line = '...'; 
$line .= "\n"; 
5

आप डबल उद्धृत तार का उपयोग करने, एकल की जरूरत उद्धृत लोग ई नहीं करते हैं xpand विशेष चरित्र अनुक्रम। PHP स्ट्रिंग्स पर अधिक जानकारी के लिए the manual देखें।

+0

इसके लिए धन्यवाद! – Jonathan

11

आप नहीं कर सकते दोहरे उद्धरण चिह्नों के लिए स्विच, आप का उपयोग कर एक नई पंक्ति सम्मिलित कर सकते हैं (या नहीं करना चाहते हैं) यदि हां तरह ASCII कोड:

> php 
<?php printf('line one%cline two', 10);^D 
line one 
line two 
> 

%c आप किसी भी ASCII कोड डालने की सुविधा देता है और 10 एक नई लाइन के लिए कोड है।

1

जोश के उत्तर के बाद, आप% s printf('something%s', "\n") का उपयोग करके एक इंटरपोलेटेड स्ट्रिंग से प्रिंटलाइन में नई लाइन इंजेक्ट कर सकते हैं जो अधिक जटिल उदाहरण में अधिक समझने लगता है - उदा। यदि स्ट्रिंग टेम्पलेट को भाषा परिवर्तनीय में संग्रहीत किया जाता है, या आप एकाधिक प्रतिस्थापन कर रहे हैं, या केवल स्प्रिंटफ के साथ रहना है क्योंकि आपका पीएचबी इसे अनिवार्य करता है।

आपके मामले में यह होगा

$line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"%s'; 
$exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website'], "\n"); 

मैं एक ईमेल हैडर ब्लॉक इस प्रकार स्वरूपित किया है:

$headers = sprintf(
    'From: %1$s%2$sReply-To: %1$s%2$sMIME-Version: 1.0%2$sContent-type: text/html; charset=iso-8859-1%2$s' 
    , $EMAIL_FROM, "\r\n"); 

\r\n के उपयोग को दोहरा 1$ पैरामीटर सूचकांक सिंटैक्स का उपयोग।

तो %2$s नया \r\n बन गया, कोई अतिरिक्त वर्ण नहीं ले रहा है लेकिन पढ़ने में मुश्किल है!