Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: regex pattern match

by reaper9187 (Scribe)
on Apr 01, 2013 at 10:08 UTC ( #1026454=note: print w/ replies, xml ) Need Help??


in reply to regex pattern match

A quick addition to the problem .. I have a separate part of text that i need to replace .. for eg: I/p(read from a file) is of the form:

"ABC","DEF","This is a test","Hello";
and the o/p needs to look something like :
"ABC","DEF","This is a substitution","Hello";
In short i need to replace pattern within quotes in a line .. I need help with the pattern match .. please help ..!!! Update:
Could some one please help me debug this code..??
#!/usr/bin/perl -w my $variable; my @fields; my $line =0 ; use vars qw($current_path $filename); print "Enter the desired path: "; my $path = <STDIN>; chomp( $path ); my $in_file = "test.txt"; my $out_file = "testout.txt"; open (DATA, "<$in_file") or die "Can't open $in_file: $!\n"; open (OUT, ">$out_file") or die "Can't open $out_file: $!\n"; while ( <DATA> ) { chomp; my ($first, $last ) = /(.+",)(.+)/; $last =~ s//"\n$first"/g; my @parameters = split /"\s*,\s*"/, $first; $parameters[1] =~ tr/"//d; my $path = "$path\\"; my $new_path = $path.$parameters[1]; @array = split(/,/,$last); foreach $entry(@array) { $entry =~ tr/"//d; $entry =~ s|(.+)\\|$1::|; ($current_path,$filename) = split/::/,$entry; $last =~s/$current_path/$new_path/ig; #rename the last entry which con +tains a path to folder name with the new path print "$last\n"; } print "\n"; } close DATA; close OUT;


Comment on Re: regex pattern match
Select or Download Code
Re^2: regex pattern match
by hdb (Prior) on Apr 01, 2013 at 12:33 UTC

    Your question is not easy to understand. Would it be possible to provide:

    • A sample input file, just a couple of lines,
    • the desired output file, and
    • some more ideas what you want to match and replace?
    Also, it seems, as your example grows more complex, you should be using Text::CSV, which allows you to first split your line properly along the commata, and then to split any entry along commata.

Re^2: regex pattern match
by AnomalousMonk (Abbot) on Apr 01, 2013 at 23:00 UTC
    my ($first, $last ) = /(.+",)(.+)/; $last =~ s//"\n$first"/g;

    I second hdb's reply in general.

    Let me add that the
        $last =~ s//"\n$first"/g;
    statement from the posted code quoted above is very unlikely to do what you want: it will match the  // null regex pattern globally and do a substitution against what is matched. If there has been a previous successful regex match (e.g., the match in the preceding line), the  // regex matches using the previously matched regex. (If there has been no previous successful regex match, the  // regex matches anything!) As it stands, this substitution seems to be a no-op. If it is part of some carefully thought out strategy, I advise you to abandon it immediately: it has 'maintenance nightmare' written all over it! (In the code example below,  \x22 stands in for an unbalanced  " (double-quote) character.)

    >perl -wMstrict -le "$_ = qq{\"ABC\",\"DEF\",\"This is a test\",\"Hello\"}; ;; my ($first, $last ) = /(.+\x22,)(.+)/; print qq{'$last'}; ;; $last =~ s//\"\n$first\"/g; print qq{'$last'}; " '"Hello"' '"Hello"'

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (19)
As of 2015-07-02 09:26 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 (33 votes), past polls