2015-11-20 4 views
9

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

कुछ कोड की समीक्षा करते समय मुझे एक समस्या आई। कोड में बड़ी संख्या में चर को समझाया नहीं गया था और हर बार जब मैं एक चर के अर्थ को जानना चाहता था तो मुझे डेटा फ़ाइलों में देखना था और/या कोड में किए गए संचालन से उनके अर्थ का अनुमान लगाना था।

यह कहने की कोई आवश्यकता नहीं है कि यह काफी समय लेने वाला था और मैंने कम समय खोने का सबसे अच्छा तरीका खोजा है।

सबसे पहले, मैंने टिप्पणियों में चर के बारे में सभी स्पष्टीकरण दिए हैं, समस्या यह है कि यह स्क्रिप्ट में एक बड़ी (बड़ी!) जोड़ रही है।

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

enter image description here

था निम्नलिखित: यह MATLAB डेटा सुझावों में कुछ और कस्टम जानकारियां प्रदर्शित करना संभव हो सकता है?

और उत्तर हाँ है!

enter image description here

जवाब में

कोड देखें

उत्तर

10

हम काम करने के लिए इस क्रम में कुछ पूर्व प्रसंस्करण करने की आवश्यकता होगी अर्थात्:

1) को चर नाम जोड़ने एक डेटा फ़ाइल बनाएँ उनके विवरण (यह उबाऊ हिस्सा है, हालांकि मुझे कोड को समझने के लिए इसे पहले से ही करना था। हर बार जब आप एक नए चर में आते हैं तो एक लाइन जोड़ें)

मैंने इन डेटा को एक CSV फ़ाइल में सहेजना चुना, जहां पहले कॉलम में वेरिएबल नाम होते हैं और दूसरे में विवरण होते हैं, उदा।

enter image description here

2) संपादित MATLAB के समारोह datatipinfo (यह आंतरिक कोड MATLAB के आदेश खिड़की में edit datatipinfo टाइपिंग)

datatipinfo समारोह लग रहा है द्वारा पहुँचा जा सकता है जैसे:

function datatipinfo(val) 

% Some error checking/Initialization 


    function prefix=sizeType %#ok<DEFNU> All uses are in EVALC calls. 
     s = size(val); 
     D = numel(s); 
     if D == 2 
      theSize = [num2str(s(1)), 'x', num2str(s(2))]; 
     elseif D == 3 
      theSize = [num2str(s(1)), 'x', num2str(s(2)), 'x', ... 
       num2str(s(3))]; 
     else 
      theSize = [num2str(D) '-D']; 
     end 



     if isempty(val) == 0 
      prefix = [name ': ' theSize ' ' class(val)]; 
     else 
      prefix = [name ': empty ' theSize ' ' class(val)]; 
     end 

    end 

% Some other stuff 

end 

और यह prefix फ़ंक्शन है जिसे हम कुछ फाइलों के साथ करने के लिए हम जो करना चाहते हैं, उसे संपादित करने के लिए संपादित करेंगे Anning और स्ट्रिंग आरंभीकरण चरण में तुलना:

ए) प्रारंभ चरण:

% Read data from csv file : 
fid = fopen('ToyVars.csv'); 
Data = textscan(fid, '%s%s','whitespace','','delimiter',';'); 
fclose(fid); 

बी) चर आप डाटा में चर के नाम के साथ पर मँडरा रहे हैं, उसके नाम की तुलना करें

NameFound=0; 
% Get Variable Names and Corresponding comments  
TmpNames=Data{1,1}; 
TmpComments=Data{1,2}; 

% Loop through TmpNames. If a Name matches, assign corresponding comment to the variable Comment 

for ii=1:size(TmpNames,1) 

    if(isequal(char(TmpNames(ii))),name) 

     Comment=char(TmpComments(ii)); 
     NameFound=1; 

    end 

end 

सी) datatip में टिप्पणी जोड़ें यदि NameFound==1

if NameFound 

    if isempty(val) == 0 
     prefix = [name ': ' theSize ' ' class(val) ' : ' Comment]; 
    else 
     prefix = [name ': empty ' theSize ' ' class(val) ' : ' Comment]; 
    end 

else 

    if isempty(val) == 0 
     prefix = [name ': ' theSize ' ' class(val)]; 
    else 
     prefix = [name ': empty ' theSize ' ' class(val) ]; 
    end 

end 

और voilà!

enter image description here

5
एक मामूली ट्वीक और बुला कार्य करने के लिए कुछ संशोधनों आप भी @BillBokeey's answer किसी भी बाहरी निर्भरता के बिना उपयोग कर सकते हैं के साथ

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

अपने परीक्षण मामले के लिए मैं एक संरचना mydatastrings नामित में मेरा तार भंडारण कर रहा हूँ: @ BillBokey के संशोधनों के साथ साथ

NameFound = 0; 
try 
    Comment = evalin('caller', sprintf('mydatastrings.%s', name)); 
    NameFound = 1; 
end 

:

mydatastrings.test = 'Test Variable'; 

datatipinfo के शरीर में मैं एक try ब्लॉक को शामिल किया है नेस्टेड prefix फ़ंक्शन:

if NameFound 

    if isempty(val) == 0 
     prefix = [name ': ' theSize ' ' class(val) ' : ' Comment]; 
    else 
     prefix = [name ': empty ' theSize ' ' class(val) ' : ' Comment]; 
    end 

else 

    if isempty(val) == 0 
     prefix = [name ': ' theSize ' ' class(val)]; 
    else 
     prefix = [name ': empty ' theSize ' ' class(val) ]; 
    end 

end 

और हम एक ही परिणाम प्राप्त करते हैं।

पूर्ण फाइलों में this Gist


संपादित कर रहे हैं:

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

अगर हम बस के साथ पिछले try ब्लॉक की जगह:

try 
    Comment = evalin('caller', sprintf('mydatastrings.%s', name)) 
end 

और छोड़ prefix के रूप में यह डिफ़ॉल्ट MATLAB स्थापित में है, हम निम्नलिखित पॉपअप प्राप्त:

yay

यह वह जगह है गिस्ट में datatipinfo_noprefix.m

2

एक और दृष्टिकोण है एक Matlab की पहले से परिभाषित कक्षा जैसे double subclass और एक स्ट्रिंग संपत्ति जोड़ें। यह स्ट्रिंग डेटा टिप पर दिखाई देगी।

कैसे अतिरिक्त संपत्ति के साथ उपवर्ग के लिए: http://fr.mathworks.com/help/matlab/matlab_oop/built-in-subclasses-with-properties.html

परिणाम: enter image description here

+1

नहीं पता था कि, अच्छा एक! – BillBokeey

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