no_parseadas_2db
# Proceso el "lineas_no_parseadas.txt" y hago los updates correspondientes en la planilla en SQL
use DBI;
our $dbh = DBI->connect('DBI:mysql:ri-intermedio','ri','ri') or die $DBI::errstr ;
my $busca_name = "SELECT id,nombre FROM todo WHERE nombre = ?";
my $busca_old_name = "SELECT id,nombre FROM todo WHERE oldname = ?";
my $st_name = $dbh->prepare($busca_name);
my $st_oname = $dbh->prepare($busca_old_name);
my %actores;
my $actor;
my %data;
my $nombre, $id;
my %campo = (
"Apoyo" => "apoyo",
"Descripción" => "descripcion",
"Líneas de acción en RSE" => "lineas_accion_rse",
"Misión" => "mision",
"Objetivos" => "objetivos",
"Trabajo en Red" => "trabajo_en_red",
"Valores" => "valores",
"Vínculos en el Mapeo" => "NO_USAR",
"Visión" => "vision",
);
my $campo;
while (<>) {
$line++;
chomp;
if ( /######## (.*) ########/ ) {
procesar_actor($id, $actor, %data) if $actor;
$actor = $1;
#print "$actor\n";
$st_oname->execute($actor);
if ( ($id, $nombre) = $st_oname->fetchrow_array ) {
$actores{$actor} = $id;
} else {
$st_name->execute($actor);
if ( ($id, $nombre) = $st_name->fetchrow_array ) {
$actores{$actor} = $id;
} else {
print STDERR "NO ENCONTRE REGISTRO EN LA BASE DE DATOS: $actor\n";
}
}
%data = ();
} elsif ( /^== (.*) ==/) {
$campo = $campo{$1};
# print "$actor => $campo\n";
} else {
next if $campo eq "NO_USAR";
# traduccion markup de MoinMoin a Textile:
# <strong>
s/'''/*/g;
# <em>
s/''/_/g;
if (s/^=== (.*) ===/h3. $1\r\n\r\np. /) {
# <h3>
# agrego un \n al principio solo si ya hay algo antes
s/^/\r\n/ if ($data{$campo});
} else {
# agrego el fin de línea para MySQL
s/$/\r\n/;
}
$data{$campo} .= $_;
}
}
procesar_actor($id, $actor, %data);
sub procesar_actor
{
my $id = shift;
my $actor = shift;
my %data = @_;
#print "$id -> $actor\n";
our $dbh;
my $campo;
my $quotedValue;
# si no tengo nada que actualizar, no hago nada
return unless %data;
my $query = "UPDATE todo SET ";
my $coma;
foreach $campo (keys %data) {
$quotedValue = $dbh->quote($data{$campo});
$query .= ($coma++?", ":" ") . "$campo = $quotedValue";
}
$query .= " WHERE id = $id ";
print "$query;\n";
return;
} ResponsabilidadSocialEmpresaria/CargaDeDatosEnDrupal/ActualizadorParaLineasNoParseadas (última edición 2008-01-29 14:14:52 efectuada por localhost)