2010-04-16 7 views
10

मुझे कॉन्फ़िगरेशन फ़ाइल बनाने और संपादित करने के लिए मेरे प्रोग्राम की आवश्यकता है, जिसमें ऑब्जेक्ट्स के सेट के बारे में जानकारी होगी, और इसे प्रत्येक निष्पादन पर पढ़ने के बजाय। क्या कॉन्फ़िगरेशन शैली के लिए कुछ प्रकार का दिशानिर्देश है जिसका मैं उपयोग कर सकता हूं?क्या कॉन्फ़िगरेशन फ़ाइलों को लिखने और पढ़ने के लिए कुछ सामान्य तरीका है?

मैं विंडोज़ पर सी ++ का उपयोग कर रहा हूं।

+1

कौन सी भाषा और आप वास्तविक वस्तुओं के स्ट्रिंग या डंप को स्टोर करना चाहते हैं, जैसे गुई तत्व, जटिल संरचना वाले ऑब्जेक्ट इत्यादि? – pajton

उत्तर

5

यह काफी हद तक भाषा, मंच और आपकी कॉन्फ़िगरेशन फ़ाइलों के दायरे पर निर्भर करता है। उदाहरण के लिए जावा वर्ल्ड में properties files कॉन्फ़िगरेशन के लिए है, और अन्य पहले से ही वाईएएमएल जैसे उल्लेख किए गए हैं।

एक्सएमएल आमतौर पर कॉन्फ़िगरेशन के लिए फेंक दिया जाता है, क्योंकि यह बहुत verbose है। आपको अभी भी कई अनुप्रयोगों, वेब ढांचे, आदि में मिलते हैं

मुझे लगता है कि सबसे अच्छा अभ्यास हाथ में नौकरी के लिए सही कॉन्फ़िगरेशन प्रारूप चुनना होगा। इन पॉइंटर्स पर विचार करते समय आप मूल्यांकन कर सकते हैं और उन्हें अपने लिए आज़मा सकते हैं:

  1. मानक क्या है? (उदाहरण के लिए विंडोज़ में आईएनआई फाइलें, जावा में प्रॉपर्टी फाइलें)
  2. क्या मेरी भाषा में मूल समर्थन है, या क्या मुझे अपना खुद का कार्यान्वयन करना है?
  3. क्या मेरा कॉन्फ़िगरेशन प्रारूप आसानी से वर्णन कर सकता है कि मैं कॉन्फ़िगरेशन के रूप में क्या स्टोर करना चाहता हूं?

मुझे यकीन है कि आप अन्य विचारों के बारे में सोच सकते हैं। यदि आप दायरे को स्पष्ट करने के लिए अपना प्रश्न अपडेट करते हैं, तो आपको अधिक उपयोगी उत्तर मिलेंगे।

2

सबसे आम प्रारूप INI File प्रारूप है। अधिकतर भाषाओं में इन्हें संभालने के लिए कुछ बनाया जाना चाहिए, अन्यथा मुझे यकीन है कि आप किसी तृतीय-पक्ष लाइब्रेरी को ढूंढ पाएंगे।

यह विफल होने पर, आप एक्सएमएल का उपयोग कर सकते हैं, और यदि आपकी भाषा इसका समर्थन करती है, तो इन एक्सएमएल फाइलों से क्रमबद्ध और deserializing। यदि आप XML का उपयोग नहीं करना चाहते/नहीं कर सकते हैं, तो अधिकांश भाषाओं में उनके द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट प्रारूप का उपयोग किया जाएगा, जैसे ऑब्जेक्ट में डेटा का शुद्ध बाइनरी डंप।

+1

यह * 10 साल पहले सबसे आम था। चीजें थोड़ा बदल गई हैं। एक्सएमएल, वाईएएमएल और जेएसओएन अब जाने के तरीके हैं। – marzapower

5

YAML कॉन्फ़िगरेशन फ़ाइलों को बनाने के लिए एक बहुत ही लोकप्रिय समाधान है। उदाहरण के लिए, रेल और Google AppEngine पर रूबी द्वारा इसे प्रमुख रूप से उपयोग किया जाता है। यदि अधिकांश भाषाएं नहीं हैं तो वाईएएमएल पुस्तकालय कई लोगों के लिए उपलब्ध हैं।

0

जावा दुनिया में, एक गुण फ़ाइल का उपयोग करना बहुत आसान है: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html गुण श्रेणी गुणों का एक सतत सेट दर्शाती है। गुणों को स्ट्रीम में सहेजा जा सकता है या स्ट्रीम से लोड किया जा सकता है। संपत्ति सूची में प्रत्येक कुंजी और इसके संबंधित मान एक स्ट्रिंग है।

जैसा कि अन्य ने कहा है, आपको सर्वोत्तम सिफारिश पाने के लिए अपने पर्यावरण का वर्णन करने की आवश्यकता होगी।

11

मैं boost::property_tree की जांच करने की सलाह देता हूं।

प्रॉपर्टी ट्री लाइब्रेरी एक डेटा संरचना प्रदान करती है जो कुछ महत्वपूर्ण रूप से प्रत्येक स्तर पर अनुक्रमित मूल्यों के मनमाने ढंग से गहरे घोंसले वाले पेड़ को संग्रहीत करती है। पेड़ के प्रत्येक नोड अपने मूल्य को स्टोर करता है, साथ ही इसके सबनोड्स और उनकी चाबियों की ऑर्डर की गई सूची। पेड़ पथ के माध्यम से अपने किसी भी नोड्स तक आसान पहुंच की अनुमति देता है, जो एकाधिक चाबियों का एक संयोजन है।

इसके अतिरिक्त, इसमें एक्सएमएल, आईएनआई और जेएसओएन के लिए पार्सर्स और जेनरेटर शामिल हैं, ताकि आप अपनी पसंद के प्रारूप में बचत/लोड कर सकें।

3

आप क्यूटी साथ काम कर रहे हैं (अपने अन्य प्रश्न के आधार पर), QSettings वर्ग में

देखो। मैं इन्हें बहुत सी लगातार जानकारी सेट करने के लिए उपयोग कर रहा हूं, जैसे पिछली देखी गई निर्देशिका, और कौन से विकल्प अंतिम बार उपयोग किए गए थे।

3

boost :: program_options में आईएनआई फ़ाइलों को पढ़ने की कुछ क्षमता है।

अच्छा क्या है यह पढ़ने में आईएनआई फ़ाइल और कमांड लाइन विकल्प को एकीकृत करने की अनुमति है। चूंकि विंडोज प्रोग्राम चला जाता है, जिसे भविष्य में इस तरह के अंतराल के रूप में नहीं देखा जा सकता है, लेकिन मेरे यूनिक्स ऐप के लिए यह एक हत्यारा सुविधा थी।

हालांकि, boost :: po ini फ़ाइलों के संपादन या लेखन की अनुमति नहीं देता है, इसलिए आप शायद boost :: property_tree के साथ बेहतर हो जाएंगे।

1

कॉन्फ़िगरेशन फ़ाइल प्रबंधन के लिए एक निःशुल्क, क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी है, जिसे libconfig कहा जाता है। यह बहुत अच्छा यम-आधारित व्याकरण का समर्थन करता है, और उपयोगकर्ता द्वारा परिभाषित व्याकरण का भी समर्थन करता है। इसमें कई अन्य कंप्यूटिंग भाषा बाइंडिंग भी हैं। इसे होमपेज देखें: http://www.hyperrealm.com/libconfig/