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)