Archivo de texto a tabla sql server con asp

Ricardo
05 de Julio del 2002
Logr descargar un archivo desde el cliente al servidor y leer este archivo, pero no se como validar que la estructura del archivo que me est enviando sea la correcta y adems no se como grabar ese archivo de texto a una tabla access o sql server, para seguir haciendole validaciones, si alguien me puede ayudar se lo agradecera mucho,


gracias

rapomon
05 de Julio del 2002
Que quieres hacer exctamente, meter el fichero de texto en un campo binario o importar cada lnea de texto del fichero como un nuevo registro, con los campos separados por comas...

Ricardo
05 de Julio del 2002
Ej.
El archivo de texto es:

xxxxxxxx yyyyyyy zzzzzz
11111111 222222 3333
iiii 8888 00000000

y tengo una tabla que se llama prueba con la siguiente estructura:
Campo1 char(9)
Campo2 char(9)
Campo3 char(9)

y quiero grabar cada columna del archivo de texto en cada campo de la tabla, eso es un problema que no entiendo y lo otro es saber si el archivo plano que estan enviando tiene la estructura correcta o no, porque si me mandan un archivo con 4 columnas yo no voy a poder grabarlas en mi tabla, pero le tengo que informar al cliente que el archivo tiene otra estructura.

ojal me hayas entendido, y gracias por responderme.

rapomon
05 de Julio del 2002
Muy interesante. Vamos a ver:

<%
'Lo primero que hacemos ser leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile("c:fichero.txt")
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing

Set cnDB = Server.CreateObject("ADODB.Connection")
'Metemos las lneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada lnea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then
'Partimos cada columna de la lnea actual
arrayColumnasLinea = Split(arrayLineasFichero(i), " ")
For j = 0 To UBound(arrayColumnasLinea)
cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(0) & "')"
Next
End If
Next

Set cnDB = Nothing
%>

rapomon
05 de Julio del 2002
La consulta est mal, sera de la siguiente manera (especificando el campo 1, 2 y 3). Si la lnea no tiene 3 columnas el script va a fallar.

cnDB.Execute("INSERT INTO TABLA VALUES ('" & arrayColumnasLinea(0) & "', '" & arrayColumnasLinea(1) & "', '" & arrayColumnasLinea(2) & "')"

Ricardo
05 de Julio del 2002
Muchas Gracias, voy a probarlo y te cuento...
gracias otra vez

rapomon
05 de Julio del 2002
<%
'Aqu teneis el mismo escript que escrib ayer, pero probado y sin errores. Copiar el mensaje entero y guardarlo en un fichero .asp, configurar los parmetros y probadlo. Por seguridad yo comentara antes la lnea que ejecuta el cdigo SQL antes de probarlo.

'El siguiente script que lee un fichero espacificado y lo importa a la tabla especificada

'Parmetros obligatorios:
strRutaFichero = Server.MapPath("fichero.txt") 'Ruta del fichero a importar
strSeparador = " " 'Separador entre columnas
strConexion = "CADENA_CONEXION" 'Especifique aqu la cadena de conexin a la base de datos
strTabla = "NOMBRE_TABLA" 'Nombre de la tabla en la que se importarn los datos

'NOTA: No puede haber incoherencias, por supuesto, el nmero de columnas en el fichero
'debe ser el mismo que el nmero de campos en la tabla y los tipos de datos deben coincidir)

'Lo primero que hacemos ser leer el fichero entero y meterlo en la variable strFichero
Set Fs = Server.CreateObject("Scripting.FileSystemObject")
Set F = Fs.GetFile(strRutaFichero)
Set Ts = F.OpenAsTextStream
strFichero = Ts.ReadAll
Ts.Close
Set Ts = Nothing
Set F = Nothing
Set Fs = Nothing

Set cnDB = Server.CreateObject("ADODB.Connection")
cnDB.Open strConexion 'Abrimos la conexin a tu base de datos

'Metemos las lneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)

'Por cada lnea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then 'Si la lnea no contiene nada...
'Partimos cada columna de la lnea actual (por cada espacio encontrado)
arrayColumnasLinea = Split(Trim(arrayLineasFichero(i)), strSeparador)
strSql = "INSERT INTO " & strTabla & " VALUES ("
For j = 0 To UBound(arrayColumnasLinea)
strSql = strSql & "'" & Replace(arrayColumnasLinea(j), "'", "''") & "'"
If j < UBound(arrayColumnasLinea) Then
strSql = strSql & ", "
End If
Next
strSql = strSql & ")"
cnDB.Execute(strSql)
Response.Write strSql & "<br>"
End If
Next

cnDB.Close
Set cnDB = Nothing
%>