in reply to Re^2: Need to save a single line from delete on some special condition
in thread Need to save a single line from delete on some special condition

the three assumptions you mentioned are accurate
If you're really sure about the indentation something like that can help :
use strict; use warnings; use v5.10; my $data = do { local $/; <DATA> }; my @sections = split /(\s{4}pin.*?\s{4}\})/s, $data; for (@sections) { say; say '-' x 24; } __END__ cell (lib_1) { dont_use : true ; dont_touch : true ; pin ("HIZIBI_IN_1") { direction : input ; clock : true ; max_transition : 1 ; capacitance : 12 ; } pin ("HIZIBI_79") { direction : output ; max_transition : 10; min_capacitance : 3 ; } pin ("HIZIBI_IN_1") { direction : input ; clock : true ; max_transition : 1 ; capacitance : 1 ; } pin ("HIZIBI_78") { direction : output ; max_transition : 10; min_capacitance : 34 ; capacitance : 34 ; } pin ("HIZIBI") { direction : output ; clock : true ; max_transition : 20; related_power_pin : VDD ; related_ground_pin : VSS ; timing () { cell_fall (into_f1) { index_1("1,2,3,4,5") ; index_2("1,2,3,4,5") ; values("13, 13, 14, 16, 18",\ "13, 14, 15, 16, 19",\ "14, 15, 16, 17, 20",\ "15, 15, 16, 18, 20",\ "15, 16, 17, 18, 21") ; } } } }
It's very rough, and assumes a very consistent indentation. It divides the input into section (even empty ones between the pins but that shouldn't be an issue):
cell (lib_1) { dont_use : true ; dont_touch : true ; ------------------------ pin ("HIZIBI_IN_1") { direction : input ; clock : true ; max_transition : 1 ; capacitance : 12 ; } ------------------------ ------------------------ pin ("HIZIBI_79") { direction : output ; max_transition : 10; min_capacitance : 3 ; } ------------------------ ------------------------ pin ("HIZIBI_IN_1") { direction : input ; clock : true ; max_transition : 1 ; capacitance : 1 ; } ------------------------ ------------------------ pin ("HIZIBI_78") { direction : output ; max_transition : 10; min_capacitance : 34 ; capacitance : 34 ; } ------------------------ ------------------------ pin ("HIZIBI") { direction : output ; clock : true ; max_transition : 20; related_power_pin : VDD ; related_ground_pin : VSS ; timing () { cell_fall (into_f1) { index_1("1,2,3,4,5") ; index_2("1,2,3,4,5") ; values("13, 13, 14, 16, 18",\ "13, 14, 15, 16, 19",\ "14, 15, 16, 17, 20",\ "15, 15, 16, 18, 20",\ "15, 16, 17, 18, 21") ; } ------------------------ } } } ------------------------

Edit: it also assumes that the file is not so big that you can't read it all at once.

Replies are listed 'Best First'.
Re^4: Need to save a single line from delete on some special condition
by anirbanphys (Beadle) on Mar 26, 2019 at 14:30 UTC

    Thank you for helping me.

    Now I need to find "direction : output", so we have here for pin HIZIBI_79, HIZIBI_78 and HIZIBI. But only pin HIZIBI is containing "timing" group, so for this pin we need to delete "max_transition" line and have to print the final output put file. Please refer OUT_FILE at he beginning of the post. And pin name can be anything.

    Can we add the logic inside foreach loop?

      Did you manage do use the code I proposed you? If so, could you show us the updated code and explain where it is lacking. Otherwise, where did you get stuck with it?

      FYI, Although more complex, clueless newvie's proposition is really more robust.