![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
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...... |
|
#3
|
||||
|
||||
|
Cita:
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 |
|
#4
|
||||
|
||||
|
Roman:
Me anduvo de maravilla, muchas gracias por tu ayuda... saludos! |
|
#5
|
|||
|
|||
|
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... |
|
#6
|
||||
|
||||
|
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:
![]() Sugiero más claridad en las preguntas si quieres claridad en las respuestas ![]() |
|
#7
|
|||
|
|||
|
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|