Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^5: Cutting text from the end of the file and adding it to the top

by Utilitarian (Vicar)
on Sep 30, 2019 at 12:21 UTC ( #11106870=note: print w/replies, xml ) Need Help??


in reply to Re^4: Cutting text from the end of the file and adding it to the top
in thread Cutting text from the end of the file and adding it to the top

$ cat tmp/tmp.pl && perl tmp/tmp.pl #!/usr/bin/perl # use strict; use warnings; my $heading=readline(DATA); my @headings=split/,/,$heading; print $heading; my (@index,@values); while(<DATA>){ chomp; if (/^(\w+),\s*$/){ push @index,$1; } else{ @values=split/,/,$_; } } my $row = 0; for my $record (@index){ print join(",\t", $record, @values[(scalar(@headings) * $row) .. ( +(scalar(@headings) * $row) + $#headings -1)]),"\n"; $row++; } __DATA__ a, b, c, d aa, bb, aa, bb, 12,33,102,111,223,24,88,56,99,130,21,45,88,90,212,500 a, b, c, d aa, 12, 33, 102 bb, 223, 24, 88 aa, 99, 130, 21 bb, 88, 90, 212
I trimmed the trailing "," in your headings line as that breaks the CSV standard, but your format seems variable so...
print "Good ",qw(night morning afternoon evening)[(localtime)[2]/6]," fellow monks."

Replies are listed 'Best First'.
Re^6: Cutting text from the end of the file and adding it to the top
by oysterperl (Novice) on Oct 01, 2019 at 05:26 UTC
    Hi, Sorry for the confusion, the file is a CSV file and every entry has a comma after it as a delimiter. (the format was not finalized but now it is CSV). So the output should be the following, spaces are not needed in the output file, it only needs to be comma separated. Also I have added the numbers 999, 9999 to the input so as to make each row in the output complete.
    a, b, c, d, aa, 12, 33, 102, bb, 111, 223, 24, aa, 88, 56, 99, bb, 130, 21, 45, aa, 88, 90, 212, bb, 500, 999, 9999
    Also I need to print it back to the same file. Do I add the file pointer after the print statement below to print it back to the same file?
    for my $record (@index){ print DATA join(",\t", $record, @values[(scalar(@headings) * $row) + .. ( +(scalar(@headings) * $row) + $#headings -1)]),"\n"; $row++;

          a,       b,    c,   d,
      There seem to be four column labels, but
      aa,     12,     33,     102,
      each row now has three data fields. Also, CSV records don't usually end in a separator (comma) field.

      I'm assuming this is all some kind of elaborate troll, but I really can't see the entertainment value.


      Give a man a fish:  <%-{-{-{-<

        Sorry for that, it was a typo. The number of columns will match the data. So it should be like this:
        a, b, c, d aa, 12, 33, 102, 111 bb, 223, 24, 88, 56 aa, 99, 130, 21, 45 bb, 88, 90, 212, 500

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2020-10-29 06:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (269 votes). Check out past polls.

    Notices?