Foros del Web » Programando para Internet » PHP »

Leer archivo de texto por partes

Estas en el tema de Leer archivo de texto por partes en el foro de PHP en Foros del Web. Quisiera que alguien me pudiera guiar, en lo que necesito hacer tengo un archivo de texto que es mas o menos de la siguiente forma, ...
  #1 (permalink)  
Antiguo 08/02/2012, 15:55
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Leer archivo de texto por partes

Quisiera que alguien me pudiera guiar, en lo que necesito hacer tengo un archivo de texto que es mas o menos de la siguiente forma,


01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)
01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
01/06/2012 00:01:20 - PDT::Terminal_impl-- cbi_key: 00:00:41:36:02:38
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - .. Box = 00:00:41:36:02:38
01/06/2012 00:01:20 - .. Description = saga
01/06/2012 00:01:20 - .. BillingCode = exia
01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)

01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)
01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
01/06/2012 00:01:20 - PDT::Terminal_impl-- cbi_key: 00:00:41:36:02:38
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - .. Box = 00:00:41:36:02:38
01/06/2012 00:01:20 - .. Description = saga
01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)
.....
...
..
y asi sucesivamente, lo que necesito es leer sacar alguna informacion y guardarla en una base de datos, todo eso lo logro hacer a la perfeccion, pero lo que ocurre es que tengo que identificar cuando empieza y termina una parte del archivo,

yo se que empieza y termina con la palabra TerminalFactory find por que en algunas partes no aparece informacion que en otro si aparece, entonces dejar ese dato como null en la base de datos

en resumen lo que necesito hacer es leer un trozo de texto, sacar la informacion que necesito de ese trozo, y luego continuar leyendo y sacar lo que necesito luego seguir leyendo....

si me pudieron guiar o ayudar un poco se los agradeceria
  #2 (permalink)  
Antiguo 08/02/2012, 21:57
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Leer archivo de texto por partes

Hola veras yo te recomiendo que utilizes fopen + fgets para ir obteniendo linea a linea,

crea una condicional donde utilizado preg_match y una expresión regular del tipo sencillo ("/TerminalFactory/") puedas verificar que exista o no la existencia del patrón TerminalFactory en cada una de las lineas, y hacer lo que deseas.

saludos
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #3 (permalink)  
Antiguo 09/02/2012, 10:09
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Leer archivo de texto por partes

Leer el archivo de texto linea por linea lo puedo hacer, lo que no puedo es leer desde un data hasta el otro leer todo lo que esta adentro por ejemplo tengo


01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)
01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
01/06/2012 00:01:20 - PDT::Terminal_impl-- cbi_key: 00:00:41:36:02:38
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - .. Box = 00:00:41:36:02:38
01/06/2012 00:01:20 - .. Description = saga
01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)

y leer desde terminalFactory find hasta terminalFactory find

osea obtener:

01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
01/06/2012 00:01:20 - PDT::Terminal_impl-- cbi_key: 00:00:41:36:02:38
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - provisioning purchase
01/06/2012 00:01:20 - .. Box = 00:00:41:36:02:38
01/06/2012 00:01:20 - .. Description = saga

intente hacerlo asi, pero no entiendo mucho preg_match

$txt2= '01/01/2012 02:29:51/TerminalFactory/find (00:00:02:3F:E6:46)
01/01/2012 02:29:51 - CBIEquipment--equipmentKey: 00:00:02:3F:E6:46
01/01/2012 02:29:51 - PDT::Terminal_impl-- cbi_key: 00:00:02:3F:E6:46';

preg_match_all("/\01/01/2012\"\/02:29:51\/TerminalFactory\/(\w+)/", $txt2, $match);

echo "<pre>";
print_r($match[1]);
echo "</pre>";


espero me puedas ayudar
  #4 (permalink)  
Antiguo 09/02/2012, 10:16
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Leer archivo de texto por partes

Código PHP:
Ver original
  1. $cadena = "01/06/2012 00:01:20 - TerminalFactory find (00:00:41:36:02:38)";
  2.  
  3. if(preg_match("/TerminalFactory/", $cadena)){
  4.     echo "si";
  5. } else {
  6.     echo "no";
  7. }

tu puedes hacer algo como esto

- Enceuntras el primer terminalfactory y seteas auna variable a algo a 1 por ejemplo, luego cuando la vuelvas a encontrar la seteas de nuevo a 0, y asi tendras una relacion entre principio var = 1 y fin var = 0

Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #5 (permalink)  
Antiguo 09/02/2012, 10:48
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Leer archivo de texto por partes

Yo también pensaba como iovan, tal vez puedas mejorar algo así:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $arr = array();
  4.  
  5. $y = 1;
  6. $z = 0;
  7.  
  8. $f = file('test.txt');
  9.  
  10. foreach ($f as $l) {
  11.     if (strstr($l, 'TerminalFactory find')) {
  12.         if ($y == 2) {
  13.            $z++;
  14.         }
  15.         $y++;
  16.     } else {
  17.         $arr[$z][] = $l;
  18.     }
  19. }
  20.  
  21. echo '<pre>';
  22. print_r($arr);
  23. echo '</pre>';

Espero que te sirva, saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #6 (permalink)  
Antiguo 16/02/2012, 15:28
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: Leer archivo de texto por partes

andresdzphp me sirvio mucho tu codigo, osea enrealidad eso es lo que necesito, lo he estado mirando entendiendo y modificando pero no logro que me genere mas arrays, lo que me entrega es

Array
(
[0] => Array
(

Datos desde TerminalFactory find hasta el otro TerminalFactory find

)
[1] => Array
(

Todo el resto del archivo

)


El problema es que no me sigue generando arrays no logro entender como seguir haciendo arrays de los bloques de informacion
  #7 (permalink)  
Antiguo 16/02/2012, 15:39
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Leer archivo de texto por partes

No me había fijado, me faltaba reiniciar una variable para que siga generando array:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $arr = array();
  4.  
  5. $y = 1;
  6. $z = 0;
  7.  
  8. $f = file('test.txt');
  9.  
  10. foreach ($f as $l) {
  11.     if (strstr($l, 'TerminalFactory find')) {
  12.         if ($y == 2) {
  13.            $z++;
  14.            $y = 1;
  15.         }
  16.         $y++;
  17.     } else {
  18.         $arr[$z][] = $l;
  19.     }
  20. }
  21.  
  22. echo '<pre>';
  23. echo '</pre>';

Si el contenido del txt es:

Código PHP:
Ver original
  1. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)
  2. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  3. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  4. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)
  5. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)
  6. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  7. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  8. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)
  9. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)
  10. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  11. 01/06/2012 00:01:20 -   CBIEquipment--equipmentKey: 00:00:41:36:02:38
  12. 01/06/2012 00:01:20 -   TerminalFactory find (00:00:41:36:02:38)

El resultado es:


Cita:
Array
(
[0] => Array
(
[0] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
[1] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38

)

[1] => Array
(
[0] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
[1] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38

)

[2] => Array
(
[0] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38
[1] => 01/06/2012 00:01:20 - CBIEquipment--equipmentKey: 00:00:41:36:02:38

)
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 16/02/2012, 15:57
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Leer archivo de texto por partes

Eres un genio, era lo que necesitaba, pero no se me ocurria como hacerlo, ahora podre manejar los valores de cada bloque de datos, muchas gracias
  #9 (permalink)  
Antiguo 17/02/2012, 08:59
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago
Mensajes: 32
Antigüedad: 12 años, 3 meses
Puntos: 0
Pregunta Respuesta: Leer archivo de texto por partes

Tengo otra duda espero me puedan seguir ayudando

al codigo de mas arriba le agregue este codigo

Código PHP:
$i;
$searchthis "CBIEquipment"
$matchesg= array(); 
for (
$i 0$i count($arr[1]); $i++) {
    if (
strpos($arr[1][$i], $searchthis) !== FALSE)
$matchesg[] = $arr[1][$i];
}
echo 
substr($matchesg[0], 74); 
lo que hace es segun la palabra si lo encuentra en un subarray me devuelve la linea completa para poder sacar lo que necesito, bueno esto lo hago por que los bloques de informacion o los subarray que me genera no tienen un patron igual, son todos distintos por lo cual no puedo buscar mi informacion por el indice, este codigo me funciona bien, pero tendre que hacerlo para cada palabra o linea que quiera obtener

Saben de alguna forma optimizar la busqueda en el array

Etiquetas: partes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:10.