Wilfredor Blog

Marzo 7, 2008

Convertir CSV a MySQL

Archivado en: MySQL, PHP, SQL — Etiquetas:, , , , , , — wilfredor @ 7:30 pm

Simplemente se ejecuta el siguiente querry:


load data local infile 'c:/personas.csv' into table 'Mi_DB'.'personas'
fields terminated by ',' lines terminated by '\n' (id,nombre,descripcion,otros);

Recuerda que debes tener una base de datos llamada Mi_DB, en donde existe una tabla personas con los campos id,nombre,descripcion y otros. Ah y claro tu archivo CSV que en este caso está en c:\ y se llama Mi_DB.csv.Si –local-infile está deshabilitado en el servidor Web, nos mostrará un mensaje como este:
ERROR 1148: The used command is not allowed with this MySQL version
Así que lo más conveniente sería intentarlo con PHP, el asunto sería algo diferente, y aquí les coloco el código, que se que es lo que les interesa:


<?
  // Parámetros de conexión
  include "database_connection.php";

  // CSV a cargar
  $file = file ('./ip-to-country.csv'); 

  //Proceso de transformación
  for($i=0; $i<sizeof($file); $i++) {
      $line = trim($fcontents[$i]);
      $array = explode(",", $line); 

      $import_sql = "insert into iptable values (".
                  implode(",", $array) .")";
      mysql_query($import_sql, $conn);
      echo $sql ."<br>\n";
      if(mysql_error()) {
         echo mysql_error() ."<br>\n";
      }
  }
?>

Por otro lado, si lo que deseamos es que la función simplemente nos devuelva una variable de tipo cadena con todas las inserciones para realizarlas todas de una vez posteriormente, tendríamos lo siguiente:


//Averiguar el tipo de dato
function colum2type($data)
{
$data = trim(str_replace("\"","",$data));
if (is_numeric($data))
	return $data;
else
	return "'".$data."'";
}
//$fileName es la ruta con el nombre del
//archivo .csv
function csv2sql($fileName)
{
 $file = file ($fileName);
 $import_sql = "INSERT INTO cierrediariostb  VALUES";
 $coma =","; //Auxiliar para concatenar
  for($i=0; $i<sizeof($file); $i++) {
      $line = trim($file[$i]);
      $array = explode(",", $line);

      //Asigna 'valor' si es cadena
      for($counter = 0; $counter < count($array); $counter++)
		$array[$counter] = colum2type($array[$counter]);

      //Ya que al final del query no debe haber coma
      if ($i==(sizeof($file)-1)) $coma ="";

      $import_sql .= "(".implode(",", $array) .")".$coma;
  }
  return $import_sql;
}
mysql_query(csv2sql('./ip-country.csv'), $DBConn)
or die("Error en la converción: " . mysql_error());

Marzo 6, 2008

Yahoo User Interface

Archivado en: AJAX — Etiquetas:, , , , , , , , , , — wilfredor @ 9:01 pm

Yahoo User Interface(YUI), una serie de librerías escritas en JavaScript, para la construcción de aplicaciones interactivas (RIA). Liberadas bajo licencia BSD por parte de la compañía Yahoo. Dichas librerías son utilizadas para el desarrollo web específicamente para ser usadas como la programación de aplicaciones de escritorio, con componentes vistosos y personalizables y con una amplia implementación con AJAX. A continuación se muestra un ejemplo de declaración con el uso del componente DataTable:


//Declaración del conector al DataTable
var myDataSource = new YAHOO.util.DataSource(myHugeDataSet);
//Tipo de respuesta del DataSource
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
//Definiendo la estructura del DataSource
myDataSource.responseSchema = { fields : [ "id","nombre","edad" ] };
//Definición de cada columna del DataTable que debe ser igual a la del DataSource
var myColumnDefs = [ {key:"id"}, {key:"nombre"}, {key:"edad"} ];
//Cantidad de Registros en la variable de configuración del DataTable
var myTableConfig = { renderLoopSize : 20 };
/*
Creación del DataTable pasandole como parametros el nombre, la definición de las
columnas, el datasource o recurzo de donde se optienen los datos, y por último
la configuración general del DataTable
*/
var myDataTable = new YAHOO.widget.DataTable('tbl', myColumnDefs, myDataSource, myTableConfig);

Entre sus características tenemos:

  • Capacidad de generar código ordenado para el programador
  • Posibilidad de reutilizar controladores
  • Manejo de AJAX
  • Personalización de los componentes
  • Soporte por parte de Yahoo Developers

Entre sus componentes/controles se encuentran:

  • DataTable: Para mostrar datos de forma tabular.
  • TreeView: Una especie de menú desplegable.
  • Calendar: Control para seleccionar la fecha.
  • Slider: Para seleccionar un valor numérico.

Página Oficial de YUI

Convertir Segundos a Dias,Horas,Minutos y Segundos

Archivado en: MySQL, PHP — Etiquetas:, , , , , , , , , , , , , , — wilfredor @ 3:56 pm

Hace algunos dias haciendo un sistemita de publicación de noticias se me ocurrió agregarle una característica interesante para que dijera algo así parecido: Esta noticia fue publicada hace 5 días 4 horas 3 minutos 4 segundos.

Bueno pensando en ello nació el siguiente código, que lo consigue, pasandole como parámetro únicamente el numero de segundos transcurridos entre la fecha de publicación de la noticia y la fecha actual, acá pego un ejemplo de como obtener eso en SQL:

SQL:


SELECT (UNIX_TIMESTAMP( NOW( ) )
- UNIX_TIMESTAMP( fecha )) AS input_seconds FROM noticias

Y, por supuesto, la función que lo calcula a continuación:


function human_time($input_seconds) {
    $days = "";$hours = "";$minutes = "";$seconds = "";
    $days=floor($input_seconds / 86400);
    $remainder=floor($input_seconds % 86400);
    $hours=floor($remainder / 3600);
    $remainder=floor($remainder % 3600);
    $minutes=floor($remainder / 60);
    $seconds=floor($remainder % 60);

    if ($days>0) $days = "$days dias ";
    if ($hours>0) $hours = "$hours hrs ";
    if ($minutes>0) $minutes = "$minutes min ";
    if ($seconds>0) $seconds = "$seconds seg ";
return $days.$hours.$minutes.$seconds;
}

Marzo 5, 2008

Autocompletar y validar Fecha en Javascript

Archivado en: Javascript — Etiquetas:, , , , , , , , , , , , , — wilfredor @ 5:01 pm

A continuación se muestra un ejemplo de una función que he realizado para el autocompletar de una fecha con formato dd/mm/yyyy, que no solo te agrega un ‘/’, sino que también te valida que solamente puedan escribirse números:


/***Autocompletar Fecha***/
function completarfecha (input_text)
{
var tecla = window.event.keyCode;
if (!(tecla  57))
//Valida si realmente es un número
{
if (((input_text.value.length+1)==3)||(input_text.value.length+1)==6))
//Si se escribió el día o el mes se agrega un '/'
input_text.value += '/';
}else window.event.keyCode=0;
}

Por supuesto, hay que recordar incluir la función en el respectivo input en el código html como se ve a continuación:


Blog de WordPress.com.