BlueLady has asked for the wisdom of the Perl Monks concerning the following question:

can anyone help me with the following problem: The input is for example: http://www.ad.nl/actueel/ZZZK51QP4DC.html&May occure often & The output should be: url1=http://www.ad.nl/actueel/ZZZK51QP4DC.htmlitem1=May occure often And this for more lines. So the number must increase for the next line. $vervang =~ s/http/url1=http/; $vervang =~ s/&/item=/g; print $vervang; @buffer = $vervang; print @buffer; foreach $teller(0..15) { $telop{"http"} = 'url' . ($teller+1) . '=http'; print $telop; } foreach $vervang(@buffer) { $vervang =~ s/& http/$telop/gi; print $vervang; } This is the source, but it doesn't do what it should. Hope to hear from you very soon.

Replies are listed 'Best First'.
Re: need help with search and replace
by Corion (Patriarch) on Sep 15, 2000 at 18:24 UTC

    Please use <CODE> ... </CODE> to surround any code or other file contents you post, as that will make it more readable and responses more likely.

    This is what you posted :

    The input is for example: http://www.ad.nl/actueel/ZZZK51QP4DC.html&May occure often & The output should be: url1=http://www.ad.nl/actueel/ZZZK51QP4DC.htmlitem1=May occure often And this for more lines. So the number must increase for the next line. $vervang =~ s/http/url1=http/; $vervang =~ s/&/item=/g; print $vervang; @buffer = $vervang; print @buffer; foreach $teller(0..15) { $telop{"http"} = 'url' . ($teller+1) . '=http'; print $telop; } foreach $vervang(@buffer) { $vervang =~ s/& http/$telop/gi; print $vervang; }

    Here is my try at it (completely untested, sorry) :

    use strict; # always do this my $line; # this will contain the current line read # from stdin. We could also have used $_, # but using $line is less cryptic my $counter = 1; # This is the counter of the urlXX= string while (<>) { # while we get input, we read it $line = $_; # Munge the current line into what we want $line =~ s!^http://!url$counter=http://!i; # BastardOperator made a post below that got me thinking. # Maybe you want it this way : $line =~ s!&!item=!g; # but maybe you want item1=bla item2=ble etc. # This line will do the second : my $itemcount = 1; while ($line =~ s/&/$itemcount++/e) { # the action is in the while statement } # and print it print $line; # and increment our counter $counter++; };
    But the meaning of the lines following this code is completely unclear to me. What do you want to accomplish by using
    @buffer = $vervang;
    ? @buffer is an array, and $vervang is the munged line.

      # Munge the current line into what we want $line =~ s!^http://!url$counter=http://!i; $line =~ s!&!item=!g;
      I think this should be
      # Munge the current line into what we want $line =~ s!^http://!url$counter=http://!i; $line =~ s!&!item$counter=!g;
      Otherwise, great post
Re: need help with search and replace
by Fastolfe (Vicar) on Sep 15, 2000 at 18:23 UTC
    Man, no offense, but I can't read any of this. Please wrap your code in <code> tags and spell out 'and' instead of &, since you're using & both ways in different places (with and without spaces separating it from other input). Very confusing!

    Perhaps if you would just give a few lines of input and a few lines of output, we could figure out how to achieve that, but your example data is inconsistent with the code below it. Specifically, "item=" v. "item1=".. Is the "& may occur often" bit part of the input or are you saying that that input may occur frequently?

    I for one would work better in this case with 3 or 4 lines of example input and the 3 or 4 lines of resulting output, especially if it's just a few simple substitutions..