Hola a todos:
Tengo unos ficheros de texto cuyas filas vienen con distintas longitudes de
registro y diferentes contenidos, según los caracteres que aparezcan en el
encabezado. Os paso un ejemplo de su contenido (cada fila es mucho más
larga, incluso en ocasiones supera los 10.000 caracteres):
8A01X,07-02-0500000121EU01010132170.830134025.7600...
8A04X,07-02-0500000121EU9724301801932029 00000000...
8A06X,07-02-0500000121EU 10000819.781
8A07X,07-02-0500000121EU010000000.000000000.000035...
El contenido será distinto en función de lo que aparezca al principio
(8A01X, 8A04X, ...)
Lo primero que hago es importarlo desde texto a una tabla que sólo contiene
un campo nText, eso ya me funciona perfectamente. Ahora me falta recorrer
esa tabla y extraer la información para almacenarla en diferentes tablas,
según el formato, y ya con sus columnas correspondientes.
Estoy probando el siguiente código que se aproxima a lo que necesito:
DECLARE @ptrval varbinary(16)
DECLARE @Inicio INT
DECLARE @Fin INT
DECLARE @C INT
DECLARE @Texto VARCHAR(8000)
SET @Inicio = 1
SET @Fin = @Inicio + 123
SET @C = 1
SELECT @ptrval = TEXTPTR(Texto) FROM tmpNText
READTEXT tmpNText.Texto @ptrval @Inicio @Fin
WHILE @C <= 50 BEGIN
SELECT @ptrval = TEXTPTR(Texto) FROM tmpNText
@Fin)
READTEXT tmpNText.Texto @ptrval @Inicio @Fin
PRINT @Texto
SET @C = @C + 1
SET @Inicio = @Inicio + 24
END
Pero tengo los siguientes problemas:
- Necesito almacenar el contenido extraído con READTEXT en una variable
- El bucle no siempre es hasta 50, las filas son de longitud variable. No
veo claro cómo añadirle una condición por si hubiese menos de 50 registros
en esa fila.
- Me falta implementar un CASE en función del formato de registro para que
extraiga bien la información (eso no me preocupa una vez solucionados los
puntos anteriores.
En fin, si se os ocurre la solución a estos problemas puntuales, así como
alguna otra alternativa que veáis mejor para hacer este proceso también
sería interesante. Estoy abierto a cualquier idea. La verdad que llevo mucho
tiempo sin realizar extracciones de substrings de un campo text.
Pd. Sé que lo podría hacer, por ejemplo desde vb.net, pero lo quiero hacer
con DTS ;-)
Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)
Leer las respuestas