Greetings.
I'm trying to write a CSV import routine for MySQL ( possibly will
extend it with a flashy GUI and release open-source ).
I'm having great difficulty doing this under Windows. If I use the code
below under Linux, it works perfectly, detecting correctly whether the
file has a Windows ( \r\n ) EOL sequence or a Unix ( \n ) EOL sequence.
However when I run it under Windows, the 1st substr() function that gets
the last 2 characters doesn't see things properly! Instead, it sees the
\n character and then a double quote ( " ) ... all the fields are
wrapped in double-quotes.
Why doesn't this code see the \r portion under Windows?
How should I be doing the stuff below so that it works?
Thanks :)
Dan
---
# Parse the 1st line of the import file and extract fieldnames
eval{
open SOURCE, $options->{source}
|| die "Failed to open file $options->{source}.\nIs the file
already open?";
};
if ( $@ ) {
Gtk2::Ex::Dialogs::ErrorMsg->new_and_run(
title => "Error opening file!",
text => $@
);
return FALSE;
}
# Read the 1st line
my $fieldnames = <SOURCE>;
# Close file
close SOURCE;
# Figure out what happens at the end of each line
# This should either be \n ( Unix ), or \r\n ( Windows )
my $line_terminator;
if ( substr( $fieldnames, length( $fieldnames ) -2, 2 ) eq "\r\n" ) {
# We've found a Windows EOL sequence
$line_terminator = "\r\n";
$fieldnames = substr( $fieldnames, 0, length( $fieldnames ) - 2 );
print "\n\nDetected a Windows ( \\r\\n ) EOL sequence\n";
} else {
# Test for a Unix NewLine sequence
if ( substr( $fieldnames, length( $fieldnames ) -1, 1 ) eq "\n" ) {
# We've found a Unix NewLine sequence
$line_terminator = chop( $fieldnames );
print "\n\nDetected a Linux ( \\n ) EOL sequence\n";
} else {
print "\n\n$fieldnames\n\n";
Gtk2::Ex::Dialogs::ErrorMsg->new_and_run(
title => "Please get Dan ...",
text => "modules::mysql::import failed to find EOL sequence!"
);
return FALSE;
}
}
--
Daniel Kasak
IT Developer
NUS Consulting Group
Level 5, 77 Pacific Highway
North Sydney, NSW, Australia 2060
T: (+61) 2 9922-7676 / F: (+61) 2 9922 7989
email: [EMAIL PROTECTED]
website: http://www.nusconsulting.com.au
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>