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 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
  #2  
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
Perdón, acabo de comprobar algo.... ni siquiera el primero pasa bien, pues sólo pasa la cadena ARCHIV.
Bueno, de todas formas, definiéndolo de la manera que pregunto resolvería la cuestión......
Responder Con Cita
  #3  
Antiguo 27-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 JuanBCT
Mi pregunta es: como hago para expresar "de la posición 48 a la 73 es el campo descripción, haya espacios o no"?
Pero en tu caso no se trata de archivos donde los valores estén separados por un delimitador sino que se trata de campos de ancho fijo. En este caso puedes extraer cada campo con la función Copy.

Código Delphi [-]
var
  Linea: String;
  I: Integer;
 
begin
  for I := 0 to ArchivoCsv.Count - 1 do
  begin
    Linea := ArchivoCsv[i];
    ...
    Campo := Copy(Linea, 48, 73 - 48);
    ...
  end;

Es decir, lo que tú conoces es la posición en que inicia cada campo (offset) y su longitud. Copy(Linea, Offset, Longitud) devuelve la parte de Linea que comienza en el caracter Offset y tiene longitud Longitud.

// Saludos
Responder Con Cita
  #4  
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
Roman:
Me anduvo de maravilla, muchas gracias por tu ayuda... saludos!
Responder Con Cita
  #5  
Antiguo 29-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

buenos dias amigos del foro, pense que tenia la solucion pero me da problemas este codigo

Code:
_______________________________________________________________
procedure TForm1.BitBtn2Click(Sender: TObject);
Var
Archivo, Campos: TStringList;
I, J: Integer;
begin
Archivo:= TStringList.Create;
Campos:= TStringList.Create;

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


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


If DataModule2.Table2.Locate('CODEMP',Campos[0],[]) then
begin
DataModule2.Table2.Edit;
DataModule2.Table2Z001.Value:= strtofloat(Campos[1]);
DataModule2.Table2.Post;
end;

end;

finally
Archivo.Free;
Campos.Free;
end;
_____________________________________________________

el campos[0] me trae un valor pequeño el cual busca en la table, cuando corro el procedimiento y desavilito el contenido del if no se detiene el proceso termina la busqueda bien con el locate pero el problema es cuando avilito la edicion y guardado el proceso de queda guindad. que puede ser???
__________________
____________________________
Un saludo a todos...
Responder Con Cita
  #6  
Antiguo 30-10-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Hombre, date cuenta que no haces ningun tipo de comprobación, así el código es muy, pero que muy propenso a fallos y dolores de cabezas.

La única comprobación que haces es enel bucle for (no entra si está vacio el archivo)

Despues de asignar el CommaText, deberías poner condicionales por si se encuentra con una linea en blanco, o por si el segundo campo no tiene dato. Si no me equivoco, intentar convertir la cadena vacia '' a numero flotante te debe dar una excepción.

Si el locate no encuentra al empleado, ni si quiera muestra un mensaje por pantalla, así que se está comiendo un registro y ni si quiera te enteras.

Cita:
el campos[0] me trae un valor pequeño el cual busca en la table, cuando corro el procedimiento y desavilito el contenido del if no se detiene el proceso termina la busqueda bien con el locate pero el problema es cuando avilito la edicion y guardado el proceso de queda guindad. que puede ser???
Lo he leido 3 veces y no me acabo de enterar de qué es lo que pasa, ni de lo que estas intentanto hacer

Sugiero más claridad en las preguntas si quieres claridad en las respuestas
Responder Con Cita
  #7  
Antiguo 08-02-2006
Chalo78 Chalo78 is offline
Miembro
 
Registrado: ene 2006
Posts: 11
Poder: 0
Chalo78 Va por buen camino
Exclamation

Y como hacer lo mismo cuando las líneas están separadas por Tabuladores y comas???
LLevo casi 3 días tratando de hacer esto y aun cuando sé que es sencillo, por alguna razón no doy con el problema.
A modo de ejemplo, las lineas con la cadena de caracteres es la siguiente:

31/01/2006 12:06:38 $GPXTE,V,V,,,N,S*43
31/01/2006 12:06:38 $PGRME,15.0,M,22.5,M,27.0,M*1A
31/01/2006 12:06:38 $PGRMZ,6,f,3*1D
31/01/2006 12:06:38 $PGRMM,WGS 84*06
31/01/2006 12:06:38 $SDDBT,29.8,f,9.09,M,4.97,F*3F
31/01/2006 12:06:38 $SDDPT,9.09,0.00*57

En donde el valor que necesito rescatar es el que viene después de los caracteres "$SDDPT,". Es un archivo de texto que está cambiando cada varias décimas de segundos, por lo que es un archivo dinámico.
Lo único que me interesa, es capatar el dato que viene después de "$SDDPT,", ya sea en una DB o en un TLabel, me da igual.
Si alguien tiene la solución a mi problema, lo agradeceré. Demás está decir que ya probé los codigos de Delphi que están en este Hilo y no me funcionaron.
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 13:28:17.


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