Foros del Web » Programando para Internet » PHP »

expresion regular... me urgue....

Estas en el tema de expresion regular... me urgue.... en el foro de PHP en Foros del Web. a ver tengo un texto en un archivo txt con el siguiente formato: "AGRUPACIÓ MUSICAL LA BANDA DE CERDANYOLA DEL VALLÈS","c/ Santa Maria, 23","Cerdanyola Del ...
  #1 (permalink)  
Antiguo 09/10/2003, 07:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
expresion regular... me urgue....

a ver tengo un texto en un archivo txt con el siguiente formato:

"AGRUPACIÓ MUSICAL LA BANDA DE CERDANYOLA DEL VALLÈS","c/ Santa Maria, 23","Cerdanyola Del Vallès","08290"
"AGRUPACIÓ MUSICAL ""ELS ENTS""","c/ Coronel Canals, 3-5 2n 1a","Sant Andreu De La Barca","08740"


como veis cada texto que esta entre: , tendria que ser un campo distinto en la bd... esa separacion tambien coincide con los "texto"

bueno el metodo mas efectivo que estaba empleando es hacer la siguiente expresion a cada linea:
Código PHP:
$salida preg_split ('/\\"|\\"/'$linea, -1PREG_SPLIT_NO_EMPTY); 
y funciona, solo tene un problema cuando en mitad del texto que tendria que corresponder a un campo se utiliza "... " en realidad ya estan marcados con un doble "" ... "" lo que pasa es que no se como tendria que hacerse la expresion regular

alguien me hecha un cable? la verdad es que lo necesito tener para esta tarde, gracias chicos
  #2 (permalink)  
Antiguo 09/10/2003, 07:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿El fichero de entrada es un CSV (valores separados por coma)? Por el formato que pones, parece que si. Si es asi, podrias mirar la funcion fgetcsv() (www.php.net/fgetcsv) para leer el fichero. Esta funcion te devuelve un array con los campos de la linea. En el foro se ha tratado varias veces, usar el buscador.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 09/10/2003, 07:46
 
Fecha de Ingreso: noviembre-2002
Mensajes: 190
Antigüedad: 15 años
Puntos: 0
explode("separador","$cadena")

si separas todas las cadenas con , (comas)o con cualquier otro separador que especifiques, prodrias usar:

explode(sep,cad,n)

Devuelve un array cuyos elementos contienen las porciones de la cadena (cad) comprendidas entre los caracteres señalados como (sep) hasta el máximo de porciones señaladas (n).
Los caracteres separadores son eliminados de las cadenas resultantes. Si no se indica el número de porciones, PHP fracciona en todas las necesarias.
Si se indica, el último trozo contendrá el resto de la cadena hasta el final.

pero lo más conveniente el lo que te menciono josemi "The Moderator II"

Saludos
  #4 (permalink)  
Antiguo 09/10/2003, 07:54
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
En este caso el explode() no es posible, ya que hay campos que contienen comas (el separador). Eso creo que no influye en el fgetcsv().

Saludos.

PD: Realmente soy el moredator III. El I es webstudio y el II Cluster.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 09/10/2003, 07:58
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
muchisimas gracias chicos ahora lo pruebo

efectivamente josemi tiene razon por comas no puede ser... probare lo del csv... ahora os digo como me ha ido
  #6 (permalink)  
Antiguo 09/10/2003, 07:59
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 7 meses
Puntos: 1
$file=file("file.txt")

foreach ($file as $fila=>$linea){
$salida[$fila]=explode("," ,$linea);

}

donde en:
$salida[1][0] =AGRUPACIÓ MUSICAL LA BANDA DE CERDANYOLA DEL VALLÈS

$salida[1][1] =c/ Santa Maria, 23","Cerdanyola Del Vallès

etc,

un saludo
  #7 (permalink)  
Antiguo 09/10/2003, 08:00
 
Fecha de Ingreso: abril-2003
Mensajes: 656
Antigüedad: 14 años, 7 meses
Puntos: 1
vaya, es verdad, josemi tiene razon, lo postamos al mismo tiempo

un saludo
  #8 (permalink)  
Antiguo 09/10/2003, 08:13
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
pues ha funcionado genial, de nuevo muchisimas gracias a todos

bueno ahora si algun maestro del php me dijera como puedo llevar esa informacion a una bd MySQL ya me haria el hombre mas feliç del mundo

mi idea es que para cada linea hacer un "mysql_query("INSERT INTO....", pero estamos hablando de 40.000 registros... y aunque esten divididos en 4 archivos... seguro que hay una manera mas optimizada
  #9 (permalink)  
Antiguo 09/10/2003, 08:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
En ese caso podrias mirar si te sirve LOAD DATA (http://www.mysql.com/doc/en/LOAD_DATA.html). Te permite cargar datos en MySQL directamente desde un fichero con formato. Creo que maneja facilmente CSV. Eso si, no se si funciona en todos los hostings. Pero por probar no pierdes nada. Te ahorrarias el leer con PHP el txt. Creo que tambien hay algun mensaje en el foro sobre esto. Mira en el buscador.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 09/10/2003, 09:04
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
pues lo he estado mirando y no se como hacerlo, estoy haciendo las pruebas en un servidor local, que para crear la bd ya me sirve...

el problema es que no se donde poner:

mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';

el servidor esta instalado en un winXP


Pd. Si lo hago con simples INSERT INTO, hay muchos datos que no los introduce... por ejemplo estas dos filas:
"ACCIÓ CULTURAL DE LA VALL DE LORD","Casal l'Estaca, s/n","Sant Llorenç De Morunys","25282"
"ACCIÓ CULTURAL DEL PLA D'URGELL (ACPU)","Av. del Canal, s/n (ed.Sant Jordi), 2a","Mollerussa","25230"
y no veo porque no tendria que dejar?

Última edición por Nark; 09/10/2003 a las 09:09
  #11 (permalink)  
Antiguo 09/10/2003, 09:16
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
No entiendo que quieres decir con "no se donde poner".

Y sobre las filas que no te inserta, es culpa de los '. Mira de escaparlos al hacer el insert. La razon es que al hacer la sustitucion PHP le manda a MySQL esta consulta:

INSERT INTO .... VALUES ('ACCIÓ CULTURAL DEL PLA D'URGELL (ACPU)',...

Si te fijas tienes '...'..'. Al usar ' para pasar las cadenas, cometes un error de sintaxis.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 09/10/2003, 09:21
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
a ver en el insert into tengo esto:

Código PHP:
mysql_query("INSERT INTO entitats ( id, nom, carrer, ciutat, codi, provincia ) VALUES ('', '".$salida[0]."', '".$salida[1]."', '".$salida[2]."', '".$salida[3]."', '3')"$enlacebd) or die(exit()); 
donde $salida es lo que he leido del fgetcsv

en cuanto a no se "donde meterlo", es literal, alguna vez en linux ejecute algun comando similar... pero en win, no se donde tengo que escribir lo de "mysql> LOAD..."

PD. Siento no llegar a mas

Última edición por Nark; 09/10/2003 a las 09:22
  #13 (permalink)  
Antiguo 09/10/2003, 09:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mysql> .. es el "simbolo" de sistema o "línea de comandos"

Para ver "eso" tienes que ejecutar en tu directorio bin/ de Mysql el programa: mysql.exe (si mal no recuerdo) desde una sesión DOS ..

De todas formas .. si usas algún administrador de Mysql tipo phpMyadmin puedes ejecutar dicha sentencia desde el mismo .. ejecutando el SQL que ahí tienes. Ademas, phpMyadmin por ejemplo disponde de "importador" de datos en el formato que usas CVS .. sólo tienes que tener creada tu tabla y listo .. importar los datos poniendo los separadores de registros y de campos que uses (tus " y , ) en el formulario que tienes para tal fin.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 09/10/2003, 09:27
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 14 años, 4 meses
Puntos: 0
gracias cluster eso es lo que queria saber

en cuanto a la opcion del phpmyadmin de importar, es lo primero que he buscado, y no la he encontrado, solo encontre la opcion de importar un archivo con instrucciones SQL.... de todas formas seguire buscando esa opcion...


Pd. Y josemi toda la razon, eso era lo que fallaba, le puse un addslashes y ya funciono... suerte que me hicistes pensar en ello
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 15:22.