user1782046
user1782046

Reputation: 13

Read from csv file and write output to a file

I am new to Perl and would like your help on following scenario, can you please help on this subject.

I have a CSV files with following information and I am trying to prepare a key-value pair from CSV file. Can you please help me with below scenario.

Line 1: List,ID
Line 2: 1,2,3
Line 3: 4,5,6

Line 4: List,Name
Line 5: Tom, Peter, Joe
Line 6: Jim, Harry, Tim

I need to format the above CSV file to get an output in a new file like below:

Line 1: ID:1,2,3 4,5,6
Line 2: Name:Tom,Peter,Joe Jim, Harry, Tim

Can you please direct me on how I can use Perl functions for this scenario.

Upvotes: 0

Views: 631

Answers (2)

Mike Driver
Mike Driver

Reputation: 8511

You're in luck, this is extremely easy in Perl.

There's a great library called Text::CSV which is available on CPAN, docs are here: https://metacpan.org/pod/Text::CSV

The synopsis at the top of the page gives a really good example which should let you do what you want with minor modifications.

Upvotes: 2

Ralph Marshall
Ralph Marshall

Reputation: 223

I don't think the issue here is the CSV format so much as the fact that you have different lists broken up with header lines. I haven't tried this code yet, but I think you want something like the following:

while (<>) {                      # Loop over stdin one line at a time
    chomp;                        # Strip off trailing newline
    my ($listToken, $listName) = split(',');
    next unless $listToken;       # Skip over blank lines
    if ($listToken =~ /^List/) {  # This is a header row
        print "\n$listName: ";    # End previous list, start new one
    } else {                      # The current list continues 
        print "$_ ";              # Append the entire row to the output
    }
}
print "\n";                       # Terminate the last line

Note that this file format is a little dubious, as there is no way to have a data row where the first value is the literal "List". However, I'm assuming that either you have no choice in file format or you know that List is not a legal value.

(Note - I fixed a mistake where I used $rest as a variable; that was caused by my renaming them as I went along and missing one)

Upvotes: 0

Related Questions