Foros del Web » Programando para Internet » Javascript »

Buscar una cadena de texto en un archivo txt y devolver un resultado.

Estas en el tema de Buscar una cadena de texto en un archivo txt y devolver un resultado. en el foro de Javascript en Foros del Web. Hola! Tengo que hacer un check de unos logs de muchisimas lineas cada dia. Es decir, un monton de servidores, envian un txt con toda ...
  #1 (permalink)  
Antiguo 24/05/2011, 04:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Busqueda Buscar una cadena de texto en un archivo txt y devolver un resultado.

Hola!

Tengo que hacer un check de unos logs de muchisimas lineas cada dia. Es decir, un monton de servidores, envian un txt con toda su configuracion actual, (servicios, ip, y demas...) a una maquina donde se ejecutara la busqueda.

La idea es que al ejecutar una pagina web, muestre por ejemplo, si la cadena de texto "Wireless Zero" del fichero de ejemplo "xmagom_2.txt" existe. Y de ser asi, muestre un icono verde a la derecha del nombre del servicio y de no ser asi uno rojo.

Tambien necesitaria que me buscara en este archivo la IP del equipo con su configuracion de mascara y demas... ya ire haciendo mas preguntas conforme vamos resolviendo esto...


De momento en javascript he encontrado esto

Código:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<script language="JavaScript" type="text/javascript">
var text;

function fetchText(txtFile) {
var d = document;
var txtFrame = d.getElementById( 'textReader');
txtFrame.src = txtFile;
setTimeout('text = getContent();', 500);
}

function getContent() {
var d = document;
var txtFrame = d.getElementById( 'textReader');
var text = '';
if (txtFrame.contentDocument) {
var d = txtFrame.contentDocument;
text = d.getElementsByTagName( 'BODY')[ 0].innerHTML;
}
else if (txtFrame.contentWindow) {
var w = txtFrame.contentWindow;
text = w.document.body.innerHTML;
}
return text;
}

function doTest(txtFile, searchFor) {
fetchText(txtFile);
setTimeout("alert(-1 != text.indexOf('" + searchFor + "'))", 750);
}
</script>
</head>
<body>
<iframe id="textReader" style="display: none;" ></iframe>
<form>
<input type="button" value="Servicio Traffica Service Watch Running" onclick="doTest('Test.txt', 'TraffServiceWatch')" />
</form>
</body>
</html>
Que lo que hace es mostrar un boton que hara una busqueda dentro del fichero test.txt con la string TraffServiceWatch

Si lo encuentra, mostrara un popup con la palabra true, de no ser asi, false.

Como tengo que comprobar muchas cosas no es util andar pulsando botones y cerrando popups, por eso preferirira que la propia web haga esto automatico.

Alguna idea?

Un saludo y muchisimas gracias de antemano!
  #2 (permalink)  
Antiguo 24/05/2011, 18:14
Avatar de Hugo_Euan  
Fecha de Ingreso: abril-2011
Ubicación: Mérida, Yucatán, México
Mensajes: 193
Antigüedad: 13 años, 7 meses
Puntos: 71
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

Sería algo así por el estilo

Código HTML:
Ver original
  1. <title>searching</title>
  2. var text, NumFiles, Get, Count=0, Extend='.txt';
  3. var Review = {Files:['Testx', 'Test2', 'Test3'],
  4.     Content:['hymenaeos', 'otra palabra', '2353']};
  5.    
  6. function INITIALIZED(){var a=document.getElementById("Console");a.value="-> INIZIALIZANDO... \n";NumFiles=Review.Files.length;a.value+="-> Cargando y preparando los archivos de registro... Espere un momento por favor... \n";Get=setInterval("GET_FILE();",1E3)}function GET_FILE(){var a=document.getElementById("textReader");Count>=NumFiles?clearInterval(Get):(a.src=Review.Files[Count]+Extend,setTimeout("text = getContent();",500))}
  7. function getContent(){var a=document.getElementById("Console"),b=document.getElementById("Debbugger");a.value=a.value+"-> Abriendo Archivo "+Review.Files[Count]+" \n";var c=b.innerHTML+" <br />";a.value=a.value+'-> Buscando Coinsidencia <strong>"'+Review.Content[Count]+'"</strong> dentro del archivo '+Review.Files[Count]+Extend+"... \n";var f,d=document.getElementById("textReader"),e="";try{if(d.contentDocument)f=d.contentDocument,e=f.getElementsByTagName("BODY")[0].innerHTML;else if(d.contentWindow)e=
  8. d.contentWindow.document.body.innerHTML;c=e.indexOf(Review.Content[Count])>-1?c+'<br /><input type="button" style="width:20px; height:20px; background-color:#0F0; border:none;" />&nbsp;&nbsp;&nbsp;Se encontr&oacute; la coincidencia <strong>'+Review.Content[Count]+"</strong> dentro del archivo <strong>"+Review.Files[Count]+Extend+"</strong>":c+'<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" />&nbsp;&nbsp;&nbsp;No se encontr&oacute; la coincidencia <strong>'+
  9. Review.Content[Count]+"</strong> dentro del archivo <strong>"+Review.Files[Count]+Extend+"</strong>";b.innerHTML=c;a.value=a.value+"-> Cerrando Archivo "+Review.Files[Count]+" \n";a.scrollTop=a.scrollHeight}catch(g){b.innerHTML=b.innerHTML+'<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" /><label style="color:#F00">&nbsp;&nbsp;&nbsp;Error al intentar acceder a el archivo '+Review.Files[Count]+Extend+" puede que el archivo est&eacute; corrupto o no exista.<br /></label>"}Count++};
  10. </head>
  11. <iframe id="textReader" style="display: none;" ></iframe>
  12. <input type="button" value="Revisar Archivos..." onClick="INITIALIZED();" />
  13. </form>
  14. Consola:<br />
  15. <textarea id="Console" style="font-family:Arial; background-color:#FFF; font-size:14px; color:#F00; overflow:auto; width:100%; height:100px; border:1px #999 solid;">&nbsp;</textarea><br /><br />
  16. Debugger:<br />
  17. <div id="Debbugger">&nbsp;</div>
  18. </body>

Lo único que tienes que cambiar para que se ajuste a lo que necesitas es esta variable JSON

var Review = {Files:['Testx', 'Test2', 'Test3'],
Content:['hymenaeos', 'otra palabra', '2353']};


Files son los archivos que se van a abrir, eso tu los tienes que poner manualmente, por el momento puse 3, pero tu puedes agregar más con la misma sintaxis
'Test', 'Test2', 'Test3', 'Test N...'

También Content que son las palabras que se ban a buscar dentro de cada archivo

por ejemplo

en Textx se va a buscar la palabra hymenaeos, en Test2 se va a buscar otra palabra y así sucesivamente

Tambien la variable Extend la puedes cambiar yo trabaje con archivos .txt, pero tu lo puedes cambiar por .log por ejemplo.

fuera de eso no hay mas variable que mover y si lo haces que sea bajo tu propio riesgo... JAJAJ =P

Prueba su funcionamiento en Internet Explorer y otro explorador, veras que tal, y cuando lo hagas comentas....

EXITO !!!

y espero mi KARMITAAAA !!!! jajaja =P
__________________
Se acepta Karma (:

Si Dios con nosotros, quien contra nosotros !!
  #3 (permalink)  
Antiguo 26/05/2011, 01:22
 
Fecha de Ingreso: octubre-2004
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

Hola!

Muchas gracias por tu respuesta!


He podido cambiar algunas cosas y funciona genial!

Pero te comento, el objetivo es buscar diferentes cadenas de texto por ejemplo

'hymenaeos', 'otra palabra', '2353'

en todos y cada uno de los archivos 'Testx', 'Test2', 'Test3'

ahora mismo hace las busquedas de este modo, busca 'hymenaeos' en el Testx, otra palabra en el test2, 2353, en test 3, y asi sucesivamente.

Me podriais ayudar, saludos!

Cita:
<html>
<head>
<title>searching</title>
<script>
var text, NumFiles, Get, Count=0, Extend='.txt';
var Review = {Files:['magamgg2'],
Content:['TrafServiceWatch', 'Windows', '2353']};

function INITIALIZED(){var a=document.getElementById("Console");a.value="-> INIZIALIZANDO... \n";NumFiles=Review.Files.length;a.value+="-> Cargando y preparando los archivos de registro... Espere un momento por favor... \n";Get=setInterval("GET_FILE();",1E3)}function GET_FILE(){var a=document.getElementById("textReader");Count>=Num Files?clearInterval(Get):(a.src=Review.Files[Count]+Extend,setTimeout("text = getContent();",500))}
function getContent(){var a=document.getElementById("Console"),b=document.ge tElementById("Debbugger");a.value=a.value+"-> Abriendo Archivo "+Review.Files[Count]+" \n";var c=b.innerHTML+" <br />";a.value=a.value+'-> Buscando Coincidencia <strong>"'+Review.Content[Count]+'"</strong> dentro del archivo '+Review.Files[Count]+Extend+"... \n";var f,d=document.getElementById("textReader"),e="";try {if(d.contentDocument)f=d.contentDocument,e=f.getE lementsByTagName("BODY")[0].innerHTML;else if(d.contentWindow)e=
d.contentWindow.document.body.innerHTML;c=e.indexO f(Review.Content[Count])>-1?c+'<br /><input type="button" style="width:20px; height:20px; background-color:#0F0; border:none;" />&nbsp;&nbsp;&nbsp;El servicio<strong>'+Review.Content[Count]+"</strong> está iniciado en <strong>"+Review.Files[Count]+Extend+"</strong>":c+'<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" />&nbsp;&nbsp;&nbsp;El servicio<strong>'+
Review.Content[Count]+"</strong> no está iniciado en<strong>"+Review.Files[Count]+Extend+"</strong>";b.innerHTML=c;a.value=a.value+"-> Cerrando Archivo "+Review.Files[Count]+" \n";a.scrollTop=a.scrollHeight}catch(g){b.innerHTM L=b.innerHTML+'<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" /><label style="color:#F00">&nbsp;&nbsp;&nbsp;Error al intentar acceder a el archivo '+Review.Files[Count]+Extend+" puede que el archivo est&eacute; corrupto o no exista.<br /></label>"}Count++};
</script>
</head>
<body>
<iframe id="textReader" style="display: none;" ></iframe>
<form>
<input type="button" value="Revisar Servicios..." onClick="INITIALIZED();" />
</form>
Consola:<br />
<textarea id="Console" style="font-family:Arial; background-color:#FFF; font-size:14px; color:#F00; overflow:auto; width:100%; height:100px; border:1px #999 solid;">&nbsp;</textarea><br /><br />
Debugger:<br />
<div id="Debbugger">&nbsp;</div>
</body>
  #4 (permalink)  
Antiguo 26/05/2011, 10:29
Avatar de Hugo_Euan  
Fecha de Ingreso: abril-2011
Ubicación: Mérida, Yucatán, México
Mensajes: 193
Antigüedad: 13 años, 7 meses
Puntos: 71
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

En efecto como comentas, la palabra 1 se busca en el archivo 1, la palabra 2 se busca en el archivo 2 y así suscesivamente...
pero bien, hice unas modificaciones de tal manera que, palabra1, 2, 3, 4, N.... se busque en el archivo 1 y así suscesivamente, creo que es eso a lo que te referias...
pues bien el código queda como sigue.

Código HTML:
Ver original
  1. <title>Search</title>
  2. var text, NumFiles, Get, Count=0, Extend='.txt';
  3. var Review = {Files:['Test', 'Test2', 'Test3'],
  4.     Content:['hymenaeos', 'otra palabra', '2353']};
  5.    
  6.     function INITIALIZED(){var a=document.getElementById("Console");a.value="-> INIZIALIZANDO... \n";NumFiles=Review.Files.length;a.value+="-> Cargando y preparando los archivos de registro... Espere un momento por favor... \n";Get=setInterval("GET_FILE();",2E3)}
  7. function GET_FILE(){var a=document.getElementById("textReader");Count>=NumFiles?(a=document.getElementById("sal"),a.innerHTML+=" | Todos los archivos han sido Procesados",a=document.getElementById("deb"),a.innerHTML="Debugger: [OK]",clearInterval(Get)):(a.src=Review.Files[Count]+Extend,a=document.getElementById("sal"),a.innerHTML="Console: Procesando archivo ("+(Count+1)+" de "+Review.Files.length+")",a=document.getElementById("deb"),a.innerHTML="Debugger: Inspeccionando "+Review.Files[Count]+Extend,
  8. setTimeout("text = getContent();",1E3))}
  9. function getContent(){var a=document.getElementById("Console"),c=document.getElementById("Debbugger");a.value=a.value+"-> Abriendo Archivo "+Review.Files[Count]+" \n";c.innerHTML=c.innerHTML+'<br /><br /><span style="background-color:#FF0; color:#F00;"><h3>---------\> Registro del archivo <strong>"'+Review.Files[Count]+Extend+' "</strong></h3></span>';var d=c.innerHTML,b,e=document.getElementById("textReader"),f="";try{if(e.contentDocument)b=e.contentDocument,f=b.getElementsByTagName("BODY")[0].innerHTML;
  10. else if(e.contentWindow)f=e.contentWindow.document.body.innerHTML;for(b=0;b<Review.Content.length;b++)if(a.value=a.value+'-> Buscando Coinsidencia "'+Review.Content[b]+'" dentro del archivo '+Review.Files[Count]+Extend+"... \n",f.indexOf(Review.Content[b])>-1)var g='<br /><input type="button" style="width:20px; height:20px; background-color:#0F0; border:none;" />',d=d+g+"&nbsp;&nbsp;&nbsp;Se encontr&oacute; la coincidencia <strong>"+Review.Content[b]+"</strong> dentro del archivo <strong>"+Review.Files[Count]+
  11. Extend+"</strong>";else g='<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" />',d=d+g+"&nbsp;&nbsp;&nbsp;No se encontr&oacute; coincidencia para <strong>"+Review.Content[b]+"</strong> dentro del archivo <strong>"+Review.Files[Count]+Extend+"</strong>";c.innerHTML=d;a.value=a.value+"-> Cerrando Archivo "+Review.Files[Count]+" \n";a.scrollTop=a.scrollHeight}catch(h){c.innerHTML=c.innerHTML+'<br /><input type="button" style="width:20px; height:20px; background-color:#F00; border:none;" /><label style="color:#F00">&nbsp;&nbsp;&nbsp;Error al intentar acceder a el archivo '+
  12. Review.Files[Count]+Extend+" puede que el archivo est&eacute; corrupto o no exista.<br /></label>"}Count++};
  13. </head>
  14. <iframe id="textReader" style="display:none;"></iframe>
  15. <input type="button" value="Revisar Archivos..." onClick="INITIALIZED();" />
  16. </form>
  17. <div id="sal">Console:</div><br />
  18. <textarea id="Console" style="font-family:Arial; background-color:#FFF; font-size:14px; overflow:auto; width:100%; height:100px; border:1px #999 solid;">&nbsp;</textarea><br /><br />
  19. <div id="deb">Debugger:</div><br />
  20. <div id="Debbugger">&nbsp;</div>
  21. </body>
  22. </html>

lo que tienes que cambiar como siempre es la variable JSON

var Review = {Files:['Testx', 'Test2', 'Test3'],
Content:['hymenaeos', 'otra palabra', '2353']};


de la misma manera que lo hiciste anteriormente...
solo que ahora Files y Content son independientes, es decir, no necesitas tener el mismo numero de Content que de Files como en el anterior....
puedes tener 3 Files y 100 Contents o al revez, pruebalo y dime que tal te va =D

SALUDOS y EXITO !!!!
__________________
Se acepta Karma (:

Si Dios con nosotros, quien contra nosotros !!
  #5 (permalink)  
Antiguo 27/05/2011, 05:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 9
Antigüedad: 20 años, 2 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

Impresionante Hugo, diste en el clavo.

Asi como Proof funciona genial, voy a editarlo para integrarlo en produccion con todas las maquinas y te cuento.

me has hecho un enorme favor. Muchisimas gracias!

Te voy contando!
  #6 (permalink)  
Antiguo 27/05/2011, 09:56
Avatar de Hugo_Euan  
Fecha de Ingreso: abril-2011
Ubicación: Mérida, Yucatán, México
Mensajes: 193
Antigüedad: 13 años, 7 meses
Puntos: 71
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

=D que bien que te haya servido... OK me quedare en espera de tus comentarios...

EXITO !!!
__________________
Se acepta Karma (:

Si Dios con nosotros, quien contra nosotros !!
  #7 (permalink)  
Antiguo 05/08/2011, 03:47
 
Fecha de Ingreso: agosto-2011
Mensajes: 4
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en un archivo txt y devolver un resultado.

hola, yo necesito algo parecido, lo que necesito es, 2 formularios, uno que me consulte en el txt y me devuelva el resultado en la pagina web mas abajo. y otro que me deje añadir mas datos al txt.
es para una especie de diccionario. y estoy bastante pegado, por que llevo sin hacer nada de web desde el instituto. hace ya unos años...

Etiquetas: devolver, txt, resultados, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:19.