PDA

Ver la Versión Completa : ayuda para insercciones en php despues de descomponer un archivo .txt


richy08
31-08-2010, 20:18:04
buenas tardes compañeros logre separar campo a campo un archivo de txt, pero ahora me veo en la problematica de las insercciones debido a la estructura que tiene el archivo la estructura mas sencilla de este archivo es como esto lo que pinto de color rojo es lo que ira en la parte del maestro de la tabla, lo de azul va en la parte del detalle, cada booking es un registro nuevo maestro-detalle.


Comp. code : PVRTRA Timon Tours Airport Transfers
Category : ALLE Return Transfers to Club Marival Resort

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

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

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

para este ejemplo no tengo problemas pero ahi partes del archivo con esta estructura


Comp. code : PVRTRA Timon Tours Airport Transfers
Category : ALLE Return Transfers to Club Marival Resort

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

como se ve los dos booking comparten esta informacion


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

es ahi el problema de que las lineas se van leyendo secuencialmente y no encuentro la forma de como parar la primera inserccion y almacenarla en alguna estructura y al detectar que que en el siguiente booking ya puedo hacer las dos insercciones recuperar la informacion y hacer las dos insercciones



gracias por cualquier comentario

movorack
31-08-2010, 20:37:30
no se... y si almacenas todo en un objeto como primer paso y luego desde el objeto haces las operaciones de inserción?

richy08
31-08-2010, 20:42:17
movorack gracias por la respuesta pero como que tipo de objeto se te ocurre??

AzidRain
31-08-2010, 20:55:26
creo que te faltan campos, lo que marcas con rojo no son candidatos a campos ya que por ejemplo, hay algunos menores que aparecen ahi y sus datos no tienen columna, eso hay que tomarlo en cuenta.

Ahora bien, tu problemas sencillo, lees todos los datos de cada reservación y los guardas momentaneamente en una estructura o archivo temporal hasta que encuentres la información que "cierra" la reservación (booking). Es decir después de leer y guardar el texto del booking esperaras encontrar como primeros caracters ya sea un "->" indicando que ahi termina ese registro con los datos de su salida y llegada o bien un "No" que indica que hay otro registro más que comparte los mismos datos.

O en términos más claros, si encuentro un "->" leo las dos líneas y grabo el registro completo con sus datos, si encuentro un "No" sigo leyendo y guardando lo que encuentre hasta que me tope con un "->", entonces guardo todo lo que haya tenido almacenado previamente y lo asocio con ese dato de salida y regreso.

richy08
31-08-2010, 21:04:17
creo que te faltan campos, lo que marcas con rojo no son candidatos a campos ya que por ejemplo, hay algunos menores que aparecen ahi y sus datos no tienen columna, eso hay que tomarlo en cuenta.

Ahora bien, tu problemas sencillo, lees todos los datos de cada reservación y los guardas momentaneamente en una estructura o archivo temporal hasta que encuentres la información que "cierra" la reservación (booking). Es decir después de leer y guardar el texto del booking esperaras encontrar como primeros caracters ya sea un "->" indicando que ahi termina ese registro con los datos de su salida y llegada o bien un "No" que indica que hay otro registro más que comparte los mismos datos.

O en términos más claros, si encuentro un "->" leo las dos líneas y grabo el registro completo con sus datos, si encuentro un "No" sigo leyendo y guardando lo que encuentre hasta que me tope con un "->", entonces guardo todo lo que haya tenido almacenado previamente y lo asocio con ese dato de salida y regreso.


hola AzidRain gracias por la respuesta., bueno lo primero que comentas del desmenbre de los datos eso ya lo tengo solucionado y pues valla lo que describes es exactamente lo que uso para hacer le desmenbre de los datos, la cuestion es que igual y no me explique bien cada booking es una inserccion en la tabla maestros, los integrates de cada booking van al detalle, valla sera algo tan facil que mi cerebro no logra hilarlo :p.

richy08
01-09-2010, 17:59:09
hola que tal ya logre hacer otra cadena basado en el archivo mencionado ahora me surge otra duda de como separar la nueva cadena, he estado viendo que la funcion explode me puede ayudar pero no logro hacer la funcion que me ayude hacer dicho proceso anexo la nueva cadena que forme.

delimitadores para la nueva cadena


#****************************************************
# ¬ "separador para el hotel" *
# # "separador del booling" *
# ; "separador del nombre" *
# [] "separador acompañantes adulto" *
# {} "separador acompañantes niños" *
# ° "separador info vuelo" *
#****************************************************



Club Marival Resort ¬ 607872# 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 -} ° 8?
Club Marival Resort ¬ 631974# 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 |° 5?


gracias por cualquier comentario :D

AzidRain
01-09-2010, 18:03:34
Es como te digo, entiendo que en efecto cada booking te va a representar un registro maestro y los pasajeros serán el detalle del booking. Con base en el archivo txt que pones, cada booking puede compartir o no datos de salida y regreso. El algoritmo que te comenté es el correcto solo tienes que desglosarlo y aplicarlo y te va a funcionar.

richy08
01-09-2010, 18:09:55
gracias azidrain en efecto ese es el algoritmo que uso si te fijas las nuevas cadenas que he formado ya estan listas para ser separadas e insertadas, ahora lo que pienso hacer es

1.- primeramente el caracter "?" me indica que ahi termina un booking, dicha cadena ya trae todos los datos (excepto la info de vuelo cuando es compartida entre varios booking).

2.- despues de que separe la cadena en un arreglo tengo que buscar el caracter "->" que me indica que el booking esta completa (no comparte informacion de vuelo con otro booking) y hacer la inserccion si comparte el booking tengo que recorrer el arreglo hasta que encuentre el caracter que me indica el vuelo insertoy tengo que regresar el arreglo para insertar los booking que quedaron atras.

pero el problema es que no tengo mucha experiencia con esas funciones bueno seguire investigando

AzidRain
01-09-2010, 19:43:24
Mmm, creo que no hay necesidad de meter todo en un array y de ahi partir, lo podrías hacer con una estructura tipo record, leer las lineas, analizarlas, guardar los datos en el record y continuar.

richy08
01-09-2010, 19:48:42
mmm valla me empiezo confundir entones cres que es mejor leer la linea e insertarla directamente a la bd??, pero como controlarias los booking que comparten informacion de vuelo??

AzidRain
01-09-2010, 20:53:51
Nooo...la linea la lees la analizas y la la guardas en una estructura,digamos un record o un array lo que mejor te acomode. Sigues leyendo hasta detectar si hay otro registro o bien encuentras los datos del vuelo. Si encuentras los datos del vuelo todo lo que tengas en tu estructura lo pasas a la BD asociándola con el vuelo correspondiente (pueden ser una o mas reservaciones). Está relativamente sencillo, no veo donde te atoras.

richy08
01-09-2010, 20:59:05
valla eso es exactemente lo que describo arriba :confused: tal ves no me explique bien, en lo que me atoro es en el manejo de arreglos jeje hace tiempo que no usaba esas estructuras de hecho nunca las he usado en php.

AzidRain
01-09-2010, 22:24:14
Ya caigo..estaba pensando en Delphi..
jiji

richy08
01-09-2010, 22:38:05
jaja si en delphi se me haria mas facil :D pero valla requerimiento es requerimiento asi es que lo tendre que sacar en php jaja