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 además 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 agradecería mucho,


gracias

rapomon
05 de Julio del 2002
Que quieres hacer exáctamente, meter el fichero de texto en un campo binario o importar cada línea 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 líneas del fichero en un array (partimos por el retorno de carro)...
arrayLineasFichero = Split(strFichero, vbCrLf)
'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then
'Partimos cada columna de la línea 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, sería de la siguiente manera (especificando el campo 1, 2 y 3). Si la línea 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 parámetros y probadlo. Por seguridad yo comentaría antes la línea que ejecuta el código SQL antes de probarlo.

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

'Parámetros obligatorios:
strRutaFichero = Server.MapPath("fichero.txt") 'Ruta del fichero a importar
strSeparador = " " 'Separador entre columnas
strConexion = "CADENA_CONEXION" 'Especifique aquí la cadena de conexión a la base de datos
strTabla = "NOMBRE_TABLA" 'Nombre de la tabla en la que se importarán los datos

'NOTA: No puede haber incoherencias, por supuesto, el número de columnas en el fichero
'debe ser el mismo que el número 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 conexión a tu base de datos

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

'Por cada línea...
For i = 0 To UBound(arrayLineasFichero)
If arrayLineasFichero(i) <> "" Then 'Si la línea no contiene nada...
'Partimos cada columna de la línea 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
%>