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

Problema con un buscador de texto

Estas en el tema de Problema con un buscador de texto en el foro de ASP Clásico en Foros del Web. Hola amigos, tengo un pequeño código que me bajé de asp.tutor que lo que hace es realizar una búsqueda en ciertos directorios de tu sitio ...
  #1 (permalink)  
Antiguo 28/09/2004, 04:08
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Pregunta Problema con un buscador de texto

Hola amigos, tengo un pequeño código que me bajé de asp.tutor que lo que hace es realizar una búsqueda en ciertos directorios de tu sitio web según el comódín o palabra clave que hayas escrito en el imput text y luego te muestra una paginación con los resultados de la búsqueda.

no me quiero enrollar mucho, el caso es que probandolo me da el siguiente error

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

Se sobrepasó el final del archivo 

/buscar.asp, line 124
buscando en el código me encuentro lo siguiente....

Código PHP:
<%
121 Function Contenido(pageobtengo el contenido del archivo y lo pongo en una variable
122 Set objFSO2 
Server.CreateObject("Scripting.FileSystemObject")
123 Set objFile objFSO2.OpenTextFile(page)
124 strContents objFile.ReadAll
125 objFile
.Close
126 Set objFile 
Nothing
127 Set objFSO2 
Nothing
128 Contenido 
strContents
129 End 
Function
%> 
Por lo poco que entiendo, el problema es cuando el objeto abre el textfile de la page e intenta leer.

¿puede ser que esa página web esté protegida de alguna manera y no se pueda acceder a ella para la lectura???

no tengo ni idea.

Gracias de antemano.
__________________

***Aprendiz de todo y maestro de nada***
  #2 (permalink)  
Antiguo 30/09/2004, 05:15
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Bueno, parece que el post se ha perdido en el ciber-espacio
__________________

***Aprendiz de todo y maestro de nada***
  #3 (permalink)  
Antiguo 30/09/2004, 10:13
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
¿El archivo de texto tiene 0KB?
Si es así, acá tenés la solución: http://www.aspfaq.com/show.asp?id=2481


Otra posible, está aquí: http://www.aspfaq.com/show.asp?id=2039 y dice que...

Cita:
If the file doesn't exist, you will get the following error:

Microsoft VBScript runtime error '800a003e'
Input past end of file

So, you might want to use the FileExists() methodology discussed previously in order to avoid potential errors if the filename is invalid. Note that if the file exists but contains *no* carriage returns (e.g. a one-liner), the lineCount will return 0. Similarly, if the last line of the file does not end with a carriage return, the count will be one short.
__________________
...___...
  #4 (permalink)  
Antiguo 30/09/2004, 11:16
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
¿OKB? ni idea,

no obstante, la documentación que me mandas es muy interesante,,,

la voy a estudiar y chekear de mil maneras, luego te digo...

gracias por tu tiempo

nos vemos...
__________________

***Aprendiz de todo y maestro de nada***
  #5 (permalink)  
Antiguo 30/09/2004, 12:15
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
OKB no, 0KB (cero)

O sea... si el archivo está completamente vacío
__________________
...___...
  #6 (permalink)  
Antiguo 01/10/2004, 02:53
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
okis,

bueno, sigo leyendo la documentación, ahora te digo
__________________

***Aprendiz de todo y maestro de nada***
  #7 (permalink)  
Antiguo 20/10/2004, 04:56
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Bueno amigos, decididamente, después de horas de estar liado con esto, sigo atascado en lo mismo. no doy pie con bola.

como comenté anteriormente....
Código PHP:
<% 
121 Function Contenido(pageobtengo el contenido del archivo y lo pongo en una variable 
122 Set objFSO2 
Server.CreateObject("Scripting.FileSystemObject"
123 Set objFile objFSO2.OpenTextFile(page
124 strContents objFile.ReadAll 
125 objFile
.Close 
126 Set objFile 
Nothing 
127 Set objFSO2 
Nothing 
128 Contenido 
strContents 
129 End 
Function 
%> 
me da el error en la línea 124 diciendome que se sobrepasó el final del archivo.

Por lo que puedo entender del código, se crea un archivo de texto en el directorio con el contenido de las páginas html, luego se asigna a la variable
strContents la lectura (objFile.ReadAll) del resultado y es cuando sale lo del mensaje de error.

Estuve probando las opciones que me mandastes Al Zuawa, pero no doy pie con bola. Las páginas web no estan vacias, tienen contenido, pero por lo que he podido ver, al salir el mensaje de error, en el directorio web he comprobado que no llega a crearse ningún archivo de texto, no le da tiempo, pues no se cumple el script

A ver si salgo de estas de una vez, por que estoy
__________________

***Aprendiz de todo y maestro de nada***
  #8 (permalink)  
Antiguo 20/10/2004, 09:51
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
Cita:
Iniciado por Al Zuwaga
¿El archivo de texto tiene cero KB?
Si es así, acá tenés la solución: http://www.aspfaq.com/show.asp?id=2481


Otra posible, está aquí: http://www.aspfaq.com/show.asp?id=2039 y dice que...

epa2, haciendo pruebas, llegué a la misma concusión que lo que te estoy citando aquí arriba y te había dicho hace unos días. Hacé estas pruebas para verificarlo:

En una página llamada "pagina.asp", colocá esto:


Código:
<% 
Function Contenido(page) 'obtengo el contenido del archivo y lo pongo en una variable 
Set objFSO2 = Server.CreateObject("Scripting.FileSystemObject") 
Set objFile = objFSO2.OpenTextFile(Server.MapPath(page))
strContents = objFile.ReadAll 
objFile.Close 
Set objFile = Nothing 
Set objFSO2 = Nothing 
Contenido = strContents 
End Function 
%>

<% = Replace(Server.HTMLEncode(Contenido("pagina.asp")),vbcrlf , "<br>") %>
Si te muestra el contenido, quiere decir que funciona bien.

Ahora, en la misma carpeta donde está el archivo "pagina.asp", creá un TXT completamente vacío y con el nombre "archivo.txt". En la página "pagina.asp", cambiá:

Código:
<% = Replace(Server.HTMLEncode(Contenido("pagina.asp")),vbcrlf , "<br>") %>
por:

Código:
<% = Replace(Server.HTMLEncode(Contenido("archivo.txt")),vbcrlf , "<br>") %>
Si te dice...

Cita:
Tipo de error:
Error de Microsoft VBScript en tiempo de ejecución (0x800A003E)
Se sobrepasó el final del archivo
... está correcto porque el archivo "archivo.txt" está vacío.
En todo caso, en esa función no está el problema sino en alguna otra parte del código que no colocaste.
__________________
...___...

Última edición por AlZuwaga; 20/10/2004 a las 09:54
  #9 (permalink)  
Antiguo 20/10/2004, 10:13
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
gracias al zuawa por responder.

de nuevo voy a estudiar lo que me dices,
ya te respondo pronto
__________________

***Aprendiz de todo y maestro de nada***
  #10 (permalink)  
Antiguo 20/10/2004, 12:38
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Cita:
Iniciado por Al Zuwaga

Si te dice...

... está correcto porque el archivo "archivo.txt" está vacío.
En todo caso, en esa función no está el problema sino en alguna otra parte del código que no colocaste.
Hola de nuevo Al Zuwaga

mira, he hecho lo que me decís, y es correcto, me sale el mensaje de error.

¿me puedes decir como podría hacerle un debug al código de esa página para encontrar el fallo???


esta page antes me iba bien, pero ignoro ahora que es lo que podrá salir mal, es posible que haya recibido alguna modificación sin que yo me haya percadtado de ello.

__________________

***Aprendiz de todo y maestro de nada***
  #11 (permalink)  
Antiguo 20/10/2004, 13:37
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
Cita:
¿me puedes decir como podría hacerle un debug al código de esa página para encontrar el fallo???
Pues realmente no tengo la más put... idea

Qué probamos con esto? Que la función que mostrás hace lo que tiene que hacer:
- Muestra el contenido del archivo, en caso de existir y en caso que tenga contenido o,
- da un error cuando el archivo no existe o está VACÍO.

FIN. Eso es todo. Más no se puede hacer sin ver más código.

Aunque, haciendo un gran esfuerzo para poner mi última neurona sana en funcionamiento, lo último que se me ocurre hacer es lo siguiente. Que en la función original (no en la de ejemplo que te puse más arriba), agregues la siguiente línea:

Código:
response.write Server.MapPath(page) : response.end
inmediátamente arriba de:
Código:
Set objFile = objFSO2.OpenTextFile(Server.MapPath(page))
... y luego te fijes qué demonios hay en ese archivo, el que viene en la variable "page"
__________________
...___...

Última edición por AlZuwaga; 20/10/2004 a las 13:38
  #12 (permalink)  
Antiguo 21/10/2004, 03:59
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Al Zuwaga, primero expresarte mi agradecimiento por la ayuda que me estás prestando, como tu bien dices "estrujandote las neuronas"

Para los aprendices de programación (yo algún día quisiera serlo, pero reconozco mis limitaciones) este tipo de ayuda es como agua bendita caida del cielo.

bueno, no me enrollo más y voy a probar a hacer lo que me dices..

Gracias por estar ahí
__________________

***Aprendiz de todo y maestro de nada***
  #13 (permalink)  
Antiguo 21/10/2004, 04:09
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
hola de nuevo, uff, esto parece un culebron

he hecho lo que me dices y me sale esto--------------->>>>>>>>>>

Server.MapPath() error 'ASP 0172 : 80004005'

Ruta de acceso no válida

/buscador/buscar.asp, line 137

El parámetro Path del método MapPath debe ser una ruta de acceso virtual. Se utilizó una ruta de acceso física.


comentar que yo realiza la búsqueda sobre unos directorios de nivel superior, de hecho, en la cabecera del código tengo puesto esto -------->>>>>>

redim path(4)
path(1)= server.mappath("../my_life") 'en donde se hará la busqueda
path(2) = server.mappath("../aficiones") 'en donde se hara la busqueda
path(3) = server.mappath("../biografia") 'en donde se hara la busqueda
path(4) = server.mappath("../comentarios") ' en donde se hará la busqueda

¿tiene algo que ver??

bueno,

nos vemos pronto.
__________________

***Aprendiz de todo y maestro de nada***
  #14 (permalink)  
Antiguo 21/10/2004, 10:33
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
Bueno, primero, denada. Segundo, no te creas que estás recibiendo la ayuda de un experto, sólo de otro aprendiz de programación. Tercero, y más complicado , sigamos con el problema

No entiendo por qué te ha dado el error "Ruta de acceso no válida" luego de hacer ese cambio... debería haberte dado ese error desde un inicio.. pero no es algo que piense discutir ahora


Cita:
Server.MapPath() error 'ASP 0172 : 80004005'
Invalid Path
/<file>.asp, line <line>
The Path parameter for the MapPath method must be a virtual path. A physical path was used.


Like the error says, you can only use relative paths with Server.MapPath, since the purpose of the function is to generate a local/physical path from a web structure. So, if you have the physical path already, don't bother calling Server.MapPath().

Extraido de aquí (un poco más abajo de la mitad de la página)

Ahí arriba te coloco la causa del error. No te puedo ayudar a solucionarlo porque no sé que hay en la variable page, donde llamás a Contenido(page). Además no entiendo qué tiene que ver las 5 líneas de código que colocás

Agamos una cosa, que me parece que habría que haber hecho -cuantas aches- desde un inicio. Pasame el enlace de asptutor donde bajaste el código y lo analizo.
__________________
...___...
  #15 (permalink)  
Antiguo 21/10/2004, 10:52
Avatar de epa2  
Fecha de Ingreso: abril-2002
Ubicación: Málaga
Mensajes: 1.475
Antigüedad: 23 años
Puntos: 9
Hola de nuevo,

bueno, mira, vamos al grano, te pongo el código completo de la page....

no quería llegar hasta este punto para no abusar de tí, pero al final....

Código PHP:
<%
Response.Buffer True
    
    
redim path
(4)
path(1)= server.mappath("../my_life"'en donde se hará la busqueda
path(2) = server.mappath("../aficiones") '
en donde se hara la busqueda
path
(3) = server.mappath("../biografia"'en donde se hara la busqueda
path(4) = server.mappath("../comentarios") ' 
en donde se hará la busqueda


Exts  
"htm,html,asp"          'extensiones de los archivos sobre los que se hará la busqueda 

clave = Request.Form("clave")   '
clave a buscar

Redim Resultados
(1000,1)        'se podrán registrar hasta 1000 posibles resultados
Session("Encontrados") = 0   
Session("Totales")     = 0

Inicio =   Now()
resx = 0
for x= 1 to 4

%>

<style>
A:link {text-decoration: none;}A:visited {text-decoration: none;}
</style> 

<%
Call Buscar(Path(x),Exts,clave)    '
empieza la busqueda
next
cuantos 
Session("encontrados")
call DualSorter(cuantos)        'se ordena o se 'rankean' los resultados
call Crear_Archivo_resultados

If cuantos>0 then
tomaron = datediff("s",Inicio,Now())
Response.Redirect "mostrar.asp?clave=" & clave & "&Tomaron=" & Tomaron & "&Totales=" & Session("Totales")& "&Inicio=1"
Else




Response.Write "<center><Font face='
arial,verdana,helvetica' size='2'>"
Response.Write "<b>http://" & Request.ServerVariables("HTTP_HOST")  & "</b><br><hr size='
2'>"
Response.Write "No se encontrarón archivos que contengan la palabra clave:<b> " & clave & "</b><br>"
Response.Write "<a href='
Default.asp'> >> Pulsa aquí para realizar otro busqueda <<</a></center></font>"

End if
%>

<%
Function Buscar(PathSpec,Exts,clave)
If right(PathSpec,8)<>"_vti_cnf" then
    Set Fso = CreateObject("Scripting.FileSystemObject") 
    Set FolderInfo = Fso.GetFolder(PathSpec) 
    Set FileList = FolderInfo.Files 
    '
resx 0
For Each File in FileList  'obtener todo el listado de archivo de dir actual
    Session("Totales") = Session("Totales") + 1
    FileName = UCase(Cstr(File.Name))
    If InStr(1, Exts, fso.GetExtensionName(file.Name), vbTextCompare) > 0 Then
            page = contenido(PathSpec & "/" & FileName) '
solo una vez se accesa el archivo
            Session
("Coincidencias")= 0                                 
        
If buscar_todo(page,clavethen     
            Session
("Encontrados") = Session("Encontrados") + 
            Resultados
(resx,0) = "<font size='2'><A HREF=""" FormatURL(PathSpec) & "/" FileName """>" 
            
Resultados(resx,0) = Resultados(resx,0) & Titulo(page) & "<a/></font><br>"
            
metas              obtener_metas(page)                ' obtener todos los meta tags de la página    
            If len(metas)>0 then
                j2 = Split(metas,"|",-1,1)                      
                k = 1
                Metas = Ubound(j2)
                    For m=0 to Ubound(j2)                       
                        Resultados(resx,0) = Resultados(resx,0) & j2(m)
                        k = k + 1
                    Next
            End if        

                if File.Size < 1024 Then    
                    tam = File.Size & " Bytes" 
                ElseIf File.Size < 1048576 Then
                    tam = Round(FileSizeTotal/1024, 2) & " KB" 
                Else
                    tam = Round((FileSizeTotal/1024)/1024.1, 2) & " MB" 
                End if    

            Resultados(resx,0) = Resultados(resx,0) & tam & " Archivo creado el: " & File.DateCreated & " Ultima modificación: " & File.DateLastModified & "<br>"
            Resultados(resx,1) =  Session("Coincidencias")
            resx = resx + 1    
        End if    
    End if
Next
    Set f = Fso.GetFolder(PathSpec) 
    Set fc = f.SubFolders 
    For Each Folder in fc  '
recursividad dentro de los directorios
        Call Buscar
(PathSpec "\" & Folder.Name,Exts,clave)    
    Next 
End if
End Function
%>


<%
Sub Crear_Archivo_resultados
set fso = Server.CreateObject("
scripting.FileSystemObject")
Arch_temp = Server.MapPath(Session.SessionId & "
.txt")
set File = fso.CreateTextFile(Arch_temp, true,false)

For k=0 to Session("
Encontrados")-1
    File.WriteLine(Resultados(k,0))
    File.WriteLine(Resultados(k,1)) 
Next    
File.Close
Set file = nothing
Set fso  = nothing
End sub
%>

<%
Function Contenido(page) 'obtengo el contenido del archivo y lo pongo en una variable
Set objFSO2 = Server.CreateObject("
Scripting.FileSystemObject")
Set objFile = objFSO2.OpenTextFile(page)
strContents = objFile.ReadAll
objFile.Close
Set objFile = Nothing
Set objFSO2 = Nothing
Contenido = strContents
End Function
%> 
ahí está, yo obstante, estoy intentando encontrar un backup antiguo de esta pagina, para ver si he realizado algún cambio sin darme cuenta en las últimas fechas....

nos vemos pronto
__________________

***Aprendiz de todo y maestro de nada***
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 05:54.