in reply to Re^2: Need to sort comma delimited, double quoted file
in thread Need to sort comma delimited, double quoted file

That code would fail if *any* of the lines contains embedded newlines.

I'd simplify the code to this, assuming the header has no embedded newlines:

my $csv = Text::CSV_XS->new ({ binary => 1, decode_utf8 => 1, auto_diag => 1, allow_loose_quotes => 1, }); open my $data, "<:encoding(utf-8)", $file or die "$file: $!\n"; my $ref; my @header = $csv->header ($data); while (my $row = $csv->getline ($data)) { push @$ref, $row; }

In CSV don't let perl deal with the EOL. In Text::CSV and Text::CSV_XS the differences between Windows EOL and Linux EOL aur fully automatically dealt with within the definition of legal CSV.

I cannot tell anything about inappropriate ioctl calls regarding to CSV parsing. Neither on Linux nor on Windows. If the error is reproducable, I'd need the CSV file in full (preferably in a ZIP to ensure no binary conversions take place).


Enjoy, Have FUN! H.Merijn

Replies are listed 'Best First'.
Re^4: Need to sort comma delimited, double quoted file
by CSharma (Sexton) on Jul 28, 2017 at 04:19 UTC
    Thanks everyone for help!! I got things worked with below options in my case.
    my $csv = Text::CSV->new({binary => 1, decode_utf8 => 1, auto_diag => +1, allow_loose_quotes => 1, allow_loose_escapes => 1});
Re^4: Need to sort comma delimited, double quoted file
by CSharma (Sexton) on Jul 27, 2017 at 08:13 UTC

    Can anybody please help, how to handle embedded quotes in this case (with Text::CSV module? See the HTML field below:

    7252798,5830,"Glycosylated Haemoglobin (HbA1C) EDTA",1656,"template",, +"<HTML><HEAD><META NAME=\"GENERATOR\" Content=\"Microsoft DHTML Editi +ng Control\"><TITLE></TITLE></HEAD><BODY><P>&nbsp;</P></BODY></HTML>" +,2017-07-23 15:15:27,0,"",N,"",,2017-07-23 15:15:27,MM0165818,6,"All +Tests Done and Verified",,MSIN743908,2017-07-22 16:34:07,10,"Max Supe +r Speciality Hospital-Saket",27,"Poonam S Das",0,"S GUPTA",False,"S", +"GUPTA",SKMS,355419,21278,"Puneet Agarwal",1945-01-23 00:00:00,0,NUL +L,"9810006763","INFO@MAXHEALTHCARE.COM",OP,NO,Verified,2017-07-22 16: +34:07,2017-07-22 16:34:07,Lab,697693,0,"",M
    Error:

    # CSV_XS ERROR: 2023 - EIQ - QUO character not allowed @ rec 1981 pos 110 field 7 Line could not be parsed: Inappropriate ioctl for device2023EIQ - QUO character not allowed11019827

      In the standard fashion as mentioned in the Text::CSV_XS docs:

      #!/usr/bin/env perl use strict; use warnings; use Text::CSV_XS; my $csv = Text::CSV_XS->new ({ quote_char => '"', escape_char => '\\' }); open my $fh, "<:encoding(utf8)", "foo.csv" or die "foo.csv: $!"; while (my $row = $csv->getline ($fh)) { print (join "\n", @$row, ""); } close $fh;

      Output is:

      7252798 5830 Glycosylated Haemoglobin (HbA1C) EDTA 1656 template <HTML><HEAD><META NAME="GENERATOR" Content="Microsoft DHTML Editing Co +ntrol"><TITLE></TITLE></HEAD><BODY><P>&nbsp;</P></BODY></HTML> 2017-07-23 15:15:27 0 N 2017-07-23 15:15:27 MM0165818 6 All Tests Done and Verified MSIN743908 2017-07-22 16:34:07 10 Max Super Speciality Hospital-Saket 27 Poonam S Das 0 S GUPTA False S GUPTA SKMS 355419 21278 Puneet Agarwal 1945-01-23 00:00:00 0 NULL 9810006763 INFO@MAXHEALTHCARE.COM OP NO Verified 2017-07-22 16:34:07 2017-07-22 16:34:07 Lab 697693 0 M

      No warnings, no errors.