Foros del Web » Programando para Internet » PHP »

Eliminar un espacio "inexistente" en una cadena!

Estas en el tema de Eliminar un espacio "inexistente" en una cadena! en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/07/2006, 17:58
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 15 años, 3 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.
  #2 (permalink)  
Antiguo 20/07/2006, 22:52
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 4 meses
Puntos: 6
Hola, creo que una vez me paso algo similar y si mal no recuerdo lo que hice fue averiguar el valor ascci de dicho caracter "inexistente" (funcion ord creo) para luego si eliminarlo con str_replace(chr(numero_ascci),"",$cadena);

No recuerdo muy bien la verdad... pero quiza te da alguna idea.

ord()
chr()

Prueba o espera, quiza viene alguno de los mas experimentados y te da una mejor solucion jeje

Exitos!!
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 21/07/2006, 12:09
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 15 años, 3 meses
Puntos: 0
Problema resuelto

Gracias Fridureiks, justamente con tu ayuda pude resolver mi problema. Como me dijiste, primero averigüe cual era el ascii de ese espacio (160) <> (32 [que es el ascii del espacio en blanco).

Despues solo fue hacer un str_replace de espacios y ese caracter, para poder comparar de manera correcta las cadenas.

Muchas gracias en verdad.

Saludos!
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:29.