Foros del Web » Programando para Internet » PHP »

buscar un dato en un txt

Estas en el tema de buscar un dato en un txt en el foro de PHP en Foros del Web. Buenas tardes a todos, Les escribo para ver si me pueden dar una mano en esta duda que tengo. Hice un script el cual se ...
  #1 (permalink)  
Antiguo 29/04/2010, 15:29
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años
Puntos: 0
buscar un dato en un txt

Buenas tardes a todos,

Les escribo para ver si me pueden dar una mano en esta duda que tengo.

Hice un script el cual se conecta a la tabla empleado y obtiene el Codigo del carnet de todos los empleados y mediante un while busca en txt este valor y la que encuentre (el resultado siempre arroja 1, porque tiene un solo numero carnet) lo debe mostrar por pantalla.

acontinuacion muestro el contenido del txt, fijese que el valor a buscar es el numero que sale despues de "TRABAJADOR: "

Código HTML:
RECIBO DE PAGO PERIODO: 01/04/2010 AL: 30/04/2010
8 2010 COMPAÑIA: EUROCIENCIA, C.A. FECHA DE PAGO 15/04/2010 TRABAJADOR: 1781 PEPE JUAN NRO. CEDULA ID: NIDAD ORGANIZATIVA: GERENCIA DE SISTEMAS CARGO: ANALISTA DE CNC EN SISTEMAS FECHA DE INGRESO: 06/02/2008 CUENTA NRO.: 0060290202 SALARIO DIARIO 15,23 INSTITUCION: BANCO VENEZOLANO DE CREDITO
17153567
CODIGO CONCEPTO 1000 5000 5010 5020 5290 5500 SALARIO SEGURO SOCIAL OBLIGATORIO LEY REGIMEN PREST. DE EMPLEO LEY PRESTAC VIVIENDA Y HABIT DCTO POR COMPRA DE PRODUCTOS DCTO. COMPLEMENTO DEL MES
CANTIDAD 30,000 4,000 4,000 30,000 0,000 30,000
 
de acuerdo con el detalle anterior y firmo en señal de conformidad.
El concepto de Reembolso de Gastos corresponde a reintegro por gastos contra facturas presentadas por usted incurridas en el mes anterior.
Firma del Trabajador ACUMULADOS Devengado a la fecha: Prestaciones Sociales: Intereses s/Prest. Soc: 9.426,30 10.978,35 1.478,27 Vacaciones y Bono Vacacional Días pendientes por disfrutar: Días pendientes de pago: Días pendientes Bono Vacacional: 0,00 -14,00 -6,52
 


Y este es mi codigo que busca el valor del carnet en ese archivo.txt:

Código:
<?
$n=0;
try {
$dbh = new PDO("oci:dbname=SPI;host=1.0.0.202;port=1521","infocent","infocent");
} catch (PDOException $e) {
echo "Error: ". $e->getMessage();
exit;
}
$query = "SELECT FICTRA FROM NMM001";
$stmt = $dbh->prepare($query);
if ($stmt->execute()) {
$ficheros_nomina = array('us05351.txt');
while ($row = $stmt->fetch()) {
      $carnet= $row['FICTRA'];
      $fictra = 1;
      foreach($ficheros_nomina as $fichero_nomina)
      {
           $contenido_fichero = file_get_contents($fichero_nomina);
           preg_match_all("(["TRABAJADOR"]+:[$carnet]+)", $contenido_fichero);
 
           foreach ($resultado[0] as $id)
          {
 
              echo $id;
              $fictra++;
           } 
      }
 
}
} 
?>

el problema me da es con la sentencia preg_match_all, como hago para que busque: TRABAJADOR: + "el codigo del carnet que devuelve el sql"

como algo asi: TRABAJADOR: 1521 y si coincide que muestre el numero de carnet
  #2 (permalink)  
Antiguo 30/04/2010, 07:55
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años
Puntos: 0
Respuesta: buscar un dato en un txt

Buen dia a todos,

Hoy nuevamente revise la sintaxis preg_match_all

Código PHP:
preg_match_all(("(("^[?:TRABAJADOR]:")\S).[0-9]"), $contenido_fichero. , $resultado); 
realmente en el texto, quiero buscar los digitos que venga despues de "TRABAJADOR:" pero me da el siguiente error:
Código HTML:
Parse error: syntax error, unexpected '[' in C:\AppServ\www\nomina\leertxt.php on line 28
que es casualmente con esta linea. Esta bien la sintaxis para buscar segun este valor?


Acontinuacion muestro el txt:
Código HTML:
RECIBO DE PAGO PERIODO: 01/04/2010 AL: 30/04/2010
8 2010 COMPAÑIA: EUROCIENCIA, C.A. FECHA DE PAGO 15/04/2010 TRABAJADOR: 1292 PATRICIA BERENITZE BONALDY PEREIRA NRO. CEDULA ID: NIDAD ORGANIZATIVA: GERENCIA DE SISTEMAS CARGO: ANALISTA DE CNC EN SISTEMAS FECHA DE INGRESO: 06/02/2008 CUENTA NRO.: 0060290202 SALARIO DIARIO 80,57 INSTITUCION: BANCO VENEZOLANO DE CREDITO
17158788
CODIGO CONCEPTO 1000 5000 5010 5020 5290 5500 SALARIO SEGURO SOCIAL OBLIGATORIO LEY REGIMEN PREST. DE EMPLEO LEY PRESTAC VIVIENDA Y HABIT DCTO POR COMPRA DE PRODUCTOS DCTO. COMPLEMENTO DEL MES
CANTIDAD 30,000 4,000 4,000 30,000 0,000 30,000
ASIGNACION 2.417,00
DEDUCCION 89,24 11,16 24,17 81,00 966,80
SALDO
0,00
ASIGNACIONES TOTALES: Certifico haber recibido la cantidad de BS ***** 1.244,63 2.417,00
DEDUCCIONES 1.172,37
NETO A COBRAR 1.244,63
de acuerdo con el detalle anterior y firmo en señal de conformidad.
El concepto de Reembolso de Gastos corresponde a reintegro por gastos contra facturas presentadas por usted incurridas en el mes anterior.
Firma del Trabajador ACUMULADOS Devengado a la fecha: Prestaciones Sociales: Intereses s/Prest. Soc: 9.426,30 10.978,35 1.478,27 Vacaciones y Bono Vacacional Días pendientes por disfrutar: Días pendientes de pago: Días pendientes Bono Vacacional: 0,00 -14,00 -6,52

  #3 (permalink)  
Antiguo 30/04/2010, 13:56
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años
Puntos: 0
Respuesta: buscar un dato en un txt

Hola a todos,

Pude resolver, para que busque el valor que va despues de "TRABAJADOR: ", coloque lo siguiente:

Código PHP:
preg_match_all("((?<=TRABAJADOR: )[0-9][0-9][0-9][0-9])"$contenido_fichero$resultado); 
  #4 (permalink)  
Antiguo 30/04/2010, 14:47
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: buscar un dato en un txt

Primero que todo, felicitarte, porque al no recibir respuesta, no dejaste de buscarla, y llegaste por tus propios medios a la solución.

Segundo, aquí tienes una sugerencia :

Código PHP:
Ver original
  1. if(preg_match("/(?<=trabajador\s:\s)\d{4}/i", $str, $m)) {
  2.     echo "<pre>";
  3.     print_r($m);
  4.     echo "</pre>";
  5. }

Si te fijas, uso el modificador i, esto hace que busque indpendiente de las mayúsculas/minúsculas.

También uso \d{4}, lo cual es una forma abreviada de lo que tú has escrito. El \d especifica que se quiere encontrar cualquier dígito decimal. Entre llaves especifico la cantidad de dígitos que deben haber, en este caso 4.

Espero te haya servido, y gracias por compartir tu solución .
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #5 (permalink)  
Antiguo 03/05/2010, 16:19
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años
Puntos: 0
Respuesta: buscar un dato en un txt

Gracias a ti , me parece muy util sustituir [0-9][0-9][0-9][0-9] por d{4} .

Que bien que pude aportar algo en este comunidad que tanto me ha ayudado, espero que sea de gran utilidad

Etiquetas: dato, txt
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:35.