Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   extraer informacion de un archivo .txt (https://www.clubdelphi.com/foros/showthread.php?t=69347)

richy08 12-08-2010 01:03:32

extraer informacion de un archivo .txt
 
buenas tardes compañeros me han pedido que programe un algoritmo que sea capaz de separar ciertos campos de un arcivo .txt los cuales seran insertados en una bd, he estado viendo ejemplos de como hacerlo, pero creo que la estructura de este archivo es un poco mas compleja anexo un fragmento

Código:

To:    Timon Tours                                    Printed on 09-AUG-2010
        MASTIL NO.2 INT 2 XXXXXXXXXXXX                          23:46:15
        PUERTO VALLARTA, JALISCO, MX
        48351
        Fax :
        Email  : XXXXXX
 From:  XXXXXXXXXXXXX
        22 Aerial Place NE
        XXXXXXXXXXXXXXX
        T2E 3J1    Fax : XXXXXXXXX


                        Supplier daily activity report
 Destination : PVR
  COMPONENT ADDED ------------------------------------------------------------
  ----------------------------------------------------------------------------

 Comp. code : PVRTRA  XXXXXXXXXXXXXXXXXXXXX
 Category  : ALLE    Return Transfers to XXXXXXXXXXXXXXXX

 From date :  14-AUG-2010

 No          Booking            Conf Pax name
  1        607872(2)                  MR  NURANEY, NIZAR
                                      MRS  NURANEY, SALMA
                                      MS  NURANEY, NAVIDA
                                      MR  NGUYEN, KHANG QUOC
                                      MRS  VELJI, ZOREEN
                                      MR  VELJI, MEBS
    + CHLD                            MSTR VELJI, IMRAN                  Age:7
    + CHLD                            MISS VELJI, JAIDE                  Age:4

 No          Booking            Conf Pax name
  2        631974(6)                  MR  OGBEBOR, JOSEPH
                                      MRS  OGBEBOR, OYINDAMOLA
    + CHLD                            MSTR OGBEBOR, PAUL                Age:10
    + CHLD                            MSTR OGBEBOR, JOSEPH OSASUEHI      Age:8
    + CHLD                            MISS OGBEBOR, GABRIELLE            Age:6

    -> 7 PF 14-AUG-10 WS2306 YEG/PVR  DEP 10:45 ARR 16:46
      8 PF 21-AUG-10 WS2307 PVR/YEG  DEP 17:35 ARR 21:36
  ----------------------------------------------------------------------------

alguna idea de como empezar a programarlo, gracias por cualquier comentario

Neftali [Germán.Estévez] 12-08-2010 12:44:08

Si los ficheros son siempre de estructura similar, deberás intentar acceder por las zonas que conoces; Es decir buscar aquellas partes de texto que están cerca de lo que necesitas obtener y que siempre son iguales:

* To:
* From:
* Destination :
...

richy08 12-08-2010 16:44:50

gracias neftali por el tip intentare programarlo y comento.

cloayza 12-08-2010 17:55:05

NO ME FIJE QUE ERA PARA PHP... pero creo que la idea podria servir...

En algun momento de mi vida tube que realizar algo parecido pero en clipper...

Como lo hice en su momento...

1) Defini una tabla que contenia
i) Fila_Del_Campo
ii) Columna de Inicio del Campo
ii) Largo del campo
ii) Tipo del campo
ii) Nombre_Campo
Deberia quedar asi:
Suponiendo que se estan leyendo esto:
Cita:

To: Timon Tours Printed on 09-AUG-2010
MASTIL NO.2 INT 2 XXXXXXXXXXXX 23:46:15
Fila-Columna-Largo-Tipo-Nombre
-------------------------------
2 27 12 TITULO

2) Luego puedes cargar el contenido en un TStringsList y proceder a realizar la busqueda de los datos que se definieron.

Como lo haria yo
Código Delphi [-]

   Lineas.LoadFromFile(fArchivo);
   
   While Not Formato.Eof Do
   begin
          strLinea:=Lineas[formato.fieldbyname('FILA').AsInteger];
          Valor:=Copy(strLinea, Formato.FieldByName('COLUMNA').AsInteger,Formato.FieldByName('LARGO').AsInteger)
         {En valor debe estar el contenido que requieres...}
          Formato.next;
          
   End;



Espero haberte ayudado...

richy08 12-08-2010 18:05:33

gracias cloayza por el comentario pero no se si funcione por que el archivo puede tener n veces las cabeceras y los datos, creo que no podria controlarlo especificando la fila y columna por que las filas, columnas se seguirian aumentando segun el archivo que reciba por lo cual al leer el archivo n+1 ya no coincidirian, a menos que lleve el control de cuantos row he leido (datos de las personas que llegan) y eso se lo aumente al row que tengo guardado en la bd los datos lo probare para verque tal funciona :D

cloayza 12-08-2010 18:56:37

Creo que podrias identificar cuando comienza una nueva cabezera y aplicar el algorimo en cada ocacion...

Si todos las cabezeras comienzan con "To:" o buscas un texto unico...Podrias tratar cada bloque de datos como un si fuera un solo archivo...

Saludos

richy08 23-08-2010 20:11:47

hola por fin emepezare a programar esto, saben me he fijado que los encabezados como To:, Printed on, Fax :, Email : etc.... siempre estan en la misma posicion pero no encuentro que funciones de php son las que debo de utilizar para posicionarme sobre estas palabras sabras de alguna guia donde pueda verlas


saludos.

elarys 15-10-2010 16:07:33

yo hice algo parecido con archivos de texto de este tipo en donde respetan un orden y entonces lo tome como si estuviera leyendo una matriz, leia linea por linea y lo iva despedazando, sabiendo que desde el primer caracter al 4 por ejemplo tenia ciertos datos, del 5 al 10 otro dato y asi,

la linea 1 tenia x datos
la linea 2 otros datos y asi.

Y creo que iva utilizando copy en delphi... en php ni idea si abra alguna funcion como esta.

richy08 16-10-2010 06:17:32

gracias elarys ya hace tiempo que solucione el problema con funciones de cadena saludos


La franja horaria es GMT +2. Ahora son las 13:50:27.

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