Rellenar campo con nulos

He importado a una base de datos de access un fichero txt. Tengo que ir haciendo unas comprobaciones de los datos: si las fechas introducidas tienen el formato correcto y otras cosas más.
El problema es que he importado el fichero y claro donde acaba la última letra o número de ese registro para él ya acaba la linea, pero yo necesito que cada línea ocupe 114, osea, imaginate que uno termina en 78, pues de ahí hasta el 114 tengo que rellenar con nulo. ¿Cómo puedo hacer eso? A ver si me puedes ayudar.

8 Respuestas

Respuesta
1
Ese problemilla se presenta también en los famosos cuadernos CSB19 que normalizan los datos de texto plano en las entidades bancarias. La forma más sencilla sería el crear una consulta con un campo calculado de la siguiente manera:
[tusDatos] & SPACE( 114 - LEN ( [TusDatos] ) )
Esto también es valedero si usas VB (Visual Basic).
...
Te lo desgloso para su comprensión:
[TusDados] = Este es el campo o campos donde tienes tus datos
& = operador para concatenar caracteraes y cadenas de caracteres.
SPACE()= Función que añade los espacios que le indicamos entre sus paréntesis
LEN()= Función que cuenta el nº de caracteres de una cadena y da un valor en nº entero.
Bueno espero haberte ayudado en algo o por lo menos lograr encenderte la bombilla.
Respuesta
1
Aunque no entiendo muy bien tu pegunta la solución es fácil define una variable tipo string para el largo total de la cadena como esta abajo, luego tomas en otra variable el largo del registro le resta 114 al largo de la otra cadena y con la función space(diferencia) lo solucionarías, si no es eso trata de explicármelo mejor
dim sLargocadena  *114
Respuesta
1
No indicas cómo estás realizando la importación.
Si lo haces con las herramientas de Access, la base de datos dejará a nulo (o al valor por defecto del campo), a partir de la posición que no venga en la línea.
Si estás importando leyendo las líneas del fichero, puedes hacer que la longitud de la línea sea fija rellenando con blancos y después, al cargar los datos quitas los espacios.
linea = left$(linea & space(114), 114)
Si no te sirve así habría que intentar importar los datos a base de programación en Visual Basic.
Cuéntame exactamente cual es el problema y si hace falta hacemos un pequeño programa.
He importado desde access el txt a una tabla y todos los he importado a una misma columna.
Lo que quiero es si un registro tiene longitud de 78 que ocupe hasta 114, y lo tengo que rellenar con espacios ¿me explico?
Entiendo que quieres que el campo del registro, después de importar el fichero, tenga 114 caracteres independientemente de la longitud que tenga la línea leída.
Para ello deberías ejecutar una consulta de actualización después de importar los datos. El código SQL de la consulta sería:
UPDATE nombreDeLaTabla SET nombreDelCampo = LEFT$(nombreDelCampo & SPACE(114),114)
Espero que sea eso. Si no sigue insistiendo y me detallas un poco para qué quieres hacerlo.
Respuesta
1
Me da por lo que dices que lo has importado a un fichero de longitud fija y todo en un registro por lo que tienes el problema de los tamaños.
Te diría que mejor lo exportes o vincules a Excel te va resultar mucho más cómodo aunque también puedes hacer las comprobaciones en la propia BD es más potente. Si lo vas ha hacer en texto usa una exportación a CSV para tener separados los registros y poder poner a cada uno su tamaño. Estas asumiendo que todos los huecos que te faltan van al final y eso generalmente no será cierto.
En cualquier caso para hacer lo que quieres los pasos que yo haría son:
a) Copiar el fichero de texto en excel en la 1ª columna
b) Poner en una celda cualquiera 'W1' por ejemplo una cadena en blanco de 78 caracteres
b) en la 2ª poner =A2&MID(W1;LEN(A2);78) eso te generará la cadena rellena
c) arrastra y listo.
Si no te queda claro coméntamelo
Respuesta
1
Vete a Access y en la tabla donde tienes la información ábrela en vista de diseño y verifica que el campo sea numérico ademas debajo donde dice formato colca el numero de ceros que quieres ver a la izquierda. Por ejemplo 10 ceros: Formato: 0000000000. Listo cualquier cosa pregunte. Pues eso te llena con ceros espero te sirva
Respuesta
1
¿Disculpa no entendí bien la pregunta te refieres a que quieres completar registros de una tabla con valores nulos hasta una cierta cantidad de registros?
O se trata de un campo de texto que debe tener un valor fijo,
¿Cuántos campos en la tabla ha originado la importación de la que hablas?
Explicate un poco mejor así puedo darte una respuesta
saludos
He importado el txt a access a una tabla con sólo una columna. Necesito rellenar hasta la longitud de 114 con nulos desde que termina el último valor de ese campo. ¿Me explico?
Ok interpreto que lo que quieres hacer es rellenar 114 registros
`Se podría hacer con un procedimiento
A la tabla le doy el nombre de "empleados" y al campo de la tabla
"direccion"
------------------------------------------------------------------------------------
Sub completar ()
dim longitud as integer
dim db as database
dim rec as recordset
set rec= db.openrecordset("empleados")
longitud= nz(dcount("[direccion]","empleados"),0)
for   longitud+1    to 114
rec .addnew
rec![direccion]=null
rec.update
next longitud
rec.close
End sub
--------------------------------------------------------------------------------------------------------
Este procedimiento completaría los campos desde el ultimo valor en adelante hasta el 114
Respuesta
1
Mandame el archivo a ver
[email protected]
Pues si el txt va separado por comas o punto y coma
lo que tienes que hacer es importar campos sin tamaño
si no, ¿es raro que le falten trozos así no más
siempre son los campos del final de linea los que faltan?
Ademas puedes hacer un programa para importar
con open
lineinput
y por linea completarías lo que quieras
mandame también la base que tienes y te explico más
Respuesta
La verdad la forma como me preguntas no esta muy clara si quieres me lo envías al mail jaimesgu@hotmail lo que hasta ahora llevas y me haces una explicación viendo que es lo que tienes y miramos como ayudarte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas