in reply to insert null in missing places of csv

To process CSV, use the Text::CSV_XS module (I guess your CSV is a bit more complicated than shown in the example). Read the input line by line, replace each zero-length entry with the "NULL" string.

#!/usr/bin/perl use warnings; use strict; use Text::CSV_XS; my $csv = 'Text::CSV_XS'->new({binary => 1}); open my $CSV, '<', shift or die $!; while (my $row = $csv->getline($CSV)) { $csv->say(\*STDOUT, [ map length ? $_ : 'NULL', @$row ]); }
($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,

Replies are listed 'Best First'.
Re^2: insert null in missing places of csv
by Tux (Canon) on Feb 19, 2016 at 13:51 UTC

    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

      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.

        > 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:  <%-{-{-{-<