create file using Text::CSV
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 8 Dec 2023 18:32:04 +0000 (19:32 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 8 Dec 2023 18:32:04 +0000 (19:32 +0100)
upari.pl

index 7841a51..dc8bead 100755 (executable)
--- a/upari.pl
+++ b/upari.pl
@@ -302,32 +302,36 @@ store $merge_ids, $merge_file;
 
 my $out_file = 'merged.csv';
 print "out_file $out_file";
-open(my $out_fh, '>', $out_file);
+
+my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 });
+
+open( my $out_fh, ">:encoding(utf8)", $out_file ) or die "$out_file: $!";
+
+my $all_headers;
 foreach my $val ( 1 .. 4 ) {
-       print $out_fh join(',', map { unac_string('utf-8',$_) . '_' . $val } @{ $data_headers[$val] });
-       print $out_fh ',';
+       push @$all_headers, map { unac_string('utf-8',$_) . '_' . $val } @{ $data_headers[$val] };
 }
-print $out_fh "broj_valova";
-print $out_fh "\n";
+push @$all_headers, "broj_valova";
+$csv->say($out_fh, $all_headers);
 
 foreach my $key ( sort keys %$data ) {
        print " $key";
        foreach my $id ( sort keys %{ $data->{$key} } ) {
-               #print $out_fh "## $id ## ";
 
                my $broj_valova = 0;
 
+               my $row;
+
                foreach my $val ( 1 .. 4 ) {
                        if ( my $id_data = $data->{$key}->{$id}->{$val} ) {
-                               print $out_fh join(',', map { m/,/ ? qq{"$_"} : $_ } @$id_data);
+                               push @$row, @$id_data;
                                $broj_valova++;
                        } else {
-                               print $out_fh ( ',' x $#{ $data_headers[$val] } ) ; # FIXME +1?
+                               push @$row, undef foreach ( 0 .. $#{ $data_headers[$val] } );
                        }
-                       print $out_fh ',';
                }
-               print $out_fh $broj_valova;
-               print $out_fh "\n";
+               push @$row, $broj_valova;
+               $csv->say($out_fh, $row);
        }
 }
 close $out_fh;