Foros del Web » Programando para Internet » PHP »

Limpiar cadena y subdividirla en mas cadenas

Estas en el tema de Limpiar cadena y subdividirla en mas cadenas en el foro de PHP en Foros del Web. Buenas, llevo un tiempo con este problema y no se si hay manera de resolverlo solo con php y sin pasos intermedios. Tengo una cadena ...
  #1 (permalink)  
Antiguo 29/12/2005, 11:22
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Limpiar cadena y subdividirla en mas cadenas

Buenas, llevo un tiempo con este problema y no se si hay manera de resolverlo solo con php y sin pasos intermedios.

Tengo una cadena como la siguiente:

7 Departamento analisis Juan Carlos Gomez adsf9800

(* entre dato y dato aparecen muuchos espacios qu eel foro no muestra)

Y necesito rescatar de ella el id( en el ejemplo es el 7) y el nombre(en el ejemplo es Juan Carlos Gomez), lo demas no me interesa. Es decir, necesitari algo como $id=7 y $nombre=Juan Carlos Gomez para actualizar una base de datos.

el tema es que es facil rescatar el 7, pero y el nombre? a alguien se le ocurre alguna manera o es que la tengo complicada?

Se que haciendo un paso intermedio usando excel(que reconoce dicha cadena como tabla) puedo exportarlo en el formato dividido por ';' y luego es facil... pero me quiero evitar ese paso porque sino sera muy engorroso por la cantidad que diariamente tengo que actualizar :/

Bueno, se aceptan consejos.

Desde ya muchas gracias!

Última edición por Fridureiks; 29/12/2005 a las 11:28
  #2 (permalink)  
Antiguo 29/12/2005, 11:30
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Echa un ojo a la función explode http://es2.php.net/manual/es/function.explode.php
__________________
Mi página personal: Julián Urbano
  #3 (permalink)  
Antiguo 29/12/2005, 11:55
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Pues si, la he usado para probar y todo ;)

Utilizo explode con " " y me divide la cadena por espacios en un array. El problema radica en que no me sirve que divida el nombre en tres...

Ej: usando explode me daria esto mas o menos:

$cadena[0]=7
$cadena[1]=Departamento
$cadena[2]=analisis
$cadena[3]=Juan
$cadena[4]=Carlos
$cadena[5]=Gomez
$cadena[6]=adsf9800

El problema es que no todos los nombres estan compuestos por 3 'porciones', algunos solo de dos y otros de solo una porcion. En este caso es facil tomar las posiciones 3,4,5 ... unirlas y obtener el nombre, pero no me servira en todos los casos!!

Esta cadena es copiada de una tabla en formato html... si yo la pego en un archivo de excel, 'pegado especial, texto unicode' ... me la toma bien y dividida, si la exporto con separaciones de ; me queda algo como:

7;Departamento analisis;Juan Carlos Gomez;adsf9800

Es decir con los campos ya divididos.... y esto es lo que yo quiero saber si se puede hacer con php directamente sin antes pasar por excel :D

Igualmente gracias por tu ayuda.

Saludos.
  #4 (permalink)  
Antiguo 29/12/2005, 12:01
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Si cada campo puede estar compuesto por varias palabras es en principio imposible separarlo bien si no se usa un separador como ; o algo distinto del espacio. Búscatelas para separar bien.
__________________
Mi página personal: Julián Urbano
  #5 (permalink)  
Antiguo 29/12/2005, 12:09
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Cita:
Iniciado por caerolus
Si cada campo puede estar compuesto por varias palabras es en principio imposible separarlo bien si no se usa un separador como ; o algo distinto del espacio. Búscatelas para separar bien.
bua pense que podria reconocerlos de alguna manera como lo reconoce el excel, pero veo que no. Lo peor es que no tengo manera de separar eso, salvo haciendo un paso extra de meterlo en excel, exportarlo y recien ahi pegarlo para que lo analice mi codigo php

Bueno, gracias de todas maneras.

un saludo
  #6 (permalink)  
Antiguo 29/12/2005, 17:12
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 12 años
Puntos: 4
Vamos a ver
Segun leo, los campos no estan separados por un espacio, sino por varios no?
Supongo que el numero de espacios sera el mismo siempre, por ejemplo:
7(4 espacios)Departamento analisis(4 espacios)Juan Carlos Gomez(4 espacios)adsf9800

La solucion viene por usar el explode en vez de con 1 espacio, con 4 (en este ejemplo) o sea:
$cadena = explode("(4 espacios)",$cadena)

Entonces el resultado sera:

$cadena[0]=7
$cadena[1]=Departamento analisis
$cadena[2]=Juan Carlos Gomez
$cadena[3]=adsf9800


Nota: pongo (4 espacios) por si no salen, pero en realidad se trataria de pulsar 4 veces la barra espaciadora.

Hasta luego.
  #7 (permalink)  
Antiguo 30/12/2005, 06:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
A lo "mejor" no son espacios lo que tienes entre "campos" sino caracteres de tabulador (/t) por ejemplo .. Lo digo por qué haces el comentario de que "Excel" lo reconoce bien ... en ese caso, Excel hace lo mismo que las funciones de PHP como explode() .. eso sí indicando BIEN que separador realmente es el que define donde empieza un "campo" de ese "registro".

Un saludo,
  #8 (permalink)  
Antiguo 02/01/2006, 11:52
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Pues nada, gracias a todos. La verdad lo solucione en primera instancia de una manera muy rebuscada...(que habia escrito aqui y ahora borre), pero asi y todo me quedo en asuntos pendientees el buscar algo mas simple... y lo hay. Bastaba una sola linea.

Código PHP:
$cadena=explode(chr(9),$cadena); 
Esto me devuelve un array... el resto solo es ir descartando posiciones vacias e inservibles... pero con esta sola linea de codigo logre separar esa cadena en sus campos correspondientes.

Siempre se aprende algo nuevo, chr(9)

Saludos desde Argentina, gracias nuevamente por toda la ayuda que brindan y les deseo un muy buen año tanto en el trabajo como en lo personal.
  #9 (permalink)  
Antiguo 02/01/2006, 12:43
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
No valía con poner '\t' ??
__________________
Mi página personal: Julián Urbano
  #10 (permalink)  
Antiguo 02/01/2006, 13:40
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Cita:
Iniciado por caerolus
No valía con poner '\t' ??
Pues no lo he probado... solo saque el ord() del caracter que para mi dividia los campos y me di cuenta que era chr(9)... y ese es el que use para el explode();

Seguramente funcione, no lo se... como sea, pude resolver algo que pense que no se podia hacer(con sus ayudas, claro)

bye
  #11 (permalink)  
Antiguo 02/01/2006, 13:43
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Cita:
Iniciado por Cluster
A lo "mejor" no son espacios lo que tienes entre "campos" sino caracteres de tabulador (/t) por ejemplo ..
Es lo que decía Cluster, que no eran espacios sino tabulaciones. Es decir, el carácter '\t'
__________________
Mi página personal: Julián Urbano
  #12 (permalink)  
Antiguo 02/01/2006, 14:38
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Cita:
Iniciado por caerolus
Es lo que decía Cluster, que no eran espacios sino tabulaciones. Es decir, el carácter '\t'
Pues no :/ , ni con '\t' ni con '/t' me realiza bien el explode, unicamente lo hace bien con chr(9)

Por otro lado, mostrandoselo a un amigo veo que no le anda , fijandome un poco mas... en su ordenador a el le toma todos los espacios " " como si fueran caracter 32, a mi en cambio me toma como caracteres 9 los espacios en blanco que dividen los campos(tabulaciones) y como 32 los espacios en blanco entre palabras(espacios comunes).

Es un problema... porque si me toma todos los espacios como 32... ahi si que lo veo complicado para dividir la cadena. Alguien sabe a que se puede deber ese cambio en los caracteres en distintos ordenadores?

Saludos
  #13 (permalink)  
Antiguo 02/01/2006, 16:51
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 13 años, 3 meses
Puntos: 1
Puede depender del editor. Según cuales, unos ponen las tabulaciones como 4 espacios, 8..depende.
__________________
Mi página personal: Julián Urbano
  #14 (permalink)  
Antiguo 03/01/2006, 06:47
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 12 años, 5 meses
Puntos: 6
Bueno, ya esta.

Explorer toma todos los espacios como chr(32)
Firefox toma las tabulaciones como chr(9) y los espacios comunes como chr(32)

Por lo menos eso he visto.

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 10:24.