2012-01-19 42 views
7

मेरे पास एक बड़ी वीबी 6 परियोजनाएं हैं जहां बहुत से चरों में स्पष्ट रूप से परिभाषित प्रकार नहीं है, इसलिए वे स्वचालित रूप से Variant प्रकार पर डिफ़ॉल्ट रूप से डिफ़ॉल्ट होते हैं। हाथ से उन सभी को ढूंढना एक बड़ा काम है, तो क्या इसे स्वचालित करने का कोई तरीका है? वीबी.Net में 'विकल्प सख्त' का उपयोग करके वेरिएंट के सभी स्वचालित उपयोग को अक्षम करना संभव है, लेकिन वीबी 6 में वह विकल्प नहीं है।वीबी 6: वेरिएंट अक्षम करें

अभी मैंने प्रत्येक श्रेणी में DefByte A-Z जोड़ा, जो 'Variant' के बजाय डिफ़ॉल्ट प्रकार 'बाइट' बनाता है। यह मुझे रन-टाइम पर बहुत से अपरिभाषित चर पकड़ने देता है, जैसे ही उन्हें 255 से अधिक मान दिया जाता है। लेकिन यह अभी भी पूरी तरह मूर्ख नहीं है।

क्या सभी अपरिभाषित चर का पता लगाने के लिए कोई और विश्वसनीय तरीका है?

+0

क्या आप बस पूरे समाधान में "Variant" शब्द खोज नहीं सकते? – pikzen

+1

@pikzen: वीबी 6 में यदि आप इस प्रकार को निर्दिष्ट नहीं करते हैं तो आपको वेरिएंट मिलता है। – MartW

+1

इसके अलावा, यदि आपके पास "Dim x, y, z AS Integer" जैसी रेखा है, तो केवल z एक इंटीजर होगा। एक्स और वाई संस्करण होंगे। यह व्यवहार वीबी के साथ बदल गया।सौभाग्य से नेट। – MartW

उत्तर

2

मुझे नहीं लगता कि सभी अपरिभाषित चर का पता लगाने के लिए "मूर्खतापूर्ण" तरीका है। हालांकि, Option Explicit कथन की आवश्यकता होगी कि मॉड्यूल में सभी चर घोषित किए जाएंगे जिसमें कथन प्रकट होता है, इसलिए संकलक किसी भी ऐसे मामले को ध्वजांकित करेगा जहां यह मामला नहीं है। एक आईडीई विकल्प भी है जो स्वचालित रूप से इस कथन को किसी भी नए मॉड्यूल की शुरुआत में जोड़ता है।

+0

कोड पहले ही इस्तेमाल किया गया विकल्प स्पष्ट, धन्यवाद वैसे भी! – Muis

+0

यदि आपने अपने कोड में विकल्प स्पष्ट का उपयोग किया है, तो आप यह सवाल क्यों पूछ रहे हैं? –

+0

@ मार्कबर्टनशॉ - अनदेखा चर के लिए 'विकल्प स्पष्ट' चेक। यह घोषित वैरिएबल की जांच नहीं करता है जो ओपी को –

5

मैं इस तरह की चीजों को लेने के लिए Aivosto's Project Analyzer का उपयोग करता था। एक डेमो संस्करण है जो आपको एक अच्छा विचार देगा कि यह क्या कर सकता है।

+0

से सहमत है। सॉफ़्टवेयर महंगा नहीं है और समय बचाए जाने और समस्याओं को रोकने में बहुत जल्दी भुगतान करेगा। –

4

Option Explicit के साथ अपने मॉड्यूल को सजाने के लिए।

यह वाक्यांश आपके द्वारा बनाए गए प्रत्येक मॉड्यूल के शीर्ष पर जाना चाहिए। जब ऐसा किया जाता है, तो यह एक कंपाइलर त्रुटि का कारण बनता है जब अविकसित चर का सामना करना पड़ता है।

Option Explicit नहीं है, हालांकि, इस तरह के

Dim i 

चर i के रूप में प्रकार कम चर घोषणाओं, एक प्रकार के रूप में घोषित किया जाएगा नहीं कर पाएगा, और कोई संकलक त्रुटि भी Option Explicit परिभाषित के साथ फेंक दिया जाएगा।

+0

कोड पहले ही इस्तेमाल किया गया विकल्प स्पष्ट, धन्यवाद वैसे भी! – Muis

2

प्रोग्रामर के टेक्स्ट एडिटर का उपयोग करें (मैं UltraEdit का उपयोग करता हूं) और प्रोजेक्ट स्रोत निर्देशिकाओं में एक बड़े पैमाने पर खोज करता हूं।

Variant (स्पष्ट रूप से) के लिए खोज के साथ प्रारंभ करें, हालांकि आप शायद पहले ही ऐसा कर चुके हैं।

अगला की तर्ज पर कुछ करने के लिए एक नियमित अभिव्यक्ति प्रकार खोज का उपयोग करें:

*Dim [a-zA-Z][a-zA-Z0-9_]*\p 

कि अनुगामी As DataType बिना Dim x परिदृश्य मिलना चाहिए।

Dim a, b, c As Integer परिदृश्यों के प्रकार को खोजने के लिए *Dim [a-zA-Z][a-zA-Z0-9_]*,.* का उपयोग करें। जैसे Dim a As Integer, b, c As Long

दोहराएँ अजीब गेंद परिदृश्यों के लिए

उपयोग *Dim .*, [a-zA-Z][a-zA-Z0-9_]*,.*Private और Global बजाय Dim और उस के साथ ऊपर seaches बस सब कुछ के बारे में मिलना चाहिए।

+1

'रीडीम' भी शामिल किया जाना चाहिए, क्योंकि वीबी को पहले 'मंद' की आवश्यकता नहीं होती है। और यह सरणी, फ़ंक्शन पैरामीटर, रिटर्न-वैल्यू इत्यादि के लिए काम नहीं करता है। इसलिए यह एक अच्छा प्रयास है, लेकिन इसमें कुछ कमी है;) – Muis

+0

मैंने केवल रेडिम का उपयोग सरणी के साथ किया है। मैंने पैरामीटर मुद्दे के बारे में सोचा था, लेकिन ईमानदार होने के लिए मैं प्रत्येक के लिए एक को बाहर निकालने के लिए नियमित अभिव्यक्तियों के साथ पर्याप्त धाराप्रवाह नहीं हूं। मैं इसे किसी से अधिक महत्वाकांक्षी छोड़ दूंगा :) – tcarvin

+0

क्या सार्वजनिक और निजी भी क्षेत्र घोषित करने के लिए उपयोग नहीं किया जा सकता है? उन लोगों के लिए नियमित अभिव्यक्ति की भी आवश्यकता है। – MarkJ