2008-10-02 20 views
11

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

Label l = new Label("Cat"); 

बन गयी:

Label l = new Label(Constants.CAT); 

और Constants.java में मैं होगा:

public final static String CAT = "Cat"; 

मैं तार एक संपत्ति पाठ में externalized जा नहीं करना चाहती फ़ाइल।
एक कारण स्थिरता और कोड पठनीयता के लिए है।
दूसरा यह है कि हमारा ग्राहक कोड GWT का उपयोग करता है, जो जावा प्रॉपर्टी टेक्स्ट फ़ाइल तंत्र का समर्थन नहीं करता है।

मैं कुछ प्रकार का पार्सर लिख सकता हूं (चींटी प्रतिस्थापन कार्य का उपयोग कर शायद)?
लेकिन मुझे आश्चर्य हुआ कि IDE पहले से ही इस तरह की चीज स्वचालित रूप से करता है।

+0

"हमारा क्लाइंट कोड जीडब्ल्यूटी का उपयोग करता है, जो जावा प्रॉपर्टी टेक्स्ट फ़ाइल मैकेनिज्म का समर्थन नहीं करता है": यह बस सच नहीं है ... यह सच है, आप क्लाइंट साइड से एक प्रॉपर्टी फ़ाइल * सीधे * लोड नहीं कर सकते हैं, लेकिन क्लाइंट सर्वर पर एक async कॉल कर सकते हैं और सर्वर प्रॉपर्टी ऑब्जेक्ट (या जिस भी रूप में आपको चाहिए उसे डेटा) वापस भेज सकता है। आप * क्लाइंट साइड पर प्रॉपर्टी फाइलों का उपयोग कर सकते हैं, केवल एक कदम या दो और आपको जाना होगा। –

उत्तर

9

पीटर केली जवाब को पूरा करने के लिए, आप एएसटी समाधान ग्रहण आईडीई के लिए विचार कर सकते हैं।

फिर आप एक एएसटी प्रोग्राम लिख सकते हैं जो आपके स्रोत कोड को पार्स करता है और जो भी आप चाहते हैं वह करता है।

इस eclipse corner article में एक पूर्ण उदाहरण उपलब्ध है, eclipse help में और भी विवरण।
और multiple examples in GitHub projects के साथ, आप Listing 5 of the section "Implementation of in-place translation" of Automating the embedding of Domain Specific Languages in Eclipse JDT में कुछ उदाहरण पा सकते हैं।

+0

@ रॉय, कृपया परिणाम साझा करें। मैं भी वही चीज़ ढूंढ रहा हूं। अगर आप इसे – Ravisha

+1

@VonC प्रेजेंटेशन लिंक साझा कर सकते हैं तो यह बहुत उपयोगी होगा !! –

+1

@YajliMaclo सटीक, यह प्रस्तुति अब उपलब्ध नहीं है। मैंने इसके बजाय नए उदाहरणों का संदर्भ दिया है। – VonC

21

ग्रहण स्वचालित रूप से ऐसा करता है। फ़ाइल पर राइट-क्लिक करें, "स्रोत" चुनें, फिर "तारों को बाहरी करें"

यह वही नहीं करता है जो आपने अनुरोध किया है (स्ट्रिंग्स के रूप में एक Constants.java फ़ाइल में स्ट्रिंग्स) लेकिन उपयोग की जाने वाली विधि वास्तव में बहुत शक्तिशाली है । यह उन्हें एक प्रॉपर्टी फ़ाइल में ले जाता है जिसे आपके लोकेल के आधार पर गतिशील रूप से लोड किया जा सकता है। उन्हें एक अलग जावा स्रोत फ़ाइल में रखने के रूप में आपको सुझाव दिया गया है कि आपके पास या तो आपके आवेदन में सभी भाषाओं में एक साथ होगा या आप लोकेल के आधार पर विभिन्न एप्लिकेशन शिप करेंगे।

हम इसे अपने अनुप्रयोगों के लिए उपयोग करते हैं जहां मूल सामग्री को अंग्रेजी और जापानी में भी भेजना पड़ता है - हमारे अधिक जटिल अनुप्रयोग 12 भाषाओं के साथ शिप करते हैं - हम किसी भी माध्यम से एक छोटी सॉफ्टवेयर विकास कंपनी नहीं हैं :-)।

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

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

+0

मैंने पहले ही ग्रहण की जांच की है और यह सभी स्ट्रिंग को एक txt प्रॉपर्टी फ़ाइल में ले जायेगा, जिसे तब Message.getString() द्वारा लोड किया जाता है। यह वह नहीं है जो मैं करना चाहता हूं। मैं बस अपनी स्ट्रिंग को पुराने जावा स्थिरता खेलना चाहता हूं। –

+0

यह एक बुरा विचार नहीं है। एक बार आपके पास हो जाने के बाद, आप उन पैटर्न को देख सकते हैं और उन्हें अपनी इच्छित चीज़ों से बदल सकते हैं। – ykaganovich

+0

इसके अतिरिक्त, यह विधि एक ही प्रोजेक्ट में एक ही स्ट्रिंग को पहचान नहीं पाती है। मैं कॉन्स्टेंट्स को इंगित करने के लिए "बिल्ली" के सभी उदाहरण चाहता हूं। सीएटी –

1

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

1

मैं पूरी तरह से स्वीकार करता हूं कि पैक्स डायब्लो ने क्या कहा। हम भी उस समारोह का उपयोग कर रहे हैं।

जब किसी क्लास फ़ाइल पर लागू होता है तो फ़ंक्शन "बाहरी तार" दो फाइलें, एक क्लास Message.class और एक गुण फ़ाइल संदेश .properties बना देगा। फिर यह स्ट्रिंग अक्षर के सभी प्रत्यक्ष उपयोगों को संदेशों को कॉल करने के लिए रीडायरेक्ट करेगा .get (स्ट्रिंग कुंजी) और "Ext। String" विज़ार्ड में स्ट्रिंग के लिए दर्ज की गई कुंजी का उपयोग करके।

बीटीडब्ल्यू: संपत्ति फ़ाइलों के बारे में इतना बुरा क्या है? जैसा कि उन्होंने कहा, आप केवल गुण फ़ाइल को बदल सकते हैं और यदि आपको टेक्स्ट बदलने की आवश्यकता है तो कक्षा को बदलने की ज़रूरत नहीं है।

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

0

आप नेटबीन में Jackpot source transformation engine को देखना चाहते हैं जो आपको अपने स्रोत परिवर्तनों को स्क्रिप्ट करने की अनुमति देगा।