Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Modify a txt file

by mrstlee (Beadle)
on Oct 20, 2011 at 09:36 UTC ( #932599=note: print w/ replies, xml ) Need Help??


in reply to Modify a txt file

This one uses the new(ish) treat-strings-as-file-handles feature (See Effective Perl Programming)

my $data = q(0 ASDF ASEE ASEE 13 DERG DREG 28 QWER QWER 42 WERT WERT WERT 55 QWEASD QWEASD QWEASD QWEASD ); open $hndl , "<", \(my $s = $data); open $out , ">", \(my $formatted = ''); my $substitute_field; READ_FILE: while (my $line = <$hndl>) { chomp $line; ## Ignore any lines that don't contain relevant text $line =~ /\S+/ or next READ_FILE; $line =~ /^\s*(\d+)(\s+)([A-Z]+)/ and do { $substitute_field = $1; print $out $substitute_field, $2 ,$substitute_field,"\n"; next READ_FILE; }; ## If we don't have a field to substitute move on defined $substitute_field or next READ_FILE; ## Must have valid line $line =~ s/^(\s*)([A-Z]+)/$1$substitute_field/; print $out $line,"\n"; } print $formatted; close $hndl; close $out;
In:
0       ASDF
        ASEE
        ASEE

13      DERG
        DREG

28      QWER
        QWER

42      WERT
        WERT
        WERT

55      QWEASD
        QWEASD
        QWEASD
        QWEASD
out:
0       0
        0
        0
13      13
        13
28      28
        28
42      42
        42
        42
55      55
        55
        55
        55


Comment on Re: Modify a txt file
Download Code
Re^2: Modify a txt file
by johngg (Abbot) on Oct 20, 2011 at 22:39 UTC

    You can dispense with the need for an input scalar by opening a filehandle on a reference to a HEREDOC. Also, there's no need to initialise your output scalar to the empty string as any previous content will be clobbered by the '>' in the open.

    knoppix@Microknoppix:~$ perl -e ' > open my $inFH, q{<}, \ <<EOD or die qq{open: << HEREDOC: > $!\n}; > line 1 > line 2 > line 3 > EOD > > my $out = qq{some rubbish here\n}; > open $outFH, q{>}, \ $out or die qq{open: > scalar: $!\n}; > > while ( <$inFH> ) > { > print $outFH uc; > } > > print $out;' LINE 1 LINE 2 LINE 3 knoppix@Microknoppix:~$

    I hope this is of interest.

    Cheers,

    JohnGG

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (8)
As of 2014-12-19 00:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (69 votes), past polls