Fichiet .txt et mysql
cedric php
-
samyb2313 Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
samyb2313 Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je débute en php.
J'ai un fichier qui arrive en .txt sur le serveur.
Ce fichier contient différents champs qui vont alimenter la base de données.
J'ai un souci sur un des champs.
Il s'agit d'un champs qui entre dans la base de données dans un champs Text.
Dans le fichier reçu (.txt), le champ en question contient des sauts de ligne visiblement ce qui, lors du traitement du fichier et son inétégration dans la base de données, provoque des problèmes (décalage des autres champs etc).
Comment faire pour que ces sauts de ligne, ne soient pas considérés comme des passages dans un autre champ ? (il est bien indiqué dans mon script de fonctions, qu'un changement de champs se fait par ",".
Merci beaucoup pour votre aide.
Je débute en php.
J'ai un fichier qui arrive en .txt sur le serveur.
Ce fichier contient différents champs qui vont alimenter la base de données.
J'ai un souci sur un des champs.
Il s'agit d'un champs qui entre dans la base de données dans un champs Text.
Dans le fichier reçu (.txt), le champ en question contient des sauts de ligne visiblement ce qui, lors du traitement du fichier et son inétégration dans la base de données, provoque des problèmes (décalage des autres champs etc).
Comment faire pour que ces sauts de ligne, ne soient pas considérés comme des passages dans un autre champ ? (il est bien indiqué dans mon script de fonctions, qu'un changement de champs se fait par ",".
Merci beaucoup pour votre aide.
A voir également:
- Fichiet .txt et mysql
- Mysql community server - Télécharger - Bases de données
- Pour enregistrer ce texte au format txt sans perdre d’informations, quel codage utiliser ? ✓ - Forum Word
- Convertir fichier excel en txt avec séparateur point virgule ✓ - Forum Excel
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
- Qui est l auteur du fichier txt ✓ - Forum Windows
6 réponses
Est ce qu'un élément indique qu'il s'agit de al fin d'un champ ???
C'est à dire un point ou autre chose
C'est à dire un point ou autre chose
Engros si je comprend bien tu as dans ton fichier :
et tu voudrais que le texte long soit une unique variable:
pour parcourir un fichier texte (sources : http://dev.petitchevalroux.net/php/lecture-fichier-ligne-par-ligne-php.227.html
Apres tu adaptes ....
Champ1,champ2,champ3,textelong textelong textelong textelong textelong Chmp11,champ21,champ31,textelong textelong textelong2
et tu voudrais que le texte long soit une unique variable:
pour parcourir un fichier texte (sources : http://dev.petitchevalroux.net/php/lecture-fichier-ligne-par-ligne-php.227.html
/*Ouvre le fichier et retourne un tableau contenant une ligne par élément*/ $lines = file('/path/file.txt'); /*On parcourt le tableau $lines et on affiche le contenu de chaque ligne précédée de son numéro*/ $var1 = null; $var2 = null; $var3 = null; foreach ($lines as $lineNumber => $lineContent) { /* on va tester que la ligne contient ou non des virgule */ if(ereg(",",$lineContent)) { /* requete d'insertion des données */ ici ta requete du genre $req = "INSERT INTO matable(c1,c2,c3) VALUES ('$var1',$var2,$var3)"; execute ta requete unset($var1,$var2,$var3); /* nouvelle ligne */ $array = explode(",",$lineContent); $var1 = $array[0]; $var2 = $array[1]; $var3 = $array[2]; } else { /* Sinon on ajoute le reste a ta précédente variable */ $var3 .= $lineContent; } echo $lineNumber,' ',$lineContent; }
Apres tu adaptes ....
Voici le bout de code qui a été développé.
while (!feof($fp)) /* Et Hop on importe */
{ /* Tant qu'on n'atteint pas la fin du fichier */
$ligne = fgets($fp,8192); /* On lit une ligne */
/* On récupère les champs séparés par ; dans liste*/
$liste = explode( '","', $ligne);
/* On assigne les variables */
$type_bien = $liste[1];
$code_societe = '1864';
$code_site = $liste[2];
$num_asp = $liste[3];
$numDossier = $liste[4];
$reference = $liste[5];
$prix_bien = $liste[6];
$prix_bien = number_format($prix_bien, 0, '', '');
$charges = $liste[7];
$taxe_hab = $liste[8];
$taxe_fonciere = $liste[9];
$ville = $liste[10];
$zone_bien = $liste[11];
$titre = $liste[12];
$nb_pieces = $liste[13];
$nb_chambres = $liste[14];
$surf_habitable = $liste[15];
$surf_carrez = $liste[16];
$surf_sejour = $liste[17];
$surf_terrain = $liste[18];
$etage = $liste[19];
$nb_niveau = $liste[20];
$annee_construction = $liste[21];
$type_cuisine = $liste[22];
$nb_toilettes = $liste[23];
$nb_sdb = $liste[24];
$nb_salle_eau = $liste[25];
$park_int = $liste[26];
$park_ext = $liste[27];
$nb_garages = $liste[28];
$nb_cave = $liste[29];
$type_chauffage = $liste[30];
$ascenseur = $liste[31];
$balcon = $liste[32];
$terrasse = $liste[33];
$nb_mitoyennete = $liste[34];
$txt_mailing = $liste[35];
$txt_mailing .= "<br>";
$DPE1 = $liste[36];
$DPE2 = $liste[37];
$DPE3 = $liste[38];
$DPE4 = $liste[39];
$titre=addslashes($titre);
$txt_mailing=addslashes($txt_mailing);
$ville=addslashes($ville);
$titre=addslashes($titre);
//$numDossier = str_replace('"', '', $numDossier);
/* Ajouter un nouvel enregistrement dans la table */
$query = "INSERT into tmp_dossier (num_dossier) Values( '$numDossier' )";
$result = mysql_query($query, $link) or die(mysql_error());
$query = "SELECT * FROM achat WHERE
num_dossier='$numDossier' ";
$result = mysql_query($query, $link) or die("Une erreur a empêché l'ouverture de la page : err-1");
$num_rows = mysql_num_rows($result);
// si le dossier existe déjà alors, on modifie les champs, sinon on insère
if($num_rows==0){
if($numDossier!=""){
$query = "INSERT into achat (
num_dossier, code_societe, code_site, num_asp, type_bien, prix_bien, taxe_fonciere, taxe_hab,
charges, reference, ville, titre, nb_pieces, nb_chambres,
surface_habitable, surf_carrez, surf_sejour, surf_terrain,
etage, nb_niveau, annee_construction, type_cuisine, nb_toilettes,
nb_sdb, salle_eau, park_int, park_ext, nb_garages, nb_cave,
type_chauffage, ascenseur, balcon, terrasse, nb_mitoyennete,
texte_mailing, zone_bien, DPE_etiq_energie, DPE_tx_GES, DPE_val_energie, DPE_val_tx_GES )
Values('$numDossier','$code_societe','$code_site','$num_asp','$type_bien','$prix_bien','$taxe_fonciere', '$taxe_hab','$charges','$reference','$ville','$titre','$nb_pieces', '$nb_chambres',
'$surf_habitable', '$surf_carrez', '$surf_sejour', '$surf_terrain',
'$etage', '$nb_niveau', '$annee_construction', '$type_cuisine', '$nb_toilettes',
'$nb_sdb', '$nb_salle_eau', '$park_int', '$park_ext', '$nb_garages', '$nb_cave',
'$type_chauffage', '$ascenseur', '$balcon', '$terrasse', '$nb_mitoyennete',
'$txt_mailing','$zone_bien','$DPE1','$DPE2','$DPE3','$DPE4' )";
$result = mysql_query($query, $link) or die(mysql_error());
}
}else{
$query2="UPDATE achat SET
num_dossier='$numDossier',
code_societe='$code_societe',
code_site='$code_site',
num_asp='$num_asp',
type_bien='$type_bien',
prix_bien='$prix_bien',
taxe_fonciere='$taxe_fonciere',
taxe_hab='$taxe_hab',
charges='$charges',
reference='$reference',
ville='$ville',
titre='$titre',
nb_pieces='$nb_pieces',
nb_chambres='$nb_chambres',
surface_habitable='$surf_habitable',
surf_carrez='$surf_carrez',
surf_sejour='$surf_sejour',
surf_terrain='$surf_terrain',
etage='$etage',
nb_niveau='$nb_niveau',
annee_construction='$annee_construction',
type_cuisine='$type_cuisine',
nb_toilettes='$nb_toilettes',
nb_sdb='$nb_sdb',
salle_eau='$nb_salle_eau',
park_int='$park_int',
park_ext='$park_ext',
nb_garages='$nb_garages',
nb_cave='$nb_cave',
type_chauffage='$type_chauffage',
ascenseur='$ascenseur',
balcon='$balcon',
terrasse='$terrasse',
nb_mitoyennete='$nb_mitoyennete',
texte_mailing='$txt_mailing',
zone_bien='$zone_bien',
DPE_etiq_energie='$DPE1',
DPE_tx_GES='$DPE2',
DPE_val_energie='$DPE3',
DPE_val_tx_GES='$DPE4'
WHERE num_dossier='$numDossier'";
$result2 = mysql_query($query2, $link) or die("Une erreur a empêché l'ouverture de la page : err-4<br>".mysql_error());
}
// fin du while
}
Je ne sais pas si ça peut vous aider :(
while (!feof($fp)) /* Et Hop on importe */
{ /* Tant qu'on n'atteint pas la fin du fichier */
$ligne = fgets($fp,8192); /* On lit une ligne */
/* On récupère les champs séparés par ; dans liste*/
$liste = explode( '","', $ligne);
/* On assigne les variables */
$type_bien = $liste[1];
$code_societe = '1864';
$code_site = $liste[2];
$num_asp = $liste[3];
$numDossier = $liste[4];
$reference = $liste[5];
$prix_bien = $liste[6];
$prix_bien = number_format($prix_bien, 0, '', '');
$charges = $liste[7];
$taxe_hab = $liste[8];
$taxe_fonciere = $liste[9];
$ville = $liste[10];
$zone_bien = $liste[11];
$titre = $liste[12];
$nb_pieces = $liste[13];
$nb_chambres = $liste[14];
$surf_habitable = $liste[15];
$surf_carrez = $liste[16];
$surf_sejour = $liste[17];
$surf_terrain = $liste[18];
$etage = $liste[19];
$nb_niveau = $liste[20];
$annee_construction = $liste[21];
$type_cuisine = $liste[22];
$nb_toilettes = $liste[23];
$nb_sdb = $liste[24];
$nb_salle_eau = $liste[25];
$park_int = $liste[26];
$park_ext = $liste[27];
$nb_garages = $liste[28];
$nb_cave = $liste[29];
$type_chauffage = $liste[30];
$ascenseur = $liste[31];
$balcon = $liste[32];
$terrasse = $liste[33];
$nb_mitoyennete = $liste[34];
$txt_mailing = $liste[35];
$txt_mailing .= "<br>";
$DPE1 = $liste[36];
$DPE2 = $liste[37];
$DPE3 = $liste[38];
$DPE4 = $liste[39];
$titre=addslashes($titre);
$txt_mailing=addslashes($txt_mailing);
$ville=addslashes($ville);
$titre=addslashes($titre);
//$numDossier = str_replace('"', '', $numDossier);
/* Ajouter un nouvel enregistrement dans la table */
$query = "INSERT into tmp_dossier (num_dossier) Values( '$numDossier' )";
$result = mysql_query($query, $link) or die(mysql_error());
$query = "SELECT * FROM achat WHERE
num_dossier='$numDossier' ";
$result = mysql_query($query, $link) or die("Une erreur a empêché l'ouverture de la page : err-1");
$num_rows = mysql_num_rows($result);
// si le dossier existe déjà alors, on modifie les champs, sinon on insère
if($num_rows==0){
if($numDossier!=""){
$query = "INSERT into achat (
num_dossier, code_societe, code_site, num_asp, type_bien, prix_bien, taxe_fonciere, taxe_hab,
charges, reference, ville, titre, nb_pieces, nb_chambres,
surface_habitable, surf_carrez, surf_sejour, surf_terrain,
etage, nb_niveau, annee_construction, type_cuisine, nb_toilettes,
nb_sdb, salle_eau, park_int, park_ext, nb_garages, nb_cave,
type_chauffage, ascenseur, balcon, terrasse, nb_mitoyennete,
texte_mailing, zone_bien, DPE_etiq_energie, DPE_tx_GES, DPE_val_energie, DPE_val_tx_GES )
Values('$numDossier','$code_societe','$code_site','$num_asp','$type_bien','$prix_bien','$taxe_fonciere', '$taxe_hab','$charges','$reference','$ville','$titre','$nb_pieces', '$nb_chambres',
'$surf_habitable', '$surf_carrez', '$surf_sejour', '$surf_terrain',
'$etage', '$nb_niveau', '$annee_construction', '$type_cuisine', '$nb_toilettes',
'$nb_sdb', '$nb_salle_eau', '$park_int', '$park_ext', '$nb_garages', '$nb_cave',
'$type_chauffage', '$ascenseur', '$balcon', '$terrasse', '$nb_mitoyennete',
'$txt_mailing','$zone_bien','$DPE1','$DPE2','$DPE3','$DPE4' )";
$result = mysql_query($query, $link) or die(mysql_error());
}
}else{
$query2="UPDATE achat SET
num_dossier='$numDossier',
code_societe='$code_societe',
code_site='$code_site',
num_asp='$num_asp',
type_bien='$type_bien',
prix_bien='$prix_bien',
taxe_fonciere='$taxe_fonciere',
taxe_hab='$taxe_hab',
charges='$charges',
reference='$reference',
ville='$ville',
titre='$titre',
nb_pieces='$nb_pieces',
nb_chambres='$nb_chambres',
surface_habitable='$surf_habitable',
surf_carrez='$surf_carrez',
surf_sejour='$surf_sejour',
surf_terrain='$surf_terrain',
etage='$etage',
nb_niveau='$nb_niveau',
annee_construction='$annee_construction',
type_cuisine='$type_cuisine',
nb_toilettes='$nb_toilettes',
nb_sdb='$nb_sdb',
salle_eau='$nb_salle_eau',
park_int='$park_int',
park_ext='$park_ext',
nb_garages='$nb_garages',
nb_cave='$nb_cave',
type_chauffage='$type_chauffage',
ascenseur='$ascenseur',
balcon='$balcon',
terrasse='$terrasse',
nb_mitoyennete='$nb_mitoyennete',
texte_mailing='$txt_mailing',
zone_bien='$zone_bien',
DPE_etiq_energie='$DPE1',
DPE_tx_GES='$DPE2',
DPE_val_energie='$DPE3',
DPE_val_tx_GES='$DPE4'
WHERE num_dossier='$numDossier'";
$result2 = mysql_query($query2, $link) or die("Une erreur a empêché l'ouverture de la page : err-4<br>".mysql_error());
}
// fin du while
}
Je ne sais pas si ça peut vous aider :(
Bonjour,
Pour commencer, deux risques à prendre en compte :
1 - Es-tu sûr que le premier et le dernier champs ne peuvent pas contenir de sauts de ligne ? Si oui, on va s'en sortir ; sinon, c'est inextricable.
2 - Ton champ texte peut-il contenir une virgule ? Si oui, t'es foutu ! Ou alors il faudra penser à choisir un autre séparateur, ou à échapper la virgule.
Je vois deux approches possibles pour la résolution du problème :
1 - traiter l'ensemble du fichier sans le découper ligne par ligne, en ne s'occupant que des virgules. Ça va demander quand même un peu de gymnastique pour traiter le champ 39.
2 - traiter ligne par ligne comme aujourd'hui, mais compter les virgules passées pour inclure la ligne suivante à la ligne en cours s'il n'y a pas eu le bon nombre de virgules.
Xavier
Pour commencer, deux risques à prendre en compte :
1 - Es-tu sûr que le premier et le dernier champs ne peuvent pas contenir de sauts de ligne ? Si oui, on va s'en sortir ; sinon, c'est inextricable.
2 - Ton champ texte peut-il contenir une virgule ? Si oui, t'es foutu ! Ou alors il faudra penser à choisir un autre séparateur, ou à échapper la virgule.
Je vois deux approches possibles pour la résolution du problème :
1 - traiter l'ensemble du fichier sans le découper ligne par ligne, en ne s'occupant que des virgules. Ça va demander quand même un peu de gymnastique pour traiter le champ 39.
2 - traiter ligne par ligne comme aujourd'hui, mais compter les virgules passées pour inclure la ligne suivante à la ligne en cours s'il n'y a pas eu le bon nombre de virgules.
Xavier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
"2","1864","01","5880350","00007","7899","299000","0","0","900","LOOS","Z03","Maison lotissement","7","6","120","0","32","0","","","1991","Equipée","1","1","1","0","0","1","0","Individuel","","0","1","2","LOOS 299 000 EUROS
MAISON DE 1991 COMPRENANT: entrée, salon séjour de 32m², cuisine équipée, 6 chambres salle de bain et salle de douche, jardin et garage attenant, MAISON TRES SOIGNEE, RARE SUR LE SECTEUR AVEC 6 CHAMBRES. RUE CALME ET AGREABLE A DEUX PAS DU CENTRE ET DE LILLE.
CLASSE ENERGIE C.","C","D","149","35",
Voilà une ligne qui est mal interprétée. La coupure se fait visiblement après 299 000 EUROS, ce qui correspond à un saut de ligne. Je ne pense pas que ce soit un pb de virgule mais bel et bien d'un saut de ligne.
MAISON DE 1991 COMPRENANT: entrée, salon séjour de 32m², cuisine équipée, 6 chambres salle de bain et salle de douche, jardin et garage attenant, MAISON TRES SOIGNEE, RARE SUR LE SECTEUR AVEC 6 CHAMBRES. RUE CALME ET AGREABLE A DEUX PAS DU CENTRE ET DE LILLE.
CLASSE ENERGIE C.","C","D","149","35",
Voilà une ligne qui est mal interprétée. La coupure se fait visiblement après 299 000 EUROS, ce qui correspond à un saut de ligne. Je ne pense pas que ce soit un pb de virgule mais bel et bien d'un saut de ligne.
En fait j'ai :
/* On lit une ligne */
$ligne = fgets($fp,8192);
/* On récupère les champs séparés par ; dans liste*/
$liste = explode( '","', $ligne);