Visual Basic - generar archivos plano (txt)

Life is soft - evento anual de software empresarial
   
Vista:

generar archivos plano (txt)

Publicado por pedro (5 intervenciones) el 04/12/2013 15:46:54
Buenos dias

estoy realizando un aplicativo en visual basic 2010 que genere archivos planos (txt)para bancos
estos bancos tiene un formato especifico para que pueda funcionar un ejemplo

NOMBRE DEL CAMPO long/bytes posicion Inicial posicion final inicial formato
Número de Cuenta Destino 25 1 25 alfanumerico



No Factura|Concepto |Vlr Bruto |Base Iva|Retenciones|IVA |ICA |Retención|Otros Descuentos|Vlr Neto
XXXXXX XXXXXX $XXXX $XXXX $XXX $XX $XX $XXXX $XXXXXXX $XXXX
XXXXXX XXXXXX $XXXX $XXXX $XXX $XX $XX $XXXX $XXXXXXX $XXXX
XXXXXX XXXXXX $XXXX $XXXX $XXX $XX $XX $XXXX $XXXXXXX $XXXX
XXXXXX XXXXXX $XXXX $XXXX $XXX $XX $XX $XXXX $XXXXXXX $XXXX
XXXXXX XXXXXX $XXXX $XXXX $XXX $XX $XX $XXXX $XXXXXXX $XXXX

como le asigno las longitudes a los campos para que acepten el formato q especifique??
tengo una base de datos en sql server 2008 ya con las tablas y un procedimiento guardar
o esto se puede hacer desde sql y llamarlo como un procedimiento en un formulario visual basic
el codigo que tengo en vb me genera el archivo pero no le he asignando las longitudes no se como espero que me puedan ayudar


Imports System.IO
Public Class FormColpatria

Private Sub FormColpatria_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub



Private Sub Btngenerar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btngenerar.Click

Try
Dim objarchivo As New System.IO.StreamWriter("./archivotexto.txt")
objarchivo.Write(TxtNsecuReg.Text + " ")
objarchivo.Write(TxtTpReg.Text + " ")
objarchivo.Write(TxtF_recibo.Text + " ")
objarchivo.Write(TxtNitcli.Text + " ")
objarchivo.Write(Txtclave.Text + " ")
objarchivo.Write(TxtNregEnv.Text + " ")
objarchivo.Write(TxtOfiPago.Text + " ")
objarchivo.Write(TxtNumCuenta.Text + " ")
objarchivo.Write(Txtespacios.Text + " ")
objarchivo.Close()
TxtNsecuReg.Text = ""
TxtTpReg.Text = ""
TxtF_recibo.Text = ""
TxtNitcli.Text = ""
Txtclave.Text = ""
TxtNregEnv.Text = ""
TxtOfiPago.Text = ""
TxtNumCuenta.Text = ""
Txtespacios.Text = ""


Catch ex As Exception
MsgBox("no se pudo guardar el archivo", MsgBoxStyle.Critical)
End Try

End Sub

Private Sub Btnleer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnleer.Click
Try
Dim miruta As String = ("./archivotexto.txt")
Dim archivo As New System.IO.StreamReader(miruta)


'Devuelve la matriz de cadenas resultante de la separación de una cadena en subcadenas.'
Dim S() As String = Split(archivo.ReadToEnd, " ")

TxtNsecuReg.Text = S(0)
TxtTpReg.Text = S(1)
TxtF_recibo.Text = S(2)
TxtNitcli.Text = S(3)
Txtclave.Text = S(4)
TxtNregEnv.Text = S(5)
TxtOfiPago.Text = S(6)
TxtNumCuenta.Text = S(7)
Txtespacios.Text = S(8)
archivo.Close()

Catch ex As Exception
MsgBox("No se pudo guardar el archivo", MsgBoxStyle.Critical)

End Try
End Sub
End Class
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

generar archivos plano (txt)

Publicado por DIEGO (33 intervenciones) el 05/12/2013 19:24:01
Pues tienes que usar las funciones de cadenas de vb

'POR EJEMPLO, COMPLETAR CON BLANCOS o CARACTERES, TE ADJUNTO CODIGO DE UNA APLICACION DE PRUEBA




Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Cadena As String = "VALOR"


'Cadena & StrDup(10, "x") ---> VALORxxxxxxxxxx
MsgBox(Microsoft.VisualBasic.Left(Cadena & StrDup(10, "x"), 10))
'StrDup(10, "x") & Cadena ---> xxxxxxxxxxVALOR
MsgBox(Microsoft.VisualBasic.Right(StrDup(10, "x") & Cadena, 10))
'Cadena & Space(10) ---> 'VALOR '
MsgBox(Microsoft.VisualBasic.Left(Cadena & Space(10), 10))

MsgBox(Microsoft.VisualBasic.Right(Space(10) & Cadena, 10))

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

generar archivos plano (txt)

Publicado por pedro (5 intervenciones) el 10/12/2013 18:35:21
gracias por la atencion prestada Diego
pero la funcion StrDup no me sirve en este caso porq no quiero que repita lo que ingresen en la caja de texto
mira estoy trabajando el aplicativo a tres capas
la base de datos->donde estan las tablas con los campos y su tipo de dato y esoecificando su tamaño
NIT NUMERIC (8.0)
logica de negocio->estan las variables con su respectivo tipo de dato
PRIVATE NIT INTEGER
interfaz-> donde me genera los archivos
TXTNIT.TEXT
resulta y pasa que en la interfaz donde genero e archivo no le eh especificado la longitud ejemplo
el usuario ingresa en el textbox 10 caracteres pero yo tengo que especificar que solo acepte 8
No se si sea una bobada lo que pegunto pero no se como hacerlo estoy aprendiendo por mi mismo
te agradeceria que me pudieras ayudar aclarando mi problema

lo otro que hize fue pasar los datos como parametros de la base de datos en la logica de negocios

Public Function guardararchivo() As Boolean
Dim sql As String = "sp_guardarhsbc"
Dim obj As New ClsConexion()
obj.AgregarParametro(ParameterDirection.Input, "@num_secu_reg", SqlDbType.Int, 5.0, num_secu_reg)
obj.AgregarParametro(ParameterDirection.Input, "@tipo_registro", SqlDbType.Int, 2.0, tipo_Registro)
obj.AgregarParametro(ParameterDirection.Input, "@nit_cliente", SqlDbType.Int, 11.0, nit_cliente)
obj.AgregarParametro(ParameterDirection.Input, "@clave", SqlDbType.NVarChar, 27, clave)
obj.AgregarParametro(ParameterDirection.Input, "@num_regs_env", SqlDbType.Int, 6.0, num_reg_env)
obj.AgregarParametro(ParameterDirection.Input, "@ofic_pago", SqlDbType.Int, 4.0, ofi_pago)
obj.AgregarParametro(ParameterDirection.Input, "@num_Cuenta", SqlDbType.Int, 12.0, num_cuenta)
obj.AgregarParametro(ParameterDirection.Input, "@espacios", SqlDbType.NVarChar, 142, espacios)

If Not obj.EjecutarSentencia(sql, True) Then
[error] = obj.[Error]
Return False

Else

Return True
End If

End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar