Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   problema (https://www.clubdelphi.com/foros/showthread.php?t=10262)

jovehe 14-05-2004 00:36:01

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.

sanxpue 14-05-2004 01:54:35

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;

Weno con esa funcion ahora la aplicamos cuando bajas tus datos

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;

eso es todo no hay mas (weno si.. si vas adorando la funcion puedes decirle que te corte la linea y muchas cositas mas, ojo en el uso de Const, esa es otra historia.. :D

jovehe 14-05-2004 20:13:46

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 ¡

eduarcol 14-05-2004 20:18:34

Si te fijas bien en la declaracion de los parametros de la funcion veras el error...

sanxpue 14-05-2004 20:20:06

Es cierto jejeje
 
es que :

Código:

Function Palabra(Cad : String;LarCad : String;Const Lado : Byte = 1) : String;
No es asi je, es
Código:

Function Palabra(Cad : String;LarCad : Integer;Const Lado : Byte = 1) : String;
:D
Todo por creer que tenemos un compilador interno en nosotros jejejeje como RoboCop jeee

jovehe 14-05-2004 21:04:33

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

sanxpue 14-05-2004 21:10:30

Haber
 
Haber escribe lo que pusiste en el While y como escribiste la funcion?? :confused:

jovehe 14-05-2004 21:39:11

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

sanxpue 14-05-2004 21:53:42

Pero compadre
 
Con razon se cicla ¡¡¡
ahora si que la regaste mira

Código:

Case Lado Of
  1: Cad:=''+Cad;
  2: Cad:=Cad+'';
End;

no es asi si no

Código:

Case Lado Of
  1: Cad:=' '+Cad;
  2: Cad:=Cad+' '; //<-- osease es un espacio ' ' no ''
                        //osease '_' no '' donde  _es espacio vacio
End

Ojo mucho ojo y cuentaselo al que mas confianza tengas :D

jovehe 14-05-2004 22:25:38

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

sanxpue 14-05-2004 22:30:35

Haber como..
 
como que nada mas te copia un campo ??? :confused:

jovehe 14-05-2004 22:31:29

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

sanxpue 14-05-2004 22:34:50

Ahhh.. entonces..
 
Entonces despues..

Código:

.
.
Memo1.lines.Clear;
//pones
Table2.First;


jovehe 19-05-2004 22:04:25

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

sanxpue 19-05-2004 23:02:48

En ..
 
Código:

Palabra(Table2.FieldByName('ImporteMonedaCuenta').AsString,16)
Escribe

Código:

Palabra(FormatFloat('#,##0.00',Table2.FieldByName('ImporteMonedaCuenta').AsFloat),16)
y ya con eso :confused:

jovehe 20-05-2004 06:16:15

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

jachguate 20-05-2004 09:11:13

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.

;)

jovehe 20-05-2004 17:50:29

tienes razon
 
que tal jachguate
tienes razon como que el titulo del hilo que abri no sirve para nada:rolleyes: y solo confundo a los foristas me disculpo y prometo la proxima vez poner un titulo coherente.

hasta luego y saludos¡¡

jovehe 01-12-2004 23:48:04

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);

el caso es que esto hace que me ponga el importe _________100.00 con espacios en la izquierda solo que tengo un problema quiero poner espacios a la derecha pero de un campo string quiero poner un nombre y que quede de tamaño 40 no importando si el nombre esta muy corto pero quiero justificarlo con espacios a la derecha no a la izquierda.

Alguien podria auxiliarme?

espero que si
de antemano gracias por su atencion y espero su respuesta

SALUDOS

Lepe 02-12-2004 09:09:57

Deberías haber podido tu solo... pero en fin.
Código Delphi [-]
Function Palabra(const Cad : String; LarCad : Integer;Const izq :Boolean = True ) : String; 
var i:integer;
begin 
  Result := cad;

for i:=length(Result) to LarCard do
if izq then 
 Result :='  '+Result;
else
 Result :=Result +'  ';
 end; 

end;

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 :p

Saludos


La franja horaria es GMT +2. Ahora son las 10:07:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi