Foros del Web » Programando para Internet » PHP »

problema con funcion preg_match_all

Estas en el tema de problema con funcion preg_match_all en el foro de PHP en Foros del Web. Buen dia a todos, Estoy tratando de buscar un valor en varios txt y al encontrarlo me tiene que renombrar el txt (bueno en este ...
  #1 (permalink)  
Antiguo 18/05/2010, 10:11
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
problema con funcion preg_match_all

Buen dia a todos,

Estoy tratando de buscar un valor en varios txt y al encontrarlo me tiene que renombrar el txt (bueno en este caso seria el pdf, ya que lo que esta en el txt esta en el pdf) donde consiguio el valor.

Este es mi codigo
Código PHP:
<?
//busca y encuentra
$fichero glob('/var/www/intranet/nomina/nomina*.txt');
$total_archivoscount($fichero); //cuento cantida PDF de la nomina
$valorabuscar=206;
echo 
"valorabuscar".$valorabuscar."<br>\n";
for(
$n 1$n<=$total_archivos$n ++){
 
$ficheros_nomina 'nomina'.$n.'.txt';
 echo 
"<br>\n Archivos:".$ficheros_nomina."<br>\n";
 
$contenido_fichero file_get_contents($ficheros_nomina);
 echo 
$contenido_fichero."<br>\n";; //muestro el contenido del txt
 
preg_match_all("((?<=TRABAJADOR: )[0-9][0-9][0-9][0-9])"$contenido_fichero$resultado);  
 foreach (
$resultado[0] as $id){
  echo 
"ETIQUETA".$id;
  if (
$valorabuscar==$id){
   echo 
$id
   
rename('nomina'.$n.'.pdf',$id.'.pdf');
  }
 
 }
}
?>
No me da ningun error ni nada, pero la funcion preg_match_all pareciera que devuelve un valor cero, y no deberia ser asi ya que el valor esta en el txt.

He hecho de todo antes de escribirles a ustedes pero ya no se que mas hacer. Necesito de su valiosa opinion para ver si es algo que pase por alto
  #2 (permalink)  
Antiguo 18/05/2010, 11:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: problema con funcion preg_match_all

lo primero, activa el reporte de errores y lee una referencia de PCRE, ya que en las funciones preg_* es obligado el uso de delimitadores...

http://www.forosdelweb.com/f18/aport...s-pcre-646110/

ahora, como prueba manual... intenta tener tu texto en una variable, y aplica bien la expresión... lo que sería bueno ver también es la fuente de los datos, en su formato original.. así podríamos aportarte alguna expresión o corrección a la misma... ;)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/05/2010, 15:18
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Mensaje Respuesta: problema con funcion preg_match_all

Gracias pateketrueke por responderme, revise y tengo la version correcta de estas libreria. Ya vi cual es la causa del problema:

El debe captar el numero que hay despues de la palabara "TRABAJADOR: " pero este a veces puede ser de 2, 3 o 4 digitos. por eso mi sintaxis no funciona con el txt tiene lo siguiente:

Código:
5 2007 COMPAÑIA: EUROCIENCIA, C.A. FECHA DE PAGO 30/03/2007 TRABAJADOR: 526 EDGAR GREGORIO LAYA HERRERA NRO. CEDULA ID: UNIDAD ORGANIZATIVA: GERENCIA DE VENTAS CARGO: COORD ENTIDADES GUBERNAMENTAL FECHA DE INGRESO: 17/06/1996 CUENTA NRO.: 0060253994 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: 0,00 0,00 0,00 Vacaciones y Bono Vacacional Días pendientes por disfrutar: Días pendientes de pago: Días pendientes Bono Vacacional: 1,00 -92,00 -62,97


y esta es mi sintaxis en php:

Código PHP:
$fichero glob('/var/www/intranet/nomina/nomina*.pdf');
$total_archivoscount($fichero); //cuento cantida PDF de la nomina
$valor=701;
$valor=(int)$valor;
echo 
"valorabuscar".$valor."<br>\n";
$ficheros_nomina 'nomina2.txt';
$contenido_fichero file_get_contents($ficheros_nomina);
 
//echo $contenido_fichero."<br>\n";
 
preg_match_all("((?<=TRABAJADOR: )[0-9][0-9][0-9]][0-9])"$contenido_fichero $resultado);    
 foreach (
$resultado[0] as $id){
               
print_r($id);
  echo 
"consiguio";
        if (
$valorabuscar==$id){ 
  echo 
"consiguio";}
              
        } 
No hay una forma de decirle a la funcion preg_match_all, toma solamente los numeros que va despues de la palabra "TRABAJADOR" ?

ASI DE MANERA SI HAY numeros de 2, 3 o 4 digitos solo tome esos valores?

Gracias de antemano por tu valiosa colaboracion.
  #4 (permalink)  
Antiguo 19/05/2010, 15:26
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: problema con funcion preg_match_all

claro

Código PHP:
Ver original
  1. $texto = "5 2007 COMPAÑIA: EUROCIENCIA, C.A. FECHA DE PAGO 30/03/2007 TRABAJADOR: 526 EDGAR GREGORIO LAYA HERRERA NRO. CEDULA ID: UNIDAD ORGANIZATIVA: GERENCIA DE VENTAS CARGO: COORD ENTIDADES GUBERNAMENTAL FECHA DE INGRESO: 17/06/1996 CUENTA NRO.: 0060253994 de acuerdo con el detalle anterior y firmo en señal de conformidad.
  2. El concepto de Reembolso de Gastos corresponde a reintegro por gastos contra facturas presentadas por usted incurridas en el mes anterior.
  3. Firma del Trabajador ACUMULADOS Devengado a la fecha: Prestaciones Sociales: Intereses s/Prest. Soc: 0,00 0,00 0,00 Vacaciones y Bono Vacacional Días pendientes por disfrutar: Días pendientes de pago: Días pendientes Bono Vacacional: 1,00 -92,00 -62,97";
  4. preg_match('%TRABAJADOR:\s*(\d+)\s*%', $texto, $matches);
  5. print_r($matches[1]);

prueba y me avisas

PD: le quite un ? que tenia demas :B
__________________
More about me...
~ @rhyudek1
~ Github
  #5 (permalink)  
Antiguo 19/05/2010, 15:45
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: problema con funcion preg_match_all

Muchas gracias por responder, probe asi:
Código PHP:
preg_match_all("((?<=TRABAJADOR: )(\d+))"$valor$resultado); 
Y funciono perfectamente =) gracias!!

Una pregunta y disculpa la ingnorancia esta funcion se jecuta sin problema si la introduzco en un for?

Lo que pasa es que debe buscar en n cantidad de archivos los cuales son: nomina1.txt, nomina2.txt........ nomina150.txt pero al colocarla en un for no hace nadita

este es mi codigo:
Código PHP:
$fichero glob('/var/www/intranet/nomina/nomina*.txt');
$total_archivoscount($fichero); //cuento cantida PDF de la nomina
$valor=701;
$valor=(int)$valor;
echo 
"valorabuscar".$valor."<br>\n";
for(
$n 1$n<=$total_archivos$n ++){
      
$ficheros_nomina 'nomina'.$n.'.txt';
      echo 
$ficheros_nomina;
      
$contenido_fichero file_get_contents($ficheros_nomina);
      
preg_match_all("((?<=TRABAJADOR: )(\d+))"$valor$resultado);
      foreach (
$resultado[0] as $id){
               
print_r($id);
               if (
$valorabuscar==$id){ 
                   echo 
"consiguio";}
              
      } 


Pero si lo ejecuto fuera de el, si lo hace.
  #6 (permalink)  
Antiguo 19/05/2010, 15:49
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: problema con funcion preg_match_all

Código PHP:
Ver original
  1. preg_match_all("((?<=TRABAJADOR: )(\d+))", $valor, $resultado);

no deberia ser

Código PHP:
Ver original
  1. preg_match_all("((?<=TRABAJADOR: )(\d+))", $contenido_fichero, $resultado);

???
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 19/05/2010, 15:49
 
Fecha de Ingreso: abril-2006
Ubicación: Venezuela
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: problema con funcion preg_match_all

Ups ya vi :S el error dios todos una vez en la vida, tenemos un pelo de tonto.

Muchas gracias nuevamente por tu ayuda :D

Etiquetas: funcion
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 13:05.