2011-01-20 19 views
7

पर विभाजित करना मैं एक अल्पविराम से अलग सूची बनाना चाहता हूं ताकि मैं मूल्यों की सरणी प्राप्त करने के लिए बाद में अल्पविराम पर विभाजित हो सकूं। हालांकि, मूल्यों में अल्पविराम हो सकता है। वास्तव में, उनमें उनमें कोई सामान्य कीबोर्ड चरित्र हो सकता है (वे किसी उपयोगकर्ता से आपूर्ति की जाती हैं)। एक चरित्र निर्धारित करने के लिए एक अच्छी रणनीति क्या है जो आपको यकीन है कि मूल्यों के साथ टकराव नहीं होगा?एक अद्वितीय कैरेक्टर

यदि यह एक भाषा निर्भर तरीके से मायने रखता है, तो मैं सी # में "कुछ चरित्र" अलग सूची बना रहा हूं और जावास्क्रिप्ट में विभाजित होने के लिए इसे ब्राउज़र में भेज रहा हूं।

+4

शायद समस्या पर पुनर्विचार बस के बारे में के लिए पुस्तकालयों प्राप्त कर सकते हैं और डेटा को एक या अधिक वर्णों पर भरोसा करने के बजाय xml या json में भेजें, आपको आशा है कि उपयोगकर्ता इनपुट के रूप में प्रदान नहीं करेगा या अन्यथा मान्य डेटा का हिस्सा नहीं हो सकता है। –

+0

मैं एंथनी से सहमत हूं, इन दृष्टिकोणों का उपयोग करने के लिए सर्वर और क्लाइंट पर पूर्ण समर्थन है। यदि सीएसवी/डीएसवी उत्सर्जित करने की वास्तविक आवश्यकता है, तो बाद में डेटा निर्यात करने में अभी भी कम परेशानी हो सकती है। –

उत्तर

1

आप इसे एक शून्य चरित्र से विभाजित कर सकते हैं, और अपनी सूची को डबल नल चरित्र के साथ समाप्त कर सकते हैं।

+0

यह एक अच्छा विचार है, मुझे यह पसंद है। –

0

मैं हमेशा उपयोग करता हूं | लेकिन यदि आप अभी भी सोचते हैं कि इसमें यह शामिल हो सकता है, तो आप @ | @ जैसे संयोजनों का उपयोग कर सकते हैं। उदाहरण के लिए:

"string [email protected]|@string [email protected]|@[email protected]|@last string" 
+0

मुद्दा यह है कि उपयोगकर्ता हमेशा ऐसे अक्षर टाइप कर सकते हैं। Gamernb जैसे एक शून्य चरित्र का उपयोग करके, आप इस समस्या से बच सकते हैं। हालांकि, एक शून्य चरित्र प्रत्येक फ़ाइल प्रारूप में मान्य नहीं हो सकता है। आप मूल स्ट्रिंग से बच सकते हैं और उस समस्या से बचने के लिए एक अन्य स्प्लिट चरित्र का उपयोग कर सकते हैं। – Ruud

+0

मैंने सोचा कि साथ ही, लेकिन मुझे याद आया कि जेएस द्वारा आउटपुट प्रारूप का उपभोग किया जाता है। यदि डेटा को फ़ाइल के रूप में निर्यात किया जाता है, तो आप सही हैं। –

3

यदि जावास्क्रिप्ट सूची का उपभोग कर रहा है, तो इसे जावास्क्रिप्ट सरणी के रूप में क्यों न भेजें? यह सूची और भागने वाले पात्रों का प्रतिनिधित्व करने के लिए पहले से ही एक स्थापित और विश्वसनीय विधि है।

["Value 1", "Value 2", "Escaped \"Quotes\"", "Escaped \\ Backslash"] 
0

एरिक एस रेमंड ने इस पर एक पुस्तक अध्याय लिखा था कि आपको useful मिल सकता है। यह यूनिक्स उपयोगकर्ताओं की ओर निर्देशित है लेकिन अभी भी आवेदन करना चाहिए।

आपके प्रश्न के लिए, यदि आपके पास कोशिकाओं के भीतर कॉमा होगा, तो आपको भागने के कुछ रूपों की आवश्यकता होगी। \, का उपयोग करना एक मानक तरीका है, लेकिन आपको स्लेश से बचने की भी आवश्यकता होगी, जो कि आम हैं।

वैकल्पिक रूप से, पाइप (|), टैब, या अपनी पसंद के किसी अन्य आइटम जैसे अन्य वर्ण का उपयोग करें। यदि उपयोगकर्ताओं को स्प्रेडशीट प्रोग्राम का उपयोग कर डेटा के साथ काम करने की आवश्यकता है, तो आप आमतौर पर अपनी पसंद के डिलीमीटर पर कोशिकाओं को विभाजित करने के लिए फ़िल्टर नियम जोड़ सकते हैं। यदि यह एक चिंता है, तो शायद यह एक डिलीमीटर चुनने के लिए सबसे अच्छा है कि उपयोगकर्ता आसानी से टाइप कर सकते हैं, जिसमें नल चार को शामिल किया गया है।

तुम भी के हवाले से इस्तेमाल कर सकते हैं:

"value1", "value2", "etc" 

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

0

यदि आपके तारों में किसी भी विभाजन चरित्र को प्रकट होने की संभावना है तो मैं सुझाव दूंगा कि आप अपने आउटपुट में एक जावास्क्रिप्ट सरणी परिभाषा के साथ एक स्क्रिप्ट तत्व लिखते हैं। उदाहरण के लिए:

<script> 
var myVars=new Array(); 
myVars[0]="abc|@123$"; 
myVars[1]="123*456"; 
myVars[2]="blah|blah"; 
</script> 

आपका javascript तो उस सरणी

ऐसा भी अपने सी # स्ट्रिंग सरणी से की अल्पविराम द्वारा अलग स्ट्रिंग बनाने की आवश्यकता से बचा जाता है संदर्भित कर सकते हैं।

एकमात्र गोचा जो मैं सोच सकता हूं वह स्ट्रिंग्स है जिसमें उद्धरण शामिल हैं, इस मामले में आपको उन्हें सी # में भागना होगा जब उन्हें MyVars आउटपुट में लिखना होगा।

0

ऐसा करने के कई तरीके हैं। पहला एक विभाजक चरित्र का चयन करना है जो आमतौर पर कीबोर्ड से इनपुट नहीं होगा। नल या टैब आमतौर पर अच्छे होते हैं। दूसरा एक वर्णक के रूप में वर्ण अनुक्रम का उपयोग करना है, एक्सेल सीएसवी फाइलें एक अच्छा उदाहरण हैं जहां सेल मानों को कोशिकाओं को अलग करने वाले अल्पविरामों के साथ उद्धरणों द्वारा परिभाषित किया जाता है।
उत्तर इस बात पर निर्भर है कि आप पहिया को फिर से शुरू करना चाहते हैं या नहीं।

0

एक RFC which documents the CSV format. मानकों का पालन करें और आप पहिया को फिर से शुरू करने से बचेंगे और अगले व्यक्ति के साथ आने और आपके कोड को बनाए रखने के लिए एक गड़बड़ पैदा करेंगे। अच्छी बात यह है कि सीपीयू को आयात/निर्यात करने के लिए पुस्तकालय उपलब्ध हैं जो कि आप कल्पना कर सकते हैं।

कहा, यदि आप एक ब्राउज़र को भेजने के लिए डेटा serialising कर रहे हैं, JSON वास्तव में जाने का रास्ता है और यह भी documented in an RFC है और आप किसी भी मंच जैसे JSON.NET

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