Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Perl Sorting Help

by frozenwithjoy (Curate)
on Feb 12, 2013 at 21:01 UTC ( #1018447=note: print w/ replies, xml ) Need Help??


in reply to needed help

As toolic said, you should use a module for this if there is one available. However, if not, I threw this together. It works for this set, but you may need to customize it depending on how (ir)regular your input is:

#!/usr/bin/env perl use strict; use warnings; use feature 'say'; say "Code:"; my @current_command; while (<DATA>) { chomp; push @current_command, $1 if /^\s*(.+)\s{$/; if (/^\s*(.+);$/) { my $last_term = $1; say "set @current_command $last_term"; } pop @current_command if /}$/; } __DATA__ deviceconfig { system { snmp-setting { snmp-system { location "VA"; contact US; send-event-specific-traps yes; } access-setting { version { ll1 { snmp-community-string trap; } } } }

Output:

Code: set deviceconfig system snmp-setting snmp-system location "VA" set deviceconfig system snmp-setting snmp-system contact US set deviceconfig system snmp-setting snmp-system send-event-specific-t +raps yes set deviceconfig system snmp-setting access-setting version ll1 snmp-c +ommunity-string trap


Comment on Re: Perl Sorting Help
Select or Download Code
Replies are listed 'Best First'.
Re^2: Perl Sorting Help
by zee3b (Novice) on Feb 12, 2013 at 21:19 UTC
    Thanks a lot for the reply. Now what if I was using a txt file as an input. Where would the fine name go. I'm sorry for asking such silly questions as I am a beginner and trying really hard to understand.
      Hey zee3b, I figured I'd respond to your PM here so I'd have more room.
      Hey, thanks a lot for the help. That really worked and was exactly what I was looking for. When you get a few mins, can you please explain how the code works for my understanding. Thanks!
      # Read through file/data one line at a time. while (<DATA>) { # Remove newline from end of line (actually not necessary for your + input). chomp; # If a line ends with '{', use a regular expression (REGEX) to cap +ture # the relevant portion by having that portion surrounded by parent +heses. # Push the captured string (contained within the variable '$1', si +nce it # is the first captured string) onto the end of the array '@curren +t command'. # This REGEX matches: # the beginning of the line: ^ # 0 or more spaces: \s* # 1 or more of anything (captured because it is in parentheses +): (.+) # 1 space followed by 1 {: \s{ # the end of the line: $ push @current_command, $1 if /^\s*(.+)\s{$/; # If a line ends with ';', use a REGEX to capture the relevant por +tion, # then print out the contents of the array followed by the string +you # just captured and assigned to '$last_term'. if (/^\s*(.+);$/) { my $last_term = $1; say "set @current_command $last_term"; } # If a line ends with '}', that means we are moving up a level, so + you # remove the last element of the array '@current_command'. pop @current_command if /}$/; }

        Thanks a lot frozenwithjoy. That really cleared a lot of my confusions. It's the regular expressions I need to learn.

        7stud, thanks for the advice. I bought the Learning Perl book and will definitely follow your advice, finish the book and move onto the intermediate level one.

        Thanks a lot frozenwithjoy. That really cleared a lot of my confusions. It's the regular expressions I need to learn. 7stud, thanks for the advice. I bought the Learning Perl book and will definitely follow your advice, finish the book and move onto the intermediate level one.
      Take a look at the first example in open. Once you open your file handle, replace <DATA> with <$your_filehandle> at the beginning of the loop.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1018447]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (13)
As of 2015-07-30 19:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (273 votes), past polls