TCL grabbing words within special boundaries -
आक्षेप: "{" "}" सीमा के भीतर सभी शब्द प्राप्त करें।
input_file.txt :
set_false_path -from [get_ports {a / b [1] ab / cd_1 abcd_1_ad_}] के माध्यम से [get_pins {th / th1 th2 / th2 [2]}] सेट_डरेट -जो भी हो [get_ports {Xxx / xx1 xxx xxxx_1}] set_false_path 3-से [get_pins {aaa / d aaa / b}] से [get_abc {abc / ac / dd nnn_2 / 2}] अपेक्षित Output_file.txt:
a / b [1] ab / cd_1 abcd_1_ad_ th / th1 th2 / th2 [2] aaa / d aaa / b abc / एसी / dd nnn_2 / 2 NB: "{" "}" की दो या दो से अधिक जोड़ी हो सकती है, और मैं "{" और "}" के भीतर उन सभी शब्दों को पकड़ना चाहता हूं, चाहे कितने भी हो। < / P>
यहाँ मेरा कोड है: इनपुट इनपुट फ़ाइल [खोलें "इनपुट_फाइल। Txt"] सेट आउटपुटफ़ाइल [खुले "आउटपुट_फ़ाइल। Txt" w] जबकि [{$ INFOFFILE लाइन ]! = -1} {first set_word [lindex [split $ line "" 0] अगर {regexp "set_false_path" $ first_word} {# कैसे "{" और "}" के बीच सभी शब्दों को पकड़ने के लिए; उन्हें विभाजित; आउटपुट_फ़ाइल पर डाल}} और {} करीब $ इनपुटफ़ाइल बंद $ आउटपुट फ़ाइल
चूंकि आप डॉन कई लाइनों पर लाइनों को विभाजित नहीं किया गया है, आप निम्न की तुलना में एक सरल स्क्रिप्ट का उपयोग कर सकते हैं:
सेट इनपुटफ़ाइल [खुला "input_file.txt" r] सेट आउटपुटफ़ाइल [खुला "output_file.txt" r ] जबकि {{$ इनपुटफ़ाइल लाइन] हो जाता है! = -1} {# यदि set_false_path से शुरू होता है, तो प्रक्रिया {{लिंडेक्स [विभाजन $ पंक्ति "" 0] eq "set_false_path"} # # सूची में regexp के साथ प्रत्येक तत्व को पकड़ो और प्रत्येक के लिए आउटपुट फ़ाइल # m में प्रिंट होता है, जिसमें पूरे मैच होते हैं, समूह उप-मैचों में अग्रगमन {m समूहों} होते हैं [regexp -all -inline - {\ {([^ \}] +) \}} $ पंक्ति] {# किसी भी ट्रिम करें ट्रेलिंग / अग्रणी रिक्त स्थान सेट समूह [स्ट्रिंग ट्रिम $ समूह] फॉरवर्ड आउट [स्प्लिट $ समूह] {डालता है $ आउटपुट फाईल $ आउट}}} close $ inputfile close $ outputfile
Comments
Post a Comment