Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2007, 10h07   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 35
Points : 10
Points : 10
Par défaut [SQL] Éditer un fichier

Bonjour à tous,

je suis en train de transformer un fichier xml en sql avec des expressions régulières en php.


mon fichier sql se trouve composé de lignes sous cette forme:

insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');

seulement j'ai des lignes qui n'ont pas d'auteur et je me retrouve avec :

Insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1996 ','français','L''acte de vente ','CD ROM',' / Université Blaise Pascal, Clermont 2');

donc avec un champs de moins.

Comment faire pour compter les ',' dans chaque ligne et si il m'en manque rajouter ,'' à la fin de la ligne?

j'ai bien essayé des choses comme ca :

Code :
1
2
3
$contents = ereg_replace('(values[(|)\'[:space:]]*)(([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')
(([[:punct:]]|[[:alnum:]]|[[:space:]])*)(\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)
(\',\')(([[:punct:]]|[[:alnum:]]|[[:space:]])*)([(|);]*)','\\0\\1\\2\\3\\4\\5\\6\\7\\8\\9,\'\');',$contents);
mais sans succès...

merci d'avance.
liberty74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 18h18   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
J'aurais fait ça avec une function de callback en détectant si auteur est présent dans la liste des colonnes.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function modInsert($masque)
{
   if( !strpos($masque[1], 'auteur') )
   {
      $masque[1] .= ', auteur';
      $masque[2] .= ', \'\'';
   }
   return 'INSERT INTO OUVRAGE(' . $masque[1] . ') VALUES(' . $masque[2] . ');';
}
 
$insert = array("insert into ouvrage (annee, langue, titre, support, titre2, auteur) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');",
"insert into ouvrage (annee, langue, titre, support, titre2) values(' 1995 ','espagnol',' ¡ Venga, vamos 1! ','CD ROM ',' / Ana Gainza', 'Gainza , Ana');");
 
$insert = preg_replace_callback('#^insert\s+into\s+ouvrage\s*\(([^\)]+)\)\s*values\s*\((.+)\);$#i', 'modInsert', $insert);
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 12h36   #3
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Tu peux compter en faisant ça par exemple :
Code :
1
2
3
4
5
6
7
8
9
preg_match_all('#\([^)]+\)#', $requete, $matches);
 
$nombre_parametres_1 = count( explode(',', $matches[1]) );
$nombre_parametres_2 = count( explode(',', $matches[2]) );
 
if( $nombre_parametres_1 > $nombre_parametres_2 )
{
    echo('Il faut rajouter un champ');
}
pour ajouter un champ, je te conseil un str_replace
Code :
str_replace(');', ', \'\');', $requete);
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h22.


 
 
 
 
Partenaires

Hébergement Web