Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/07/2006, 16:58
yacatl
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Eliminar un espacio "inexistente" en una cadena!

Que tal amigos.

Tengo un problema muy recurrente y me gustaría que me ayudaran a resolverlo.
Muchas veces necesito procesar información de archivos en Excel ya sea para compararlos o para insertarlos a una BD o a otro archivo, para lo cual el procedimiento que habitualmente ocupo es el siguiente.
  1. Guardo el archivo como texto separado por tabuladores
  2. Con un script php separo los campos con un explode.
  3. Evalúo cada linea y la inserto, la comparo o lo que deba hacer.

Casi siempre la importancia radica en eliminar los registros repetidos, generalmente cuando hay que insertar en la BD yo hago ese campo como único para prevenir que se inserte más de una vez el mismo registro, además de que en el script muchas veces comparo las lineas (cabe señalar que cuando hago esto, ordeno el archivo de manera que los repetidos queden consecutivos) para que no entren en el ciclo si es que es igual al anterior.

El problema es que siempre hay algunos datos que por mas que les paso un trim() tanto en script como en SQL, llevan un espacio en blanco al inicio o al final de la línea que hace que registros iguales sean diferentes para el sistema.

Aquí les pongo un pequeño ejemplo, ojalá puedan ayudarme y decirme como solucionar este problema.

Código PHP:
<?php
$file 
'facanterior.txt';
$emp "";
$rfc "";

if(
$link fopen($file,"r"))
{
   while(!
feof($link))
   {
    
$arrmailn explode("\t",fgets($link,4096));
    
$emp2  trim($arrmailn[1]);
    
$rfc2   trim($arrmailn[2]);
    
$cp    $arrmailn[3];
                
    if(
$emp <> eregi_replace(" ","",$emp2) && $rfc <> eregi_replace(" ","",$rfc2))
    {
       
$emp eregi_replace(" ","",$emp2);
       
$rfc eregi_replace(" ","",$rfc2);
                    
    echo 
eregi_replace(" ","",$emp2).eregi_replace(" ","",$rfc2)."<br>";
                

    }
   }
}
fclose($link);
Como pueden ver, primero les paso un trim() y despues cuando los comparo, hago un eregi_replace() para que me junte las cadenas quitandole los espacios y las pueda comparar, pero aun asi obtengo lineas como estas.

Código:
ABCOMUNICACION,S.A.DEC.V.ACO000710QD7
ABCOMUNICACION,S.A.DEC.V. ACO000710QD7

ZUÑIGAMIJANGOSGLORIAGRISELDAZUMG600315GMA
ZUÑIGAMIJANGOSGLORIAGRISELDA ZUMG600315GMA

ZENTELLAQUEROCONSULTORESCONTABLES,S.C.ZQC891207IQA
ZENTELLAQUEROCONSULTORESCONTABLES,S.C. ZQC891207IQA
Claramente se vé que son registros iguales, salvo que en este caso hay un espacio, bien al final del nombre, o al principio del RFC, pero si se supone que ya le pase el trim() mas el eregi_replace() para quitarselos, ¿porque siguen ahí?

Mucho agradeceré su ayuda porque como lo dije al principio, es un problema recurrente.

Saludos a todos.