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
|
|||
|
|||
a ver
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; //este es el boton que manda el texto procedure TForm1.BitBtn3Click(Sender: TObject); begin Memo1.Lines.Clear; while not Table2.Eof do begin Memo1.Lines.Add(Table2.FieldByName('ID_Cuenta').AsString+ Table2.FieldByName('EstadoMovto').AsString+ Palabra(Table2.FieldByName('ImporteMonedaCuenta').AsString,16)+ Table2.FieldByName('NumeroCheque').AsString); Table2.Next; end; Memo1.Lines.SaveToFile('C:\TEXTO.TXT'); end; tengo que aclarar que que esta tabla la lleno a partir de otra tabla es decir la lleno a partir de otra tabla no habra forma de que al moemto de copiar a la tabla de donde voy a sacar el texto se copie el campo con los espacios ? no se y es que de internet descargue un componente que me pasa la bd a un texto pero el preblema es que el campo de importe no me aparece con los campos en blanco y en las propiedades del componente no se ahora si sees mejor con el metodo que me estas pasando entonces lo cambio porque con este metodo que me estas pasando estoy haciendo una aplicacion de prueba . muchas gracias y disculpa si te quito el tiempo |
#9
|
|||
|
|||
Pero compadre
Con razon se cicla ¡¡¡
ahora si que la regaste mira Código:
Case Lado Of 1: Cad:=''+Cad; 2: Cad:=Cad+''; End; Código:
Case Lado Of 1: Cad:=' '+Cad; 2: Cad:=Cad+' '; //<-- osease es un espacio ' ' no '' //osease '_' no '' donde _es espacio vacio 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' |
#10
|
|||
|
|||
jajajaj
oye pues muchas gracias en verdad que si que la regue
ya se que vas a decir que me estoy pasando pero ya me hace el texto pero solo me copia un campo como le hago para que me copie todos los campos de la tabla? disculpa las molestias (y que te este chin#$&&# tanto ), pero como podras ver soy un poco nuevo en esto de la programacion. muchas gracias |
#11
|
|||
|
|||
Haber como..
como que nada mas te copia un campo ???
__________________
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' |
#12
|
|||
|
|||
que crees
que crees que ya vi lo que hace en verdad
cuando le doy clic para que mande el texto solo me manda un registro pero si la cierro y vuelvo a correrla y le doy clic al boton y ya me copia todos los campos |
#13
|
|||
|
|||
Ahhh.. entonces..
Entonces despues..
Código:
. . Memo1.lines.Clear; //pones Table2.First;
__________________
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' |
#14
|
|||
|
|||
Gracias
Que Tal Gracias Por Tu Respuesta¡
Ya No Pude Estar Conectado Pero Si Lo Pude Arreglar. Oye Una Pregunta Hay Alguna Forma De Que El Campo De Importe Se Puda Copiar Con Decimales Que Sean .00 Por Ejemplo 1874.00 Porque Los Quetraen Numero 1874.14 Por Ejmeplo Si Los Pasa Pero Si Es Un Importe Entero No Pone Los .00 Como Decimales Y Si Le He Buscado Si La Funcion Se Puede Modificar Pero No Le He Encontrado Crees Que Me Puedas Aytudar? Gracias Por Tu Gran Ayuda |
#15
|
|||
|
|||
En ..
Código:
Palabra(Table2.FieldByName('ImporteMonedaCuenta').AsString,16) Código:
Palabra(FormatFloat('#,##0.00',Table2.FieldByName('ImporteMonedaCuenta').AsFloat),16)
__________________
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' |
#16
|
|||
|
|||
Gracias¡
hola que tal nuevamente
en verdad te quiero agrdecer la ayuda que me has brindado espero poder algun dia poder ayudarte y ayudarlea otros nunca habia entrado en un foro en donde te tendieran la mano tan rapido. hasta pronto y gracias por todo. att jorge saludos |
#17
|
||||
|
||||
Hola jovehe. Me alegra que hayas encontrado apoyo en el club. Te recomiendo la lectura de la guia de estilo para una mejor convivencia en este lugar.
En especial que pongas atención a la sección que trata de los títulos de los mensajes, pues no es recomendable uno como el que has usado en esta ocasión. Principalmente porque puede entorpecer el proceso de búsqueda de otro forista con un problema similar al tuyo. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#18
|
|||
|
|||
tienes razon
que tal jachguate
tienes razon como que el titulo del hilo que abri no sirve para nada y solo confundo a los foristas me disculpo y prometo la proxima vez poner un titulo coherente. hasta luego y saludos¡¡ |
#19
|
|||
|
|||
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 |
#20
|
||||
|
||||
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 |
|
|
|