FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
problema
que tal amigos del foro escribo para ver si me pueden ayudar con un problema que tengo he hecho una aplicacion que genera un archivo de texto a partir de una bd el problema es que ese archivo debe de tener cierto formato ya que los datos quemando al texto seran importados a otra aplicacion.
la tabla consta de 4 campos los cuales son Id_Cuenta, Estado, Importe,Numero exporto al texto todos los regitros con todos sus campos el problema es que el campo importe de be de ser de 16 posiciones. supongamos que el texto queda asi 0000091004458574850_______1000001008145 asi asi debe de quedar cada registro los primeros 18 caracteres son del primer campo,el siguiente que es de uno es el segundo campo, despues vienen las 16 posiciones del campo importe`con los espacios (suponiendo que los guiones bajos son espacios en blanco), y por ultimo el nuumero que es de longitud 7. el problema es que mi texto queda asi 00000910044585748501000001008145 entonces en el campo de importe no me respeta los espacios en blanco como le puedo hacer para que en mi texto me salga como lo requiero ? espero me puedan ayudar porque la verdad ya me he dado muchos topes. gracias por su atencion y hasta pronto. |
#2
|
|||
|
|||
Vamos sin hacernos bolas je
Tus campos son Id_Cuenta, Estado, Importe,Numero el cual
ID_Cuenta = 16 Estado = 1 Importe = 16 ( a la derecha) Numero = 7 Usemos una funcion ya un poco generalizada Código:
Function Palabra(Cad : String;LarCad : String;Const Lado : Byte = 1) : String; Begin While Length(Cad) < LarCad Do Case Lado Of 1 : Cad := ' '+Cad; 2 : Cad := Cad+' '; End; Result := Cad; End; Código:
Procedure..... . . Begin Memo1.Lines.Clear; ..abres tu table While Not Table1.EoF Do Begin Memo1.Lines.Add(Table1.FieldByName('ID_Cuenta').AsString+ Table1.FieldByName('Estado').AsString+ Palabra(Table1.FieldByName('Importe').AsString,16)+ Table1.FieldByName('Numero').AsString); Table1.Next; End; Memo1.Lines.SaveToFile('MisDatos.Txt'); End;
__________________
saludos desde Puebla Mexico.. asanxt@hotmail.com "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
#3
|
|||
|
|||
que tal
gracias por la respuesta tan rapida pero sabes cuando compilo el programa me dice un error de imcompatible types: 'String' and 'Integer' en la linea
While Length(Cad) < LarCad Do no se a que se deba me podrias orientar al raspecto .? gracias por tu ayuda y disculpa las molestias saludos ¡ |
#4
|
||||
|
||||
Si te fijas bien en la declaracion de los parametros de la funcion veras el error...
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#5
|
|||
|
|||
Es cierto jejeje
es que :
Código:
Function Palabra(Cad : String;LarCad : String;Const Lado : Byte = 1) : String; Código:
Function Palabra(Cad : String;LarCad : Integer;Const Lado : Byte = 1) : String; Todo por creer que tenemos un compilador interno en nosotros jejejeje como RoboCop jeee
__________________
saludos desde Puebla Mexico.. asanxt@hotmail.com "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
#6
|
|||
|
|||
jejeje
que crees tengo un pequeño problema si corro el programa al mandar al texto se queda trabado lo mande a correr linea por linea y ya no hace nada
entra al siglo while not Table2.Eof do y se brinca a la linea Table2.FieldByName('NumeroCheque').AsString); y de ahi se va a la funcion y se queda atorado en laslineas While Length(Cad) < LarCad Do Case Lado of 1: Cad:=''+Cad; no se que es lo que pase en verdad ojala me puedas ayudar de antemano gracias |
#7
|
|||
|
|||
Haber
Haber escribe lo que pusiste en el While y como escribiste la funcion??
__________________
saludos desde Puebla Mexico.. asanxt@hotmail.com "como siempre a sus ordenes y siempre con buena cara" 'lolita me excitas, perversa piel de melocotón' |
#8
|
|||
|
|||
hola que tal amigos del foro
la verdad este hilo me lo contestaron hace tiempo pero tengo un pequeño detalle como puedo hacer que la funcion que se nombra en este hilo me ponga los espacios del lado derecho y no solo del lado izquierdo? ya que yo agrego lineas a un Tmemo de esta manera Código:
Function Palabra(Cad : String; LarCad : Integer;Const Lado : Byte = 1) : String; begin While Length(Cad) < LarCad Do Case Lado of 1: Cad:=' '+Cad; 2: Cad:=Cad+' '; end; Result:=Cad; end; memo1.lines.add (Palabra(Tabla1.FieldByName('ImporteMoneda').asfloat),16); Alguien podria auxiliarme? espero que si de antemano gracias por su atencion y espero su respuesta SALUDOS |
#9
|
||||
|
||||
Deberías haber podido tu solo... pero en fin.
Problema: si cad es de longitud mayor a LarCad, la cadena no se corta, sale entera... se debería comprobar y si es mayor, poner 3 puntos suspensivos y cortar la cadena resultante... por ejemplo Si ya has leido la Guia de estilo, habrás visto que no se debe repetir el mismo hilo varias veces, porque así te mareas tu al verlos y nosotros al responder, si no has leido la guia, deberías leerla Saludos |
#10
|
|||
|
|||
que tal lepe
antes que nada gracias por tu ayuda... en cuanto a que repeti si desgraciadamente se me fue pero no era mi intencion, procurare no volver a hacerlo y si en efectivo ya lei la guia de estilos pero de todos modos gracias por la racomendacion. me dices que debi de haber podido solo y pues antes que nada, soy un poco principiante solo tengo unosmeses programando y desgraciadamente a veces o muchas veces me falla, y si pude hacerlo de hecho solo que utilice otro metodo y fue el siguiente codigo.... Código:
While not Tabla1.Eof do begin Memo1.Lines.Add( Format('%-40s',[DM3.TTextoNombre.AsString])); Tabla1.Next end; SALUDOS¡¡¡ Y GRACIAS. |
|
|
|