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

File System Object: Omite primer caracter.

Estas en el tema de File System Object: Omite primer caracter. en el foro de ASP Clásico en Foros del Web. Bueno, se me ha presentado un error super curioso, al cual no encuentro respuesta en Google ni comprendo por qué lo da. He creado un ...
  #1 (permalink)  
Antiguo 19/09/2011, 01:38
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Exclamación File System Object: Omite primer caracter.

Bueno, se me ha presentado un error super curioso, al cual no encuentro respuesta en Google ni comprendo por qué lo da.

He creado un sistema de boletines en una Web y una de sus opciones es importar direcciones de email de un archivo de texto. Es un archivo normal, no tiene formato CSV, el archivo incluye un email por línea, mi código lee cada línea, ve si el email tiene un formato correcto, si no existe en la MDB y lo da de alta.

¿Cual es el problema? Pues que me omite el primer carácter de cada línea del fichero de texto.

Este sería el fichero: Libreta.txt:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]


Así de simple, este es el código de importación:

1º subo el archivo
2º lo leo de arriba abajo y creo las direcciones
3º lo borro

Código:
     'Si tiene valor impor comenzamos el proceso de importación.
     If Proceso = "impor" Then
     
        'Primero subimos el archivo guardando su nombre.
        Nombre_Arch = SubirArchivo(directorio)

        'Una vez subido abrimos el fichero.
        Set FS = Server.CreateObject("Scripting.FileSystemObject") 
        Set Fichero = FS.OpenTextFile(Directorio & Nombre_Arch, 1, False)
        
        'Con las siguientes variables informamos al cliente al final de la importación
        'del número de líneas subidas y de los emails creados.
        Buenos = 0
        Malos = 0
        Repetidos = 0
        
        'Recorremos todo el fichero comprobando el valor leído, si es correcto comprobamos que no
        'exista. Mostraremos un mensaje por cada línea en pantalla.
        Do While Not Fichero.AtEndOfStream
           Linea=Fichero.ReadLine
           Response.Write "/" & Linea & "/<br>"
           If ValidarCorreo(Linea) = 1 Then
              CrearRs "Select * From Boletines_Subcr Where Email = '" & Linea & "'"
              
              If Rs.Eof then Existe = 1 Else Existe = 0
              CerrarRs
              If Existe = 1 Then
                 sql= "insert into Boletines_Subcr (email)  VALUES ( '" & Linea  & "')"
                 Response.Write "Añadido email : " & Linea & "<br>"
                 conn.EXECUTE (SQL)
                 Buenos = Buenos + 1
              Else
                 Response.Write "<b>email ya existente : " & Linea & "</b><br>"
                 Repetidos = Repetidos + 1
              End If   
           Else
              Response.Write "<b>Texto no reconocido como email : " & Linea & "</b><br>"
              Malos = Malos + 1
           End If
           
           If Not Fichero.AtEndOfStream Then Fichero.Skip(1)

        Loop 
        
        'Impormaremos sobre los números de la importación.
        Response.Write "<br>Se han leído un total de " & Buenos + Malos + Repetidos & " lineas." 
        Response.Write "<br>Se han importado un total de " & Buenos & " correos." 
        Response.Write "<br>No se han reconocido  un total de " & Malos & " correos." 
        Response.Write "<br>Un total de " & Repetidos & " correos ya existían o estaban duplicados en el fichero."
        Response.Write "<br>Ahora puede subir otro fichero.<br>"        
        
        'Cerramos el fichero y lo borramos.
        Fichero.Close
        Set Fichero = Nothing
        FS.deletefile(Directorio & Nombre_Arch)      

     End If
En la base de datos me guarda lo siguiente:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
  #2 (permalink)  
Antiguo 19/09/2011, 03:59
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: File System Object: Omite primer caracter.

Más datos, el error me lo da tanto subido al servidor (w2003) como probándolo en local: WXP Prof con Babe Web Server
  #3 (permalink)  
Antiguo 19/09/2011, 05:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: File System Object: Omite primer caracter.

Más datos:

Me he dado cuenta que la primera línea del fichero sí la lee bien, esto es lo que devuelve el código en pantalla al ejecutarlo:

Inicio Subida: 19/09/2011 13:39:38

Archivo subido: attach1 - libreta.csv(1061 bytes)
Todos los archivos han sido procedados. Fin de la subida.

Execution ended: 19/09/2011 13:39:38
Añadido email : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]
email ya existente : [email protected]


Se han leído un total de 49 lineas.
Se han importado un total de 1 correos.
No se han reconocido un total de 4 correos.
Un total de 44 correos ya existían o estaban duplicados en el fichero.


Si os fijáis en la primera línea importada sí aparece la palabra pedidos completa, pero desde la segunda se come la primera letras.

Además si en vez de hacerle un ReadLine al fichero, le hago un ReadAll lo hace perfecto pero sin saltos de línea, es decir, una dirección seguida de la otra con un espacio en medio

¿Puede ser problema del salto de línea?
  #4 (permalink)  
Antiguo 19/09/2011, 09:19
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: File System Object: Omite primer caracter.

Bueno, error localizado en esta línea:

Código:
 If Not Fichero.AtEndOfStream Then Fichero.Skip(1)
Y para corregirlo sería así:

Código:
 If Not Fichero.AtEndOfStream Then Fichero.Skip(0)
El problema mayormente era mío al no conecer a fondo los métodos. El SKIP hace un salto de línea y caracteres, es decir, si quieres que salte una línea y lea desde el 5 carácter habría que hacer un Skip(5) dejándolo en 0 lee la línea entera.

Por este motivo la primera línea la leía bien ya que al entrar en el Do While no hacía el Skip hasta pasar al 2º registro.
  #5 (permalink)  
Antiguo 19/09/2011, 09:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 236
Antigüedad: 13 años, 5 meses
Puntos: 6
Respuesta: File System Object: Omite primer caracter.

Espero que a alguien le sirva en un futuro, podéis cerrar el post, gracias.

Etiquetas: asp, fichero, filesystemobject, txt
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 16:50.