Foros del Web » Programando para Internet » ASP Clásico »

archivos de texto y arreglos

Estas en el tema de archivos de texto y arreglos en el foro de ASP Clásico en Foros del Web. saludos estoy leyendo un archivo de texto que tiene este formato: Código: 02/08/03 09:47AM 101 01 8830590 00:00'24 02/08/03 09:51AM 108 01 6645374 00:01'20 02/08/03 ...
  #1 (permalink)  
Antiguo 08/06/2003, 10:56
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
Exclamación archivos de texto y arreglos

saludos


estoy leyendo un archivo de texto que tiene este formato:


Código:
02/08/03 09:47AM   101 01 8830590                        00:00'24               
02/08/03 09:51AM   108 01 6645374                        00:01'20               
02/08/03 09:54AM   110 04 033104134025                   00:00'24               
02/08/03 09:56AM   110 04 033104137025                   00:01'02               

  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD 
--------------------------------------------------------------------------------
02/08/03 09:57AM   110 04 6824177                        00:01'17               
02/08/03 09:58AM   110 04 033155412442                   00:00'28               
02/08/03 09:59AM   110 04 6645374                        00:00'35               
02/08/03 10:02AM   114 04 6645374                        00:02'46

lo estoy haciendo con este codigo:

Código:
Do While oFichero.AtEndOfStream <> True

sContenido = oFichero.readline

arreglo=split(sContenido," ")
for i=lbound(arreglo) to ubound(arreglo)
next


lo que deseo hacer es que me guarde cada linea del archivo en una variable y luego con el split lo convierto en un vector para asi manipular cada cadena como una posicion de el vector..
como ven en el split coloco como separador el espacio (" ") pero el problema es que hay varias partes en donde hay mas de un espacio y el vector cambia de dimensiones.. me gustaria hacer que se disminuyan todos los espacios que hay en cada linea a solo uno..


yo manipulo los datos del vector asi:
response.write arreglo(0)
response.write arreglo(1)
response.write arreglo(4)
response.write arreglo(5)
response.write arreglo(6)
response.write arreglo(30)

como ven a veces me toca meter la posicion 30, aveces esa misma posicion es la 25, lo ideal es que siempre fuera la misma para poder manipularla, esto pasa por la cantidad de espacios(deberian ser solo uno por cada cadena) y quedar asi:

response.write arreglo(0)
response.write arreglo(1)
response.write arreglo(2)
response.write arreglo(3)
response.write arreglo(4)
response.write arreglo(5)


por otro lado solo me interesa leer los datos que contienen fechas, horas, telefonos etc...
no las lineas que dicen:


Código:
  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD 
--------------------------------------------------------------------------------

me gustaria que omitiera estas lineas y siguiera con las siguientes o cuando encuentre una linea vacia tambien la omita, intente con skipline pero no me funciona correctamente..
espero me puedan echar una mano en alguno de mis problemas..

gracias..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #2 (permalink)  
Antiguo 08/06/2003, 12:51
Avatar de maestro  
Fecha de Ingreso: febrero-2002
Ubicación: España
Mensajes: 2.364
Antigüedad: 23 años, 3 meses
Puntos: 1
¿Y no te seria mucho mas comodo insertarlo y consultarlo sobre una base de datos?.
Asi no necesitarias ni arrays, ni matrices, ni splits para limpiar los datos.
__________________
Jose Maria Fernandez
[email protected]
Http://www.expansionweb.net
  #3 (permalink)  
Antiguo 08/06/2003, 14:27
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
eso es lo que hago, lo leo de un archivo de texto para luego importarlo a una base de datos y luego si lo consulto... no lo puedo hacer inmediatamente porque ese es un archivo que arroja un programa al cual no tengo acceso, por eso ese programa me genera un archivo .txt y luego yo tengo que importarlo a un a base de datos en access.. alguien me puede colaborar con la pregunta que hice inicialmente?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #4 (permalink)  
Antiguo 09/06/2003, 17:30
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
alguien sabe como ayudarme?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #5 (permalink)  
Antiguo 09/06/2003, 20:09
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
yo haría algo así:


Código PHP:
<%
set FSO Server.CreateObject("Scripting.FileSystemObject")
set oFichero FSO.OpenTextFile(Server.MapPath("archivo.txt"))

Archivo oFichero.ReadAll

'quito la linea vacía:
Archivo = Replace(Archivo, vbcrlf & vbcrlf, vbcrlf)

quito los encabezados:
Archivo Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " vbcrlf"")

' quito los "_"
Archivo = Replace(Archivo,"--------------------------------------------------------------------------------" & vbcrlf, "")

convierto el string en una matriz por el salto de linea
Archivo 
Split(Archivovbcrlf)

' por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For i = 0 to UBound(Archivo)
sDate = Trim(Left(Archivo(i), 8))
sTime = Trim(Mid(Archivo(i), 10, 7))
sExt = Trim(Mid(Archivo(i), 20, 3))
sCO = Trim(Mid(Archivo(i), 24, 2))
sDialNumber = Trim(Mid(Archivo(i), 27, 31))
sDuration = Trim(Mid(Archivo(i), 58, 8))

acá podrías hacer un insert por cada elemento del array...
SQL "INSERT INTO tabla (sDate, sTime, sExt, sCO, SDialNumber, sDuration) VALUES ('" sDate "'..." ")"
oConn.Execute(SQL)
Next
%> 
saludos
  #6 (permalink)  
Antiguo 16/06/2003, 08:51
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola dazuaga, muchisimas gracias, la verdad me funciono de maravillas tu codigo...
le he hecho unos cambios para que me funcione como quiero y me salio un error. espero me puedas colaborar con esto..

me agrega los todos los datos a la base de datos pero al final me muestra este error:



Error de Microsoft VBScript en tiempo de ejecución error '800a000d'

No coinciden los tipos: 'sDate'

/hyperterminal/leyendo.asp, line 69


el codigo que uso es este:
(los cambios que le hice estan en negrita)

Código:
rs.open "hyperterminal", con, 3, 3 
set FSO = Server.CreateObject("Scripting.FileSystemObject")
set oFichero = FSO.OpenTextFile(Server.MapPath("REPORTES.txt"))

Archivo = oFichero.ReadAll

'quito la linea vacía:
Archivo = Replace(Archivo, vbcrlf & vbcrlf, vbcrlf)

' quito los encabezados:
Archivo = Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " & vbcrlf, "")

' quito los "-"
Archivo = Replace(Archivo,"--------------------------------------------------------------------------------" & vbcrlf, "")

' convierto el string en una matriz por el salto de linea
Archivo = Split(Archivo, vbcrlf)

' por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For i = 0 to UBound(Archivo)
sDate = Trim(Left(Archivo(i), 8))
sTime = Trim(Mid(Archivo(i), 10, 7))
sExt = Trim(Mid(Archivo(i), 20, 3))
sCO = Trim(Mid(Archivo(i), 24, 2))
sDialNumber = Trim(Mid(Archivo(i), 27, 31))
sDuration = Trim(Mid(Archivo(i), 58, 8))
'convierto la fecha d/m/a al formato separado
'-----------------------------------
dia = day(sDate)
mes = month(sDate)
ano = year(sDate) 
'---------------------------------
'cambio el formato de tiempo de duracion
sDuration = Replace(sDuration, "'", ":") 
'---------------------------------
'agrego cada linea a la base de datos
rs.AddNew
rs("dia") = dia
rs("mes") = mes
rs("ano") = ano
rs("hora") = sTime
rs("ext") = sExt
rs("co") = sCO
rs("llamada_saliente") = sDialNumber
rs("duracion") = sDuration
rs.Update 
Next

otra cosa, sabes como puedo agregar solo una vez cada dato?, lo que pasa es que esta pagina se ejecuta automaticamente cada 10 segundos para verificar si hay datos nuevos y si los hay los ingresa a la base de datos, pero si son los mismo no los agrega.. como seria en este caso?

el error me lo da cuando separo la fecha en dia mes año
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 16/06/2003 a las 08:51
  #7 (permalink)  
Antiguo 17/06/2003, 13:04
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Creo saber de que se trata...

Estoy seguro que tenés el servidor en inglish (o la configuración regional, no lo se) y cuando tenés una fecha como la de hoy (17/06/03) en el archivo, el script interperta al "17" como el mes (mes = month(sDate)) y como no existe ese mes, se cae.

cambiá esto:

dia = day(sDate)
mes = month(sDate)
ano = year(sDate)



por esto:

dia = Left(sDate, 2)
mes = Mid(sDate, 4, 2)
ano = Right(sDate, 2)



una posible solución para "que no inserte dos veces lo mismo" es crear un nuevo archivo vacío. colocá la siguiente línea luego del "next":

Set CrearNuevoEnBlanco = FSO.CreateTextFile(Server.MapPath("REPORTES.txt"), TRUE)


ahh.. y recordá destruir todas las cosas que instanciaste con SET al final...

Set FSO = Nothing
Set CrearNuevoEnBlanco = Nothing
... etc


saludos

Última edición por AlZuwaga; 17/06/2003 a las 13:07
  #8 (permalink)  
Antiguo 17/06/2003, 21:39
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
de nuevo muchas gracias, me sirvio de maravilla lo de las fechas, pero no entendi muy bien lo de crear un archivo nuevo, lo qeu hizo fue reemplazar el archivo existente llamado REPORTES.TXT , lo que pasa es que ese archivo se renueva cada vez qeu alguien realiza una llamada, osea que el archivo de texto se actualiza a cada instante, lo que hago con el asp es leer ese archivo e importarlo a una base d edatos de access. . pero no lo puedo reemplazar porque luego no lo leeria cuando se renueve. no se si estoy bien... en caso que este en lo correcto yo.. como se podria hacer de otra manera, sera con una sentencia de sql? espero me puedas colaborar en esto, ya es la ultima cosa espero no molestarte mucho..la verdad es que ya me haz colaborado bastante..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #9 (permalink)  
Antiguo 17/06/2003, 22:20
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
mmm.... habría que tener en cuenta dos cosas:

1- Que ocurriría si luego de ejecutar el script y eliminar el contenido del archivo REPORTES.txt se intenta una nueva ejecución con el archivo vacío.... fallaría el script?

2- Que ocurriría si el "hyperterminal" se encuentra con "su archivo de log" aniquilado por un script ASP... lo regeneraría?


Si el problema es el del punto uno (que si... ante un archivo vacío daría error!), no es un problema realmente... sería cuestión de meter un condicional que, por ejemplo, verifique que exista el caracter "/". Si este existe, quiere decir que por lo menos hay un nuevo registro (porque hay una fecha). Entonces que continúe con todo el proceso... si no existe dicho caracter, que no haga nada.

Si el problema es el del punto 2... ya no se
(aunque SUPONGO que los que crearon el hyperterminal habrán tenido en cuenta que si el archivo está vacío -o no existe- se autocompletará -o creará- cuando sea necesario)


antes de continuar dando vueltas, te pido que lo pruebes y me comentes cuando da error... si en el punto 1 o el 2 (o ambos)

saludos

Me olvidaba... para comprobar que exista un nuevo registro (punto 1), bastaría con colocar luego de...


Archivo = oFichero.ReadAll

...lo siguiente...

If InStr(Archivo, "/") = 0 then
Response.Write "nada que hacer..."
Else



...y colocar el "end if" luego del "Set CrearNuevoEnBlanco = FSO..."


comentame
  #10 (permalink)  
Antiguo 23/06/2003, 11:06
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
Hola Dazuaga,

he probado lo qeu me dijiste asi:


y me sale el siguien error, pasa cuando lee denuevo el archivo en blanco.. ya que como se actualiza cada 10 segundos hay varias ocaciones en que lee el archivo de texto sin datos alli es cuando saca errror, cuando esta lleno funciona perfecto..

este es el codigo:


Código:
Dim FSO,oFichero, Archivo
rs.open "hyperterminal", con, 3, 3
set FSO = Server.CreateObject("Scripting.FileSystemObject")
set oFichero = FSO.OpenTextFile(Server.MapPath("REPORTES.txt"))

Archivo = oFichero.ReadAll
If InStr(Archivo, "/") = 0 then
'no se hace nada
Else

'quito la linea vacía:
Archivo = Replace(Archivo, vbcrlf & vbcrlf, vbcrlf)

' quito los encabezados:
Archivo = Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " & vbcrlf, "")

' quito los "-"
Archivo = Replace(Archivo,"--------------------------------------------------------------------------------" & vbcrlf, "")

' convierto el string en una matriz por el salto de linea
Archivo = Split(Archivo, vbcrlf)

' por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For i = 0 to UBound(Archivo)
sDate = Trim(Left(Archivo(i), 8))
sTime = Trim(Mid(Archivo(i), 10, 7))
sExt = Trim(Mid(Archivo(i), 20, 3))
sCO = Trim(Mid(Archivo(i), 24, 2))
sDialNumber = Trim(Mid(Archivo(i), 27, 31))
sDuration = Trim(Mid(Archivo(i), 58, 8))
'convierto la fecha d/m/a al formato separado
'-----------------------------------
mes = Left(sDate, 2)
dia = Mid(sDate, 4, 2)
ano = "20" & Right(sDate, 2)
'---------------------------------
'cambio el formato de duracion
sDuration = Replace(sDuration, "'", ":")
'---------------------------------
'agrego cada linea a la base de datos
rs.AddNew
rs("dia") = dia
rs("mes") = mes
rs("ano") = ano
rs("hora") = sTime
rs("ext") = sExt
rs("co") = sCO
rs("llamada_saliente") = sDialNumber
rs("duracion") = sDuration
rs.Update
Next
'para agregar solo datos nuevos a la base de datos
Set CrearNuevoEnBlanco = FSO.CreateTextFile(Server.MapPath("REPORTES.txt"), TRUE)

oFichero.Close
Set oFichero = nothing
set FSO = nothing
Set CrearNuevoEnBlanco = Nothing
end if


Error de Microsoft VBScript en tiempo de ejecución error '800a003e'

Se sobrepasó el final del archivo

/hyperterminal/leyendo.asp, line 87



como se podra solucionar eso?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #11 (permalink)  
Antiguo 23/06/2003, 12:36
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Probá ahora. Lo que hace es especificar que continúe ante un error, detectar si lo hubo y en base a eso informar que el archivo no tiene contenido o, en caso de tenerlo, continuar con su tarea normal.


Código PHP:
<%
Dim FSO,oFicheroArchivo
rs
.open "hyperterminal"con33
set FSO 
Server.CreateObject("Scripting.FileSystemObject")
set oFichero FSO.OpenTextFile(Server.MapPath("REPORTES.txt"))


On error resume next
Archivo 
oFichero.ReadAll

If Err.Number <> 0 then
'no se hace nada y se informa de que el archivo está vacío
response.write "El archivo actualmente no tiene contenido.<br>"
Response.Write "Descripción técnica del error: " & err.Description & " (nro. " & Err.Number & ")"
Err.clear

else

'
quito la linea vacía:
Archivo Replace(Archivovbcrlf vbcrlfvbcrlf)

' quito los encabezados:
Archivo = Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " & vbcrlf, "")

quito los "-"
Archivo Replace(Archivo,"--------------------------------------------------------------------------------" vbcrlf"")

' convierto el string en una matriz por el salto de linea
Archivo = Split(Archivo, vbcrlf)

por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For 0 to UBound(Archivo)
sDate Trim(Left(Archivo(i), 8))
sTime Trim(Mid(Archivo(i), 107))
sExt Trim(Mid(Archivo(i), 203))
sCO Trim(Mid(Archivo(i), 242))
sDialNumber Trim(Mid(Archivo(i), 2731))
sDuration Trim(Mid(Archivo(i), 588))
'convierto la fecha d/m/a al formato separado
'
-----------------------------------
mes Left(sDate2)
dia Mid(sDate42)
ano "20" Right(sDate2)
'---------------------------------
'
cambio el formato de duracion
sDuration 
Replace(sDuration"'"":")
'---------------------------------
agrego cada linea a la base de datos
rs.AddNew
rs("dia") = dia
rs("mes") = mes
rs("ano") = ano
rs("hora") = sTime
rs("ext") = sExt
rs("co") = sCO
rs("llamada_saliente") = sDialNumber
rs("duracion") = sDuration
rs.Update
Next
'
para agregar solo datos nuevos a la base de datos
Set CrearNuevoEnBlanco 
FSO.CreateTextFile(Server.MapPath("REPORTES.txt"), TRUE)

oFichero.Close
Set oFichero 
nothing
set FSO 
nothing
Set CrearNuevoEnBlanco 
Nothing
end 
if
%> 

ahora.. me parece muy poco tiempo 10 segundos... yo lo pobdría en no menos de un minuto.. pero eso depende de las necesidades
  #12 (permalink)  
Antiguo 01/07/2003, 09:08
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola dazuaga, te agradezco el interes, no he podido probarlo en la empresa porque me colocaron a agregarle algo mas, que automaticamente coloque el valor de cada llamada saliente, dependiendo del tiempo ya estoy trabajando en eso.. te cuento que en mi pc funciona a la perfeccion todo lo que me haz ayudado, en esta semana lo pruebo y te comento como me fue...
de nuevo muchas gracias..
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #13 (permalink)  
Antiguo 03/11/2003, 21:51
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola hace mucho me estabas ayudando con esto, hace poco lo probe en la empresa y me salieron varios errores, aqui en mi casa funcionaba perfecto.

bueno la idea de borrar el archivo y reemplazarlo por uno en blanco para que no hubieran datos repetidos no funciono, ya que ese archivo se actualiza cada segundo asi que hay que hacerlo por otro modo
la idea uqe tengo es hacerlo por sql que si hay una llamada con el mismo dia, mes, año, hora y linea entonces no lo agregue a la base de datos.

lo que tengo hasta ahora es esto pero no me funciona, parece que no sirve la validacion.
(lo que esta en negrita es lo que tiene nuevo y donde se valida pàra que no sea un dato repetido, pero no funciona)


Código:
<%
Dim FSO,oFichero, Archivo, sql2, dato
rs.open "hyperterminal", con, 3, 3
set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set rs2 = Server.CreateObject("ADODB.Recordset")
set oFichero = FSO.OpenTextFile(Server.MapPath("REPORTES.txt"))

On error resume next
Archivo = oFichero.ReadAll

If Err.Number <> 0 then
'no se hace nada y se informa de que el archivo está vacío
response.write "<br>El archivo REPORTES.TXT no tiene datos nuevos.<br>"
Err.clear

else

'quito la linea vacía:
Archivo = Replace(Archivo, vbcrlf & vbcrlf, vbcrlf)

' quito los encabezados:
Archivo = Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " & vbcrlf, "")

' quito los "-"
Archivo = Replace(Archivo,"--------------------------------------------------------------------------------" & vbcrlf, "")

' convierto el string en una matriz por el salto de linea
Archivo = Split(Archivo, vbcrlf)

' por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For i = 0 to UBound(Archivo)
sDate = Trim(Left(Archivo(i), 8))
sTime = Trim(Mid(Archivo(i), 10, 7))
sExt = Trim(Mid(Archivo(i), 20, 3))
sCO = Trim(Mid(Archivo(i), 24, 2))
sDialNumber = Trim(Mid(Archivo(i), 27, 31))
sDuration = Trim(Mid(Archivo(i), 58, 8))
'convierto la fecha d/m/a al formato separado
'-----------------------------------
mes = Left(sDate, 2)
dia = Mid(sDate, 4, 2)
ano = "20" & Right(sDate, 2)
'---------------------------------
'cambio el formato de duracion
sDuration = Replace(sDuration, "'", ":")
'---------------------------------


sql2 = "SELECT * FROM hyperterminal"
rs2.Open sql2, con, 3, 3
if rs2.eof then
dato="nuevo"
else
do while not rs2.eof 
if rs2("dia") = dia AND rs2("mes") = mes AND rs2("ano") = ano AND rs2("hora") = sTime AND rs2("co") = sCo  then
dato="repetido"
End if 
rs2.movenext
loop
end if
if dato="repetido" then
response.write "dato repetido, no lo agrego"
response.end
Else
rs.AddNew
rs("dia") = dia
rs("mes") = mes
rs("ano") = ano
rs("hora") = sTime
rs("ext") = sExt
rs("co") = sCO
rs("llamada_saliente") = sDialNumber
rs("duracion") = sDuration
rs.Update
end if 
Next
'para agregar solo datos nuevos a la base de datos, sobreescribe el archivo txt
Set CrearNuevoEnBlanco = FSO.CreateTextFile(Server.MapPath("REPORTES.txt"), TRUE)
'ruta completa
'Set CrearNuevoEnBlanco = FSO.CreateTextFile("C:\Documents and Settings\Administrador\REPORTE.TXT ", TRUE)

oFichero.Close
Set oFichero = nothing
set FSO = nothing
Set CrearNuevoEnBlanco = Nothing
end if

set rs = nothing
set rs2 = nothing
set con = nothing
%>
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
  #14 (permalink)  
Antiguo 04/11/2003, 11:45
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 21 años, 6 meses
Puntos: 13
Prueba a hacer esto en la consulta, al menos es mas rápido:

sql2 = "SELECT * FROM hyperterminal WHERE dia = " & dia & " AND mes = " & mes & " AND ano = " & ano & " AND hora = '" & sTime & "' AND co = '" & sCo & "'"

rs2.Open sql2, con

if rs.eof then
'Los datos no existen
else
'los datos existen
end if

Espero te sirva

He dado por supuesto que los campos dia, mes y año son numericos, si no lo son añadeles las comillas simples

Última edición por jercer; 04/11/2003 a las 11:47
  #15 (permalink)  
Antiguo 20/11/2003, 10:51
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
hola,

lo hice como me dices y tampoco me funciona
no me saca error pero tampoco hace lo que necesito, (necesito qeu solo me agrege una ves el dato.si encuentra un dato igual en la base de datos no lo agrega)

lo que me sale es: cuando hay datos repetidos me salen 78 veces el mensaje "esta repetido" y si le cambio algo al archivo de texto no pasa nada tambien me sale el mensaje de "esta repetido" 78 veces

cuando cambio la primera o la ultima linea del archivo de texto alli me sale el otro mensaje pero tambien 78 veces, "se agrego dato nuevo" y me lo agrega 78 veces y lo deberia agregar solo 1.
que puedo estar hciendo mal?

en negrita esta lo nuevo que le hice..

ojala me puedan ayudar, llevo mucho tiempo con este problema sin poder solucionarlo..gracias por todo.

Código:
<%
Dim FSO, oFichero, Archivo, sql2, dato, fecha, dia, mes, ano
Dim sDate, sTime, sExt, sCO, sDialNumber, sDuration
rs.open "hyperterminal", con, 3, 3
set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set rs2 = Server.CreateObject("ADODB.Recordset")
set oFichero = FSO.OpenTextFile(Server.MapPath("REPORTES.txt"))

On error resume next
Archivo = oFichero.ReadAll

If Err.Number <> 0 then
'no se hace nada y se informa de que el archivo está vacío
response.write "<br>El archivo REPORTES.TXT no tiene datos nuevos.<br>"
Err.clear

else

'quito la linea vacía:
Archivo = Replace(Archivo, vbcrlf & vbcrlf, vbcrlf)

' quito los encabezados:
Archivo = Replace(Archivo,"  Date     Time    Ext CO          Dial Number           Duration  Acc code  CD " & vbcrlf, "")

' quito los "-"
Archivo = Replace(Archivo,"--------------------------------------------------------------------------------" & vbcrlf, "")

' convierto el string en una matriz por el salto de linea
Archivo = Split(Archivo, vbcrlf)

' por cada elemento del array, detecto "campos" y los guardo en variables "volátiles"
For i = 0 to UBound(Archivo)
sDate = Trim(Left(Archivo(i), 8))
sTime = Trim(Mid(Archivo(i), 10, 7))
sExt = Trim(Mid(Archivo(i), 20, 3))
sCO = Trim(Mid(Archivo(i), 24, 2))
sDialNumber = Trim(Mid(Archivo(i), 27, 31))
sDuration = Trim(Mid(Archivo(i), 58, 8))
'convierto la fecha d/m/a al formato separado
'-----------------------------------
mes = Left(sDate, 2)
dia = Mid(sDate, 4, 2)
ano = "20" & Right(sDate, 2)
fecha=  mes & "/" & dia & "/" & ano
'---------------------------------
'cambio el formato de duracion
sDuration = Replace(sDuration, "'", ":")
'---------------------------------
' consulta para verificar si hay datos repetidos en la bd
' todos los campos son de texto
sql2 = "SELECT * FROM hyperterminal WHERE fecha like '%" & fecha & "%' AND hora = '" & sTime & "' AND co = '" & sCo & "'"
rs2.Open sql2, con, 3, 3

if rs2.eof then
'Los datos no existen
response.write "se agrego dato nuevo <br>"

rs.AddNew
rs("dia") = dia
rs("mes") = mes
rs("ano") = ano
rs("fecha") = fecha
rs("hora") = sTime
rs("ext") = sExt
rs("co") = sCO
rs("llamada_saliente") = sDialNumber
rs("duracion") = sDuration
rs.Update
else
'los datos existen
response.write "esta repetido <br>"
end if
set rs2 = nothing
'------------------------- 
Next
'para agregar solo datos nuevos a la base de datos, sobreescribe el archivo txt
Set CrearNuevoEnBlanco = FSO.CreateTextFile(Server.MapPath("REPORTES.txt"), TRUE)


oFichero.Close
Set oFichero = nothing
set FSO = nothing
Set CrearNuevoEnBlanco = Nothing
end if

set rs = nothing

set con = nothing
%>
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com

Última edición por lexus; 21/11/2003 a las 10:51
  #16 (permalink)  
Antiguo 23/11/2003, 15:28
Avatar de lexus  
Fecha de Ingreso: enero-2002
Ubicación: Cali - Colombia
Mensajes: 2.234
Antigüedad: 23 años, 4 meses
Puntos: 4
alguien me puede colaborar con esto?
__________________
Control de Visitantes, Control de Accesos, Minutas digitales, Manejo de Correspondencia
http://www.controldevisitantes.com
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 13:18.