Tener sentido del sin sentido

http-equiv=»Content-Type» content=»application/xhtml+xml; charset=utf-8″ />

/ * <[CDATA [* / var asciidoc = {/ / Namespace!. / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / Indice generador / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / * Autor: Mihai Bazon , septiembre de 2002 * http://students.infoiasi.ro/ ~ mishoo ** Tabla de generador de contenido * Versión: 0.4 ** Siéntase libre de utilizar esta secuencia de comandos en los términos de la GNU General Public License *, siempre y cuando lo hace no suprimir o alterar este aviso. * / / * Modificado por Troy D. Hanson, septiembre de 2006. Licencia: GPL * / / * modificado por Stuart Rackham, 2006, 2009. Licencia: GPL * / / / toclevels = 1 .. 4. toc: function (toclevels) {function getText (el) {var text = ""; for (var i = el.firstChild; i = null; i = i.nextSibling!) {if (== i.nodeType 3 / * Node.TEXT_NODE * /) / / IE no habla constantes. texto + = I.Data; else if (i.firstChild = null!) Texto + = getText (i);} texto return;} function TocEntry (el, texto, toclevel) {this.element = el; this.Text = texto; this.toclevel = toclevel;} tocEntries función (EL, toclevels) {var result = new Array; var re = new RegExp ('[HH] ([1 -' + (toclevels 1) + '])') / / Función que escanea el árbol DOM para elementos de encabezado (la API DOM2 / / NodeIterator sería una mejor técnica, pero no con el apoyo de todos / / los navegadores). iterate var = function (el) {for (var i = el.firstChild;! i = null; i = i.nextSibling) {if (== i.nodeType 1 / * Node.ELEMENT_NODE * /) {var = mo re . exec (i.tagName); if (mo && (i.getAttribute ("clase") | | i.getAttribute ("className")) = "float"!) {resultado [result.length] = new TocEntry (i , getText (i), mo [1] -1);} iteración (i);}}} iterate (el); return resultado;} var toc = document.getElementById ("toc"); if (toc) {! vuelta;} / / Eliminar entradas de la TDC existentes en caso de que estamos volviendo a cargar el TOC. var tocEntriesToRemove = []; var i; for (i = 0; i «+» «+ n «.» + + nota + «

«; var id = palmos [i] getAttribute («id»);. if (id = nulos!) refs [«#» + id] = n;}} si (n == 0) noteholder.parentNode.removeChild (Bonista); else {/ / Proceso footnoterefs. for (i = 0; i

SQLite al rescate

Una de las tareas que me hacen para llevar a cabo es geolocalizar las llamadas de teléfono móvil de Informes de detalles de llamadas (CDR). Estos por lo general llegan de un portador como hojas de cálculo: una con detalles de llamadas hacia y desde un número particular, y uno o más anuncios de torre celular. He probado una variedad de formas de procesar estos con el tiempo, como secuencias de comandos BASH y codificación python. Pero, con mucho, la forma más fácil y más flexible para procesar estos registros es importándolos en una base de datos SQLite.

El largo plazo dificultades para el procesamiento de CDRs es que cambian con el tiempo. Parece que cada vez que tengo nuevos registros a proceso, el formato ha cambiado, lo que rompe el código anterior. Se necesita mucho más esfuerzo para volver a codificar un script que lo hace para escribir una consulta SQL sobre la marcha, y yo soy ciertamente ningún gurú SQL. SQLite tiene suficientes funciones integradas para realizar prácticamente cualquier problema que pueda encontrar.

Tomemos algunos registros de Sprint recientemente he procesarse como un ejemplo. Yo tenía la tarea de representar las ubicaciones de las llamadas de voz en un mapa. Hubo más de 3.600 registros para un período de 12 días con los detalles del mensaje de texto mezclado con detalles de las llamadas de voz. Sólo los detalles de la llamada contenían referencias a los registros de la torre, sin embargo. Registro de llamadas incluyen cinco enteros dígitos que representan el primer y último torres de telefonía celular del teléfono móvil utilizado durante la comunicación. Los mensajes de texto sólo contenían ceros en estas columnas.

El reto consistía en recuperar los registros de llamadas para el mapeo, haciendo caso omiso de los mensajes de texto que no contenían detalles de torre celular . SQLite parecía la manera más fácil de lograr esto a la luz de la exigencia de seguimiento de mirar hacia arriba cada torre celular entero en cualquiera de las cuatro torres de discos hojas de cálculo asociados.

Creación de la base de datos

El primer paso fue la creación de una base de datos SQLite . Afortunadamente, la creación de una base de datos es un proceso hacia adelante simple y directo. He realizado el trabajo usando en el programa de línea de comandos de SQLite. Sin embargo, las herramientas de GUI como la excelente SQLite Manager pueden lograr lo mismo y yo les recomiendo si usted es nuevo a SQLite, ya que pueden ser buenos maestros.

Para crear una nueva base de datos, que se limitó a presentar el nuevo nombre de la base de datos cuando abrí el programa de línea de comandos. Llamé a mi base de datos cdr.sqlite .

Creación de una base de datos SQLite
<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite ->

  $  sqlite3 cdr .  
SQLite SQLite versión 3.7 17 2013 - 05 - 20 00 : 56 : 22
Introduzca ". ayudar " para
Entre las instrucciones sentencias SQL terminado con un ";"
sqlite >

A continuación, necesita una tabla para guardar los registros de llamadas. Hice esto algo fácil de escribir, así que llamé simplemente cdr . Las columnas que he nombrado para las columnas que se encuentran en la hoja de cálculo enviado por Sprint.

SQLite Crear tabla Declaración para el Informe detallado de llamada Sprint
<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src- highlite ->

  sqlite >    Crear     MESA   " cdr " 
...> (
...> "Calling_NBR" texto ,
...> "Called_NBR" TEXTO ,
...> "Dialed_Digits" texto ,
...> "Tipo" TEXTO ,
...> "START_DATE" TEXTO ,
...> " END_DATE " TEXTO ,
...> "Duración" ,
...> "NEID" INTEGER ,
...> "REPOLL" TEXTO ,
...> "First_Cell" ,
...> "Last_Cell" ,
...> );
sqlite >

Nota
En el programa de línea de comandos de SQLite, todas las consultas SQL deben terminar con un punto y coma o el intérprete asume que va a agregar líneas a la declaración. Si se olvida de poner el punto y coma al final de su mandato, puede introducirlo en la línea siguiente.

Para importar los datos de CDR a partir de la hoja de cálculo, sólo tiene que exportar los datos sin la fila de encabezado, en el archivo de texto con valores separados por comas (CSV). En este caso, que se llama el archivo «call_records.csv». Tuve que decirle a SQLite cómo se delimitan los datos (SQLite utiliza tuberías de manera predeterminada), e importar el archivo CSV en la tabla «cdr».

Importación de datos de CDR en la tabla cdr
<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http :/ / www.gnu.org / software / src-highlite ->

  sqlite >  .  ", " 
> csv cdr

Nota
El «punto «comandos son funciones SQLite especiales (uso. ayuda para verlos todos) y no requieren de un punto y coma.

Para importar los datos de antenas de telefonía móvil, he seguido el mismo proceso: He creado una tabla que llamé «torres» utilizando los encabezados de columna de la hoja de cálculo como los nombres de las columnas de la tabla. Luego exporté los datos de una torre celular de cada spreadseet a un archivo CSV e importados los CSV en la torre Mesa. Aunque no voy a repetir todo el proceso, voy a mostrar la disposición de la tabla (esquema) a continuación.

Torres esquema de la tabla

<- Generador: GNU fuente-highlight 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite -.>

  sqlite >    
torres de esquema CREAR MESA " torres " (
"Cell" ,
"Cascade" TEXTO ,
" Switch " TEXTO ,
"NEID" ,
"REPOLL " ,
" Nombre del sitio " texto ,
" Dirección 1 " texto ,
"Dirección 2" TEXTO ,
" Ciudad " TEXTO ,
" Condado " TEXTO ,
"Estado" TEXTO ,
"Zip" TEXTO ,
"Latitude" TEXTO ,
"Longitud" TEXTO ,
" BTS_Manufacturer " TEXTO ,
"Sector" TEXTO ,
"Azimuth" TEXTO ,
"CDR_Status" texto
);
>

Búsqueda de registros

Ahora era el momento para buscar los registros de llamadas en las tablas de la torre para descubrir que la latitud y longitud de la torre se utiliza para iniciar la llamada de un lugar al dispositivo móvil en tiempo y espacio. Yo esperaba que fuera sencillo: tomar la torre número 5 dígitos de la del cdr Mesa first_call, hacerlo coincidir con la célula campo en las torres Mesa, y volver las coordenadas del mapa. Fácil peasy, ¿verdad? El equivalente SQL de muéstrame la latitud y la longitud de la torre donde la CDR first_cell entero coincide celular la Torre entero.

Primer intento para que coincida con los números de la torre llamada a la torre de las coordenadas
<- Generador: fuente-GNU resaltar 3.1.6 por Lorenzo Bettini http://www.lorenzobettini.it http://www.gnu.org/software/src-highlite ->

  sqlite >    seleccione   latitud ,    de   torres ,    donde   first_cell  =  ;  
> # Ruh roh, raggy, no hay partidos
sqlite > seleccione first_cell de donde = 0 límite 5 ;
40385
10962
10962
20962
30392
> seleccione , , de longitud de ;
< >
385 | 34.046944 | - 118.448056
385 | 34.046944 | - 118.448056
385 | 34.046944 | - 118.448056
392 | 34.063806 | - 118.30366
392 | 34.063806 | -

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *