2011-01-13 2 views
6

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

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

मुझे पता है कि मैं उन चरों को पा सकता हूं जिनका उपयोग mdl-files में नहीं किया जाता है (Tips and Tricks - Tracking Variables in a Simulink Model देखें)। मैं इस विधि को परियोजना में सभी फाइलों पर लागू करना चाहता हूं।

एम-फाइलों में उपयोग नहीं किए गए चर का पता लगाने का मेरा विचार अस्थायी रूप से सभी एम-फाइलों को एक फ़ाइल में जोड़ना है और mlint चलाएं। कोई बेहतर विचार?

उत्तर

7
इसके बजाय MLINT को चलाने के लिए एक में अपने एम-फ़ाइलों के सभी चिपकाने की थकाऊ (और संभवत: त्रुटि प्रवण) कार्य के माध्यम से जा के

, तो आप कुछ अन्य विकल्प ...

है यदि आपके पास आपके सभी एक फ़ोल्डर में फ़ाइलें, सबसे आसान तरीका वर्तमान फ़ोल्डर ब्राउज़र पर जाना है, क्रियाएं बटन alt text पर क्लिक करें, और फिर रिपोर्ट> कोड विश्लेषक रिपोर्ट चुनें।

alt text

यह एक नई विंडो मौजूदा निर्देशिका में प्रत्येक एम-फ़ाइल के लिए MLINT परिणामों को प्रदर्शित करने खुल जाएगा: के बजाय

alt text

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

dirData = dir;     %# Get data on the current directory contents 
fileIndex = ~[dirData.isdir];     %# Get an index for the files 
fileNames = {dirData(fileIndex).name};  %# Get the file names 
[~,~,ext] = cellfun(@fileparts,fileNames,... %# Get the file extensions 
        'UniformOutput',false); 
mFileIndex = strcmp(ext,'.m');    %# Get an index for the m-files 
cellfun(@mlint,fileNames(mFileIndex));  %# Run MLINT on each m-file 

आप operate recursively on a directory tree को इस तरह से फ़ाइल नाम (और पथ) के संकलन को और बढ़ाएं सकता है, तो चलाएँ:

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

+1

धन्यवाद, लेकिन इसमें समस्या का केवल एक हिस्सा शामिल है। मान लें कि मेरे पास दो फाइलें हैं f1.m और f2.m. f1.m निम्नानुसार है: ए = 5; ख = 3; एफ 2 निम्नानुसार है: सी = ए * 2; बी का उपयोग नहीं किया जाता है लेकिन कोड विश्लेषक रिपोर्ट यह नहीं बताती है। – Samil

+0

@ सैमिल: यह एक समस्या है, क्योंकि वे [फ़ंक्शंस] नहीं हैं (http://www.mathworks.com/help/techdoc/ref/function.html), वे [स्क्रिप्ट] हैं (http: // www .mathworks.com/मदद/techdoc/रेफरी/script.html)। चूंकि किसी भी कार्यक्षेत्र में एक स्क्रिप्ट चलाया जा सकता है, और यह नहीं बता रहा है कि उस वर्कस्पेस में कौन से चर पहले से मौजूद होंगे या स्क्रिप्ट के कौन से चर बाद में किसी अन्य स्क्रिप्ट या फ़ंक्शन द्वारा उपयोग किए जाएंगे, आपको बस अपनी सभी स्क्रिप्ट फ़ाइलों को एक साथ जोड़ना होगा किसी भी तरह पहले MLINT प्रभावी ढंग से चलाने के लिए। स्क्रिप्ट से निपटने के दौरान मैं इसके चारों ओर एक और तरीके से नहीं सोच सकता। – gnovice

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