You are on page 1of 5

En este primer post y viendo algunas necesidades de navegantes que se ven ante el

problema de actualizar sus bases de datos con un archivo de texto separado por comas
les pasaré un script que armé por necesidades propias. Espero que les sea de utilidad.
Por otra parte si algún compañero de navegante entiende que puede ser mejorado,
adelante, de eseo se trata, de sumar conocimientos. Saludos

Antes que nada será necesario que creen un formulario de carga de archivos donde no
tendrán que olvidar agregar en el FORM enctype="multipart/form-data". Vital si
quieren subir archivos. En otro post les desarrollaré el form de subida.

Ahora el archivo Php que recibe el formulario y se encarga de facilitarnos la vida es el


siguiente:

Una aclaración: Esta rutina está pensada en caso que nos aporten un archivo csv o de
texto separado por comas, que contiene mayor información de la que necesitamos, por
lo cual se vuelve engorroso abrir el Excel tratarlo, generar un nuevo archivo y recien
subirlo con LOAD DATA INFILE en un administrador de BD

Esta es una posible solución.

<?
$update="<center>Fue reestructurado de forma correcta el archivo </center>";

//borra los archivos viejos para evitar duplicar registros


$archivo="archivo transformado.txt";
$carpeta="./transformar/";
@unlink($carpeta.$archivo);

//
//funciones
// con esta función disponesmos las fechas para ser subidas a mysql
function cambiafecha($fecha){
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

//Con esta funcion tratamos el archivo que generamos más adelante preparándolo para
//subirlo de acuerdo a los campos que tengamos en la base.
//lo grabaremos en un directorio transformar. Puede ser cualquiera.

function Asistencia($texto){
$thefile ="transformar/25_asistencia.txt";
$resultsfile = fopen ($thefile,"a" ;
$updated=$texto."\n\r";
fwrite ($resultsfile,$updated);
fclose ($resultsfile);
}

//Aquí inicio del proceso con el archivo de texto original con contenidos que
ocuparemos sólo parcialmente y lo guardamos en un directorio xx

set_time_limit(300);
$lines = file('txt/25_asistencia.txt');
// Iniciamos el bucle para leerlo completo y extraer nuestras necesidads.

foreach ($lines as $line_num => $line) {


$datos = explode(";", $line);
//elegimos los campos que nos interesan
$id_alumno=$datos[2];
$f_clase= cambiafecha($datos[3]);
$asignatura= str_replace(",","|",$datos[5]);
$asistio=$datos[6];

//Lo agregamos a un nuevo archivo que se genera por la función explicada arriba
$agregar=Asistencia($id_alumno.';'.$f_clase.';'.$asignatura.';'.$asistio);

} //fin foreach

// inicio carga en la bd

if($datos){
echo $update;
require("connect.php" ; //conección a la base de datos
unset($datos); //limpiamos la memoria de variables usadas anteriormente
$archivo="transformar/25_asistencia.txt";
// generamos una variable con la dirección de nuesro archivo final
// armamos el bucle que nos permitira ingresar los datos en los registros de la BD
$lines = file($archivo);
foreach ($lines as $line_num => $line) {
$datos = explode(";", $line);
//mostramos los datos
echo
$datos[0].'&nbsp;&nbsp;&nbsp;'.$datos[1].'&nbsp;&nbsp;&nbsp;'.$datos[2].'&nbsp;&n
bsp;&nbsp;'.$datos[3].'<br/>';
//insertamos los datos en nuestra base de datos

$insertar="INSERT INTO t25_asistencia (id_alumno, f_clase, asignatura, asistio)


VALUES ('$datos[0]','$datos[1]','$datos[2]','$datos[3]')";
mysql_query($insertar, $link) or die("Error $insertar <br>MySQL dice:
".mysql_error());

} //fin foreach

}else{

echo "Inconvenientes en el Servidor. Intententelo nuevamente";

//Nuevamente borra los archivos viejos


$archivo="25_asistencia.txt";
$carpeta="./transformar/";
unlink($carpeta.$archivo);
?>

You might also like