Foros del Web » Programando para Internet » PHP »

preg_split (espacios) con excepción de algunos

Estas en el tema de preg_split (espacios) con excepción de algunos en el foro de PHP en Foros del Web. Hola tengo en un archivo .txt varias lineas cada una de ellas esta formada asi: Código: 1 7 4 5 3 1 0 0 1 ...
  #1 (permalink)  
Antiguo 04/06/2009, 08:39
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
preg_split (espacios) con excepción de algunos

Hola tengo en un archivo .txt varias lineas cada una de ellas esta formada asi:
Código:
1 7 4 5  3  1 0  0 1 "Orange" 1    0   2   20    0    1
2 7 4 5  3  1 0  0 1 "Red Apple" 1    0   2   20    0    1
Cada caracter que esta separado por un espacio o tabulador es un valor que lo tomo desde un array usando preg_split('expresión de expacio en blanco')

La linea 1 de Lujo:
Código PHP:
$array preg_split('/[\s*]+/',$_1linea);
// 0=>1, 1=>7..... , 9=>"Orange", 10=>1,.... 

Ahora con la línea 2; el nombre (que viene ser lo que está entre comillas) es "Red Apple" pero tiene un espacio (éste es el que quiero escapar) para que no me separe el nombre con otro valor del array
Código PHP:
$array2 preg_split('/[\s*]+/',$_2linea);
// 0=>2, 1=>7..... , 9=>"Red, 10=>Apple",.... 
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
  #2 (permalink)  
Antiguo 04/06/2009, 09:47
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años
Puntos: 7
Respuesta: preg_split (espacios) con excepción de algunos

Bueno,
si ES CIERTO que solo puedes tener 1 espacio entre " y " esta va bien:
Código PHP:
$array preg_split("/(\s+)(?!([^\s]+?)\")/",$text); 
Si no hay que jugar un poco mas (para mi porque no encuentro otra regular expression que pueda ir)
Código PHP:
$_1linea '2 7 4 5  3  1 0  0 1 "Red App le" 1    0   2   20    0    1';        
$final_line '';
$open false;
$reg_expr "/(.*?)((\")|$)/is";
preg_match_all($reg_expr$_1linea$linesPREG_SET_ORDER);
foreach(
$lines as $line) {
    if(
preg_match("/\"/"$line[2]) && !$open) {  //line conteins an "
        
$part $line[1]."\"";
        
$open true;
    }
    elseif(
preg_match("/\"/"$line[2]) && $open) {
        
$part $line[1]."\"";
        
$part preg_replace("/ /"" "$part);
        
$open false;
    }
    elseif(!empty(
$line[1])) $part $line[1];
    else 
$part '';
    
$final_string .= $part;
}
$_1linea $final_string;
$array preg_split('/\s+/',$_1linea);
//luego si monstras en html pueedes tenerlo asì, si no:
foreach($array as $k=>$v$array[$k] = str_replace(" "" "$v);
print_r($array); 
Chao!!
  #3 (permalink)  
Antiguo 04/06/2009, 10:46
Avatar de America|UNK  
Fecha de Ingreso: noviembre-2006
Ubicación: Piura - Perú
Mensajes: 582
Antigüedad: 17 años, 5 meses
Puntos: 56
Respuesta: preg_split (espacios) con excepción de algunos

Hola gracias por la sugerencia mientras ya hize otra cosa, reemplazar lo que está entr comillas por otro caracter que no sea espacio ":s:"
Código PHP:
function replaceName($str){
$z preg_replace("/\s/",":s:",$str);
return 
$z[1];

Código PHP:
        $line preg_replace_callback('/"(.*)"/','replaceName',$line); 
y luego todos los tabuladores o espacios van a convertirse en un espacio único.

Código PHP:
        $line preg_replace("/\s+/"," ",$line); 
y luego vuelvo a reemplazar :s: por espacio. Gracias!
__________________
/* El que atiende, entiende..., el que entiende, aprende!.
Desarrollo Web Freelance, Contactar */
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 09:05.