in reply to Re: Manipulating File Contents Interactively
in thread Manipulating File Contents Interactively

This node falls below the community's threshold of quality. You may see it by logging in.
  • Comment on Re^2: Manipulating File Contents Interactively

Replies are listed 'Best First'.
Re^3: Manipulating File Contents Interactively
by tilly (Archbishop) on Dec 22, 2008 at 20:25 UTC
    What he was saying is that you have not given us enough detail for anyone to point you to an existing example, but it doesn't sound very hard. Unfortunately nobody can show you how to do it because you didn't give enough detail. So while Perl can do it, you need a clearer spec.

    For instance do the inserted lines borrow any information from the matched lines? Are there any strings which you only match if they are not part of certain other things? If so then you'd have to use a more complex approach. Otherwise you could do something as simple as build your transformations up with:

    my %transformation_by_filetype => ( "c" => { "foo" => qq{ You had a foo. }, "foo" => qq{ Bar is great. }, }, ); Then run something like this: <code> #! /usr/bin/perl -w use strict; for my $file (@ARGV) { my $filetype = determine_filetype($file); my $transformation = $transformation_by_filetype{$filetype}; rename($file, "tmp.$$") or die "Can't rename $file to tmp.$$: $!"; open (IN, "<", "tmp.$$") or die "Can't read tmp.$$: $!"; open(OUT, ">", $file) or die "Can't write $file: $!"; while (my $line = <IN>) { print OUT $line; for my $pattern (keys %$transformation) { if ($line =~ /$pattern/) { print OUT $transformation->{$pattern}; } } } } sub determine_filetype { my $filename = shift; $filename =~ s/.*\.//; return $filename; }
    This is untested code so it may not even compile. It is also rather inflexible. See references quick references for an explanation of the data structures I used. Note that if a line matches both foo and bar this will insert both sets of strings and you can't control the order in which it does it. But if you understand how this works, and you understand complex data structures, then you should be able to tackle your undoubtedly more complex situation.
Re^3: Manipulating File Contents Interactively
by Your Mother (Archbishop) on Dec 22, 2008 at 19:57 UTC

    None. This is perfect for Perl. ikegami was half-way offering to write it for you if you defined the problem clearly enough to answer. :)

    I'll add that Perl is not a scripting language. It's a high level programming language that happens to excel at scripting.