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


in reply to Get record separator of a file

You could use the unix file command to determine the file type and then you'll know what you need to do for the file types you're handling.

Also file will try to guess the separator for text files.

I think there's a cpan module for this but I've never used it -- does anyone know anything about it?

Replies are listed 'Best First'.
Re^2: Get record separator of a file
by afoken (Chancellor) on Nov 14, 2012 at 10:02 UTC
    You could use the unix file command to determine the file type and then you'll know what you need to do for the file types you're handling.

    file(1) just guesses, based on some magic constants, and it often guesses wrong.

    Also file will try to guess the separator for text files.

    No. It detects line endings, but not record separators for CSV files:

    /tmp>echo "foo;bar;baz" > testme /tmp>echo "1;2;3" >> testme /tmp>cat testme foo;bar;baz 1;2;3 /tmp>file testme testme: ASCII text /tmp>
    I think there's a cpan module for this but I've never used it -- does anyone know anything about it?

    File::Type, File::MMagic, both share the guessing problem.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)

      No. It detects line endings, but not record separators for CSV files:

      /tmp>echo "foo;bar;baz" > testme /tmp>echo "1;2;3" >> testme

      You seem to be confusing record separators and field separators. The line ending is the record separator and the ';' is the field separator.

        You seem to be confusing record separators and field separators.

        Yes, unfortunately I did.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)