http://www.perlmonks.org?node_id=1041173


in reply to Re^3: Text to CSV with user input comma
in thread Text to CSV with user input comma

#!/usr/bin/env perl use Text::CSV; my $csv = Text::CSV->new(); open(my $in_fh, "<", "temporary.tl") or die "please create your temporary file: $!"; my @rows = (); + # keeps the count of rows in txt input file while( my $line = <$in_fh> ){ + # copies the line from our input chomp $line; push @rows, [ split m{ , }msx, $line ]; + } close $in_fh or die "could not close $in_file: $!\n"; $csv->eol( "\n" ); + # after each line it gives a new line command print " Please enter the name of your csv file in which you will make +modifications "; print "\n"; my $out_file = <>; chomp $out_file; open my $out_fh, '>', $out_file or die "could not open $out_file: $!\n +"; for my $row ( @rows ){ $csv->print( $out_fh, $row ) or die "could not print to $out_file: $ +!\n"; } close $out_fh or die "could not close $out_file: $!\n";
This is what I am doing

Replies are listed 'Best First'.
Re^5: Text to CSV with user input comma
by Tux (Canon) on Jun 28, 2013 at 08:14 UTC

    You are using the module only for the generation of CSV, not for the parsing. Start by writing your parsing code safer:

    use Text::CSV; my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 }); open my $in_fh, "<", "temporary.tl" or die "please create your temporary file: $!"; my @rows = (); while (my $row = $csv->getline ($in_fh)) { push @rows, $row; }

    I am sure I posted the same answer in this thread


    Enjoy, Have FUN! H.Merijn
    code
      Hey thanks for helping

      but i made the changes , but still the problem continues

Re^5: Text to CSV with user input comma
by hdb (Monsignor) on Jun 28, 2013 at 08:28 UTC

    So you are reading from a file, split on comma, then write it into another file. I would expect that there are no commas in the data you are writing to the new file as all commas are gone due to the splitting.

    Probably some example would be useful like an input line and the corresponding output line that has double quotes in front of every word.

      yes pretty much , but what I have done is replaced the commas of text file to a delimiter as ;; , so that i can split it using ;; , and even if there is a comma in file it would not affect it

      input looks like 50;; C,nt ;; ;;8;; 1;; ds;; 1;; a;; 1;; 0;; 0;; ;; ;; ;; output looks like " 50"," C ,nt "," ",8," 1","ds","1"," Va"," 1"," 0"," 0"," "," "," " and I just want these " " to get omitted

       push @rows, [ split m{ ;; }msx, $line ]; I have done this in the code

        Well, the double quotes are being inserted to be able to distinguish between the comma as a field separator and the comma within the fields, eg " C ,nt ". If you write the data to file without them, then you lose this ability.

        If that is really what you desire, then something like print $out_fh join ",", @$row; might work better for you than using Text::CSV. However, I cannot really imagine why this would be useful...

        UPDATE: ...or use

        $csv = Text::CSV->new ({ quote_char => undef });