#!/usr/bin/env perl use strict; use warnings; use feature ':5.10'; use Parse::USDASR; use IO::All; use DBI; my $dbh = DBI->connect("dbi:SQLite:dbname=sr21.sqlite3", "", "") or die $@; sub file_to_table { my $file = shift; local $" = ", "; my $table = lc($file); $table =~ s/\.txt$//; my @field_names = Parse::USDASR->field_names_for($file); if ( !@field_names ) { warn "Unknown $file\n"; return; } $dbh->do("begin transaction;"); $dbh->do("CREATE TABLE $table (@field_names);"); say "Table $table created... "; my $insert = $dbh->prepare("INSERT INTO $table VALUES (" . join(",", map {'?'} @field_names ) . ");"); my $parser = Parse::USDASR->new; $parser->io( io($file)->tie ); $parser->each_line( sub { my @fields = @_; $insert->execute(@fields); } ); $dbh->do("commit;"); } for (qw(DATA_SRC.txt DATSRCLN.txt DERIV_CD.txt FD_GROUP.txt FOOD_DES.txt FOOTNOTE.txt NUTR_DEF.txt NUT_DATA.txt SRC_CD.txt WEIGHT.txt ABBREV.txt)) { file_to_table($_); }