Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por danytorres
Gracias por responder Roman, observe el hilo que me indicaste pero no se adapta a lo que quiero
Yo creo que se adapta perfectamente.

Cita:
Empezado por danytorres
el problema que tengo es que los datos estan separados por coma pero el detalle es que no tienen la misma longitud
El ejemplo sirve justamente para cuando los campos no tienen longitud fija sino que están separados por un delimitador (coma en este caso).


Cita:
Empezado por danytorres
por ejemplo en la linea uno 005 es el codigo del trabajador que lo uso como referencia para buscar en la tabla
Luego de la asignación

Campos.CommaText := ArchivoCsv[i];

en Campos[0] tienes el código a buscar.

Cita:
Empezado por danytorres
el 260.00 es dato que debo guaradar en la tabla al igual que el 0.00 y el 25, como hago para determinar el tamaño y guardar corectamente el campo sin cortarlo
¿En qué parte del código piensas que se va a cortar el campo?

Igual que antes, una vez que llenas Campos en cada línea del archivo, Campos[0], Campos[1], Campos[3], etc. tendrán los valores de cada campo y con un Length(Campo[n]) calculas la longitud del valor del campo n-ésimo.

Está claro que la tabla dbase debe tener la estructura adecuada para recibir los valores pero esto ya no es una cuestión del código sino de que el archivo de texto proporcionado con los datos se ajuste al formato de la tabla.

// Saludos
Responder Con Cita
  #2  
Antiguo 20-10-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 23
AGAG4 Va por buen camino
Puedes Usar esta otra:
Ejemplo de uso:
Texto:='aaaaa,bbbbb,ccccccccc,dddddd'
For bucle:=0 to SeparaCount(Texto,',')
do ShowMessage(Separa(Texto,',',bucle) );
Código Delphi [-]
Function Separa(Linea: String; Separador: String; Indice: Integer): String;
var
   aa,ll: Integer;
   inici,conta: Integer;
begin
     ll:=length(separador);
     Result := '';
     conta:=0;
     // Treiem separadors del inici de la cadena
     if copy(linea,1,ll)=separador then linea:=copy(linea,2,length(linea));
     // Posem un separador al final si no es que hi sigui
     if not(copy(linea,length(linea)-ll+1,ll)=separador) then Linea:=Linea+Separador; 
     inici:=1;
     For aa:=1 to length(linea) do begin
         if copy(linea,aa,length(separador))=separador
         then begin
              conta:=conta+1;
              if conta=indice then begin
                 Result := copy(linea,inici,(aa)-inici);
                 Break;
              end;
              inici:=aa+ll;
         end;
     end;
end;
Function SeparaCount(Linea: String; Separador: String): Integer;
var
   aa: Integer;
begin
     if EsVuit(linea) then result:=0 else result:=1;
     For aa:=2 to length(linea)-1
     do if separador=copy(linea,aa,length(separador)) then result:=result+1;
end;
Saludos.
Responder Con Cita
  #3  
Antiguo 20-10-2004
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 24
danytorres Va por buen camino
Unhappy

Amigo roman necesito de tu ayuda, estoy utilizando el codigo que me diste lo adapte a mis necesidades pero me da un error que espero tu me puedas ayudar

Code:
______________________________________________________________
procedure TForm1.Button1Click(Sender: TObject);
Var
ArchivoCsv, Campos: TStringList;
I, J: Integer;

begin
ArchivoCsv := TStringList.Create;
Campos := TStringList.Create;

try
ArchivoCsv.LoadFromFile('c:\HV.txt');

for I := 0 to ArchivoCsv.Count -1 do
begin
Campos.Clear;
Campos.CommaText := ArchivoCsv[i];

for J := 0 to DataModule2.Table1.FieldCount -1 do
begin

DataModule2.Table1.Locate('Ficha',Campos[0],[]);

DataModule2.Table1.Edit;
DataModule2.Table1.Fields[1].Value := Campos[1];
DataModule2.Table1.Fields[2].Value := Campos[2];
DataModule2.Table1.Post;

end;

end;
finally
ArchivoCsv.Free;
Campos.Free;
end;
end;
_________________________________________________________

cuando corro el procedimiento me da este error "List index of bound (3)"

como hago para que no mede este error. Ayuda

__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #4  
Antiguo 21-10-2004
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 24
danytorres Va por buen camino
Question

Buenos dias amigos tengo un pequeño problema estoy utilizando el codigo que me dio el amigo Roman que me a servido de mucha ayuda pero me da un error cuando corro el procedimiento me da este error "List index of bound (0)", que debo hacer para que no me siga dando este error. Agradesco la ayuda amigos.

El codigo que utilizo es el siguente
____________________________________________________________
procedure TForm1.Button1Click(Sender: TObject);
Var
ArchivoCsv, Campos: TStringList;
I, J: Integer;

begin
ArchivoCsv := TStringList.Create;
Campos := TStringList.Create;

try
ArchivoCsv.LoadFromFile('c:\HV.txt');

for I := 0 to ArchivoCsv.Count -1 do
begin
Campos.Clear;
Campos.CommaText := ArchivoCsv[i];

for J := 0 to DataModule2.Table1.FieldCount -1 do
begin

DataModule2.Table1.Locate('Ficha',Campos[0],[]);

DataModule2.Table1.Edit;
DataModule2.Table1.Fields[1].Value := Campos[1];
DataModule2.Table1.Fields[2].Value := Campos[2];
DataModule2.Table1.Post;

end;

end;
finally
ArchivoCsv.Free;
Campos.Free;
end;
end;
_______________________________________________________


Que hago para corregirlo.????
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #5  
Antiguo 21-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Supongo que el error te lo marca en la línea

DataModule2.Table1.Locate('Ficha',Campos[0],[]);

y diera la impresión de que la lista Campos está vacía. Revisa el formato del archivo de texto pues es posible que tenga algunas líneas en blanco.

// Saludos
Responder Con Cita
  #6  
Antiguo 21-10-2004
danytorres danytorres is offline
Miembro
 
Registrado: may 2003
Ubicación: Venezuela. Edo Carabobo
Posts: 361
Poder: 24
danytorres Va por buen camino
Talking

Gracias Roman por ayudarme tienes razon la ultima fila del TXT estaba en blanco y me daba ese error, este es el codigo que utilizo para realizar una busqueda de un campo que se encuentra en el txt y es buscado en una tabla e insertando los campos separados por coma en la misma tabla;

Code:
_______________________________________________________________
procedure TForm1.BitBtn3Click(Sender: TObject);
Var
ArchivoCsv, Campos: TStringList;
I, J: Integer;

begin
ArchivoCsv := TStringList.Create;
Campos := TStringList.Create;

try
ArchivoCsv.LoadFromFile('c:\HV.txt');

for I := 0 to ArchivoCsv.Count -1 do
begin
Campos.Clear;
Campos.CommaText := ArchivoCsv[i];


If DataModule2.Table1.Locate('Ficha',Campos[0],[locaseinsensitive,lopartialkey])then
begin
DataModule2.Table1.Edit;
DataModule2.Table1.Fields[1].Value := Campos[1];
DataModule2.Table1.Fields[2].Value := Campos[2];
DataModule2.Table1.Post;
end;


end;
finally
ArchivoCsv.Free;
Campos.Free;
end;
end;
_______________________________________________________
Gracia a todos;
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #7  
Antiguo 27-10-2004
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 22
JuanBCT Va por buen camino
Buenos días...... tengo que hacer algo muy parecido a lo de danytorres, por lo que me pareció innecesario comenzar un nuevo hilo.....
También tengo que pasar a una tabla datos de un TXT, y puse en práctica la técnica de separar los campos aquí explicada, pero tengo un problemita...

Supongamos que tengo esta línea:
P304 004/02500002/60/ 00000000364AAAA0000001LOMO ARCHIV. MANT.MIL.
Yo digo que pase campos[3] al campo descripción de mi tabla, y lo pasa bien.

Pero en el caso de esta otra línea...
P304 N/ 017125/3 / 00000000074AAAA0000010FUSIBLE

Como hay espacios en el 2do campo, la descripción ya no es campos[3]; por lo que pasa "/".... lo que sí se es que, con espacio o sin espacio, cada campo está en la misma posición dentro de la línea.

Mi pregunta es: como hago para expresar "de la posición 48 a la 73 es el campo descripción, haya espacios o no"?

Muchas gracias desde ya, espero haberme explicado bien.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:52:29.


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