#!/usr/bin/perl
use strict;
use DBI;
my($dbhost)='localhost';
my($dbname)='trabajo';
my($dbuser)='usuario';
my($dbpass)='usuario';
my $DOINSERT = 1;
if(scalar(@ARGV)>0) {
# ¿Vamos a testear el parseado o a insertar?
if($ARGV[0] eq '-t') {
shift(@ARGV);
$DOINSERT=undef;
}
# Ahora, a procesar los ficheros a cargar en la base de datos
if(scalar(@ARGV)>0) {
my $dbh = undef;
my $fastaEntry = undef;
if(defined($DOINSERT)) {
# Inicializar conexión a la base de datos
my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$dbhost;port=5432",
$dbuser,$dbpass,{RaiseError => 0, AutoCommit => 0});
# ¿Se ha podido establecer la conexión?
die "Ha habido un problema al conectar con la base de datos: " . $DBI::errstr unless(defined($dbh));
$fastaEntry = $dbh -> prepare("INSERT INTO fasta VALUES (?,?,?,?)");
}
#Además de poder conectarnos, tenemos ficheros de entrada ?
foreach my $file (@ARGV) {
my $errflag = undef;
my($FH);
# Abre el fichero, si no está comprimido
my $retval;
if($file =~ /\.gz$/) {
$retval = open($FH,"gunzip -c $file |");
} else {
$retval = open($FH,$file);
}
# ¿Hemos abierto el fichero?
if(defined($retval)) {
my $line;
my $id = undef;
my $locus = undef;
my $description = undef;
my $name = undef;
while($line=<$FH>) {
chomp($line);
if($line =~ /^>(\d+)\s(\w+_\d+)\s(.+|\s+)\s\[(.+?)\]/ ){
$id = $1;
$locus = $2;
$description = $3;
$name = $4;
}
if(defined($id) && defined($locus) && defined ($description) && defined($name)){
if(defined($DOINSERT)){
$fastaEntry -> execute($id, $locus, $description, $name);
if(defined($errflag)) {
warn "Error al insertar: " . $DBI::errstr;
$dbh -> rollback();
} else {
$dbh -> commit();
}
} else {
# Simulación, sólo muestra lo que guardaría
print "TEST: ", $id , "\t", $locus , "\t", $description, "\t", $name, "\n";
}
$id = undef;
$locus = undef;
$description = undef;
$name = undef;
}
} # Fin del while. Alcanzado el fin de un fichero.
}else{
die "ERROR: No se ha podido abrir el fichero\n";
}
close($FH);
}
} else {
die "ERROR: Este programa parsea ficheros del Pfam. Pásame al menos uno, colega\n";
}
} else {
die "ERROR: Este programa parsea ficheros del Pfam.\n";
};