in reply to Re: insert null in missing places of csv
in thread insert null in missing places of csv

Note that this approch changes both 1,2,,3,4 and 1,2,"",3,4 to 1,2,NULL,3,4.

The safe way would be

$ cat test.pl use 5.18.2; use warnings; use Text::CSV_XS qw( csv ); csv (in => csv ( in => *ARGV, blank_is_undef => 1, on_in => sub { $_ //= "NULL" for @{$_[1]}; }, ), ); $ cat test.csv 1,2,,3,4 1,2,"",3,4 $ perl test.pl test.csv 1,2,NULL,3,4 1,2,,3,4

Enjoy, Have FUN! H.Merijn

Replies are listed 'Best First'.
Re^3: insert null in missing places of csv
by ukhare (Novice) on Feb 20, 2016 at 07:53 UTC

    awesome

    this meets my requirement, all other suggestions are even replacing 0 with NULL.

    Could you please suggest me how can i call csv file directly inside the script instead of calling it on command prompt ?

    This is what I am running using your input:

    #!/usr/bin/perl #use strict; use warnings; use Text::CSV_XS qw( csv); csv (in => csv ( in => *ARGV, blank_is_undef => 1, on_in => sub { $_ //= "NULL" for @{$_[1]}; }, ), );
    perl test.pl 1.csv

    all i need is to call 1.csv inside test.pl only

    perl test.pl

      It's in the docs:

      # use command line args in => *ARGV, # use a file in => "1.csv",

      Enjoy, Have FUN! H.Merijn

      In Perl the command line arguments are automatically transferred into the special array @ARGV. All you need to do is replace @ARGV in your code with some other static array of your choice.

        TRIED THIS

        but getting syntex error :(

        #!/usr/bin/perl #use strict; use warnings; use Text::CSV_XS qw( csv); my $input_dir = "d:\\perl"; #defining path for input directory my $output_dir = "d:\\perl\\output"; #defining path for output directo +ry my $input_file = "$input_dir\\output8.csv"; #defining path for input f +ile my $output_file = "$output_dir\\output82.csv"; #defining path for outp +ut file in which X from time stamp is replaced with 0 print STDOUT "\n removing $output_file if already exists \n"; unlink ($output_file); #removing $output_file if already exists \n"; open (OUTPUT, ">>$output_file") or die "Error 016: Error creating $out +put_file \n"; #create and output file open (INPUT, "<$input_file") or die "Error 001: Error locating file $i +nput_file \n"; #open input file csv (in => csv { in => (<INPUT>), blank_is_undef => 1, on_in => sub { $_ //= "NULL" for @{$_[1]}; }, } print OUTPUT; #print in output +file close (OUTPUT); #close output f +ile close (INPUT);

        OUTPUT

        D:\perl>perl test.pl syntax error at test.pl line 24, near "close" Execution of test.pl aborted due to compilation errors.
      > all other suggestions are even replacing 0 with NULL.

      Mine doesn't. Or do you think that length 0 is false?

      ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
      ... all other suggestions are even replacing 0 with NULL.

      The regex solution does not!


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