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

&quot;Project Name:,&lt;Empty&gt;&quot;<br />
&quot;Company Name:,&lt;Empty&gt;&quot;<br />
&quot;User Name:,&lt;Empty&gt;&quot;<br />
&quot;Job Title:,&lt;Empty&gt;&quot;<br />
&quot;Location:,&lt;Empty&gt;&quot;<br />
&quot;Remarks:,&lt;Empty&gt;&quot;<br />
&quot;Date_Time,Test ID,Value_A,Unit_A,Function_A,MeterID_A,BluetoothID_A,Remarks_A&quot;<br />
&quot;2021-03-11 16:59:54,TP0,1968.2,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot;<br />
&quot;2021-03-11 16:59:55,TP1,1967.6,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot;<br />
&quot;2021-03-11 16:59:56,TP2,1966.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 16:59:57,TP3,1966.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 16:59:58,TP4,1966,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 16:59:59,TP5,1964,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:00,TP6,1945.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:01,TP7,1895.1,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:02,TP8,1856.6,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:03,TP9,1824.7,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:04,TP10,1803,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:05,TP11,1788.7,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:06,TP12,1773.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:07,TP13,1759.8,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:08,TP14,1752.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:09,TP15,1744.3,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:10,TP16,1734.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:11,TP17,1727.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:12,TP18,1723.8,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:13,TP19,1718.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:14,TP20,1713.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:15,TP21,1710.3,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:16,TP22,1708.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &quot;2021-03-11 17:00:17,TP23,1706.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF,&quot; &nbsp;

मैं इन आदेशों के साथ केवल प्रतिरोधों का मूल्य प्राप्त करने का प्रयास कर रहा हूं:

 dates = mgetl(&#39;NTC2k2.csv&#39;) 
[start, final, match] = regexp(dates(1:$,1)),&#39;/[1-9.]*,Ω/&#39;)

लेकिन मेरी बड़ी समस्या यह है कि जब मैं इस कोड का उपयोग करने का प्रयास करता हूं तो यह छूट देता है कि फ़ंक्शन regexp मैट्रिक्स तिथियों (1: $, 1) के साथ काम नहीं कर सकता है, कृपया मुझे नहीं पता कि आगे कैसे आगे बढ़ना है। कृपया मेरी मदद करें, बहुत बहुत धन्यवाद!

1
kubas126 17 अप्रैल 2021, 19:48

3 जवाब

सबसे बढ़िया उत्तर

मुझे लगता है कि आपको csv फ़ाइल चिपकाते समय कुछ समस्याएँ हुई थीं। अगर फ़ाइल में निम्न सामग्री है, जो मुझे लगता है कि मामला है क्योंकि एक CSV फ़ाइल में HTML इकाइयां शामिल नहीं होनी चाहिए:

Project Name:,<Empty>
Company Name:,<Empty>
User Name:,<Empty>
Job Title:,<Empty>
Location:,<Empty>
Remarks:,<Empty>
Date_Time,Test ID,Value_A,Unit_A,Function_A,MeterID_A,BluetoothID_A,Remarks_A
2021-03-11 16:59:54,TP0,1968.2,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 16:59:55,TP1,1967.6,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 16:59:56,TP2,1966.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 16:59:57,TP3,1966.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 16:59:58,TP4,1966,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 16:59:59,TP5,1964,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:00,TP6,1945.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:01,TP7,1895.1,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:02,TP8,1856.6,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:03,TP9,1824.7,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:04,TP10,1803,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:05,TP11,1788.7,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:06,TP12,1773.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:07,TP13,1759.8,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:08,TP14,1752.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:09,TP15,1744.3,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:10,TP16,1734.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:11,TP17,1727.9,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:12,TP18,1723.8,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:13,TP19,1718.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:14,TP20,1713.5,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:15,TP21,1710.3,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:16,TP22,1708.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF
2021-03-11 17:00:17,TP23,1706.4,Ω,Res,U1252B-MY52430232,U1177A-238EBF

तो प्रतिरोध कॉलम प्राप्त करने के लिए साइलैब कोड बहुत सरल है (मुझे लगता है कि आपकी फ़ाइल का नाम so.csv है)

--> csvRead("so.csv",[],[],"double",[],[],[],7)(:,3)

ans  =

   1968.2
   1967.6
   1966.9
   1966.5
   1966.
   1964.
   1945.5
   1895.1
   1856.6
   1824.7
   1803.
   1788.7
   1773.5
   1759.8
   1752.9
   1744.3
   1734.4
   1727.9
   1723.8
   1718.5
   1713.5
   1710.3
   1708.4
   1706.4

मूल्य के साथ अंतिम पैरामीटर 7 फ़ाइल के शीर्षलेख में पंक्तियों की संख्या को इंगित करता है और पुनरावर्ती निष्कर्षण (:,3) तीसरे कॉलम का चयन करता है।

0
Stéphane Mottelet 19 अप्रैल 2021, 07:19

आपके द्वारा पोस्ट किए गए उदाहरण CSV में HTML इकाइयाँ शामिल हैं जैसे &quot; जो दोहरे-उद्धरण वर्ण का प्रतिनिधित्व करता है ", &#39; जो एकल उद्धरण वर्ण का प्रतिनिधित्व करता है ', &lt; और &gt; जो क्रमशः < और > वर्णों का प्रतिनिधित्व करते हैं। यदि यह आपके मूल डेटा में एन्कोडिंग समस्या है, तो आपको फ़ाइल को फिर से एन्कोड करना चाहिए क्योंकि CSV फ़ाइल में डेटा को एक सीमांकक (आमतौर पर अल्पविराम या स्थान वर्ण) द्वारा अलग किया जाना चाहिए।

अब मुख्य बिंदु पर, यहाँ मुद्दा यह है कि mgetl() स्ट्रिंग्स का एक वेक्टर देता है, जिसमें प्रत्येक स्ट्रिंग आपकी फ़ाइल में एक लाइन का प्रतिनिधित्व करती है। हालांकि, regexp के लिए साइलैब के दस्तावेज़ के अनुसार, पहला तर्क एक स्ट्रिंग होना चाहिए। इसलिए, आपको या तो स्ट्रिंग्स के वेक्टर को एक स्ट्रिंग में संयोजित करना चाहिए या आप पूरी फ़ाइल को सीधे एक स्ट्रिंग में पढ़ सकते हैं और फिर अपना RegEx चला सकते हैं।
नीचे एक स्निपेट है जो आपकी डेटा फ़ाइल में बाइट्स की संख्या प्राप्त करता है, फिर mgetstr, एक फ़ंक्शन जो पढ़ने के लिए वर्णों की संख्या और mopen, और फिर प्रतिरोधक मान प्राप्त करने के लिए एक RegEx पैटर्न चलाता है। अंतिम चरण के रूप में, यह मिलान किए गए स्ट्रिंग्स वेक्टर को युगल के वेक्टर में परिवर्तित करता है।

byte_len = fileinfo('NTC2k2.csv')(1);
str = mgetstr(byte_len, mopen('NTC2k2.csv'));
[_, _, res_vals] = regexp(str,'/((?<=\,)\d+(\.\d+)?(?=\,Ω))+/');
res_vals = strtod(res_vals);

ध्यान दें: पैटर्न लुकअराउंड ((?<=...) और (?=...)) का उपयोग यह कहने के लिए करता है कि एक प्रतिरोधक मान के तुरंत पहले और बाद में क्या होता है एक , और ,Ω , क्रमशः। इन-बीच पैटर्न \d+(\.\d+)? प्रतिरोधक मान के अभिन्न भाग से मेल खाता है और, यदि कोई हो, तो उसका भिन्नात्मक भाग।

0
kalgoritmi 18 अप्रैल 2021, 23:20

बहुत बहुत धन्यवाद! :-) बीटीडब्ल्यू अगर मैं कमांड से सही ढंग से समझता हूं तो विभाजक (जो इस मामले में अल्पविराम है) पर कोई नोट नहीं है, तो क्या मुझे लगता है कि अल्पविराम डिफ़ॉल्ट विभाजक के रूप में सेट है?

0
kubas126 20 अप्रैल 2021, 07:47