in reply to Parsing a 3-Column Tab-Deliminated File

Maybe overkill, but here's a DBI solution with DBD::CSV:
use DBI; my $dbh = DBI->connect("DBI:CSV:f_dir=.;csv_sep_char=\t") or die "Cann +ot connect: " . $DBI::errstr; $dbh->{'csv_tables'}->{'employees'} = { file => 'employees.txt'}; # now you have your choice of DBI commands. This one gets a ref to a +Array of Hashrefs my $aref = $dbh->selectall_arrayref("select * from employees", {Slice= +>{}}, ); # AoH $dbh->disconnect();
Or, to go overkill one more step :) wrap that in Class::DBI:
package My::Employees; use base qw/Class::DBI/; __PACKAGE__->connection("DBI:CSV:f_dir=.;csv_sep_char=\t",); __PACKAGE__->db_Main->{'csv_tables'}->{'employees'} = { file => 'emplo +yees.txt'}; # i'm guessing a little here .. it's a lot easier if the + file doesn't have an extension __PACKAGE__->table('employees'); __PACKAGE__->columns(Primary => qw/NAME/ ); # is it unique?? __PACKAGE__->columns(All => qw/NAME EMAIL OFFICE/); package main; my @all = My::Employees->retrieve_all; my $first = $all[0]; warn $first->EMAIL;

Replies are listed 'Best First'.
Re^2: Parsing a 3-Column Tab-Deliminated File
by Hue-Bond (Priest) on Oct 03, 2006 at 15:23 UTC
    my $dbh = DBI->connect("DBI:CSV:f_dir=.;csv_sep_char=\t") or die "Cannot connect: " . $DBI::errstr;

    I had a hard time trying the DBD::CSV example, until I saw in the documentation that the default value for csv_eol was \015\012 (I'm on Unix, so \n has other value here). When I stuck a csv_eol=\n to that line everything started to work.

    Later I thought it would also be safe for Windows or Mac users to specify the csv_eol explicitly, since \n would map to the correct sequence of characters for the architecture. However, I haven't seen anyone recommending this ("Use always csv_eol=\n, unless working with files from other platforms"), maybe because there's a good reason for not doing so. Is there any?

    Update: Fixed typo spotted by planetscape.

    --
    David Serrano

      Thereby hangs a tale. I inherited DBD::CSV from Jochen Weidman back in 1999 and at that time it already had many users. Jochen had decided on using windows-style eol as the default because the primary intended audience was users of Excel. I left the default as-is in DBD::CSV for backward compatibility but in my DBD::AnyData I changed the default to be "\n" (i.e. the line ending on the platform where the script is being run) which usually works better except when people get files from elsewhere. So, in short, no, always using "\n" is not a bad idea.