murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006
-
22 févr. 2006 à 18:00
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006
-
24 févr. 2006 à 14:08
Bonjour,
J'ai un petit soucis lors de la lecture d'un fichier texte !
Voilà je travail avec un fichier texte dont les données doivent être réinjectés dans une table, ma méthode consiste à ouvrir le fichier texte dans un script php et d'effectuer une requête qui réinjecte les données dans la table par la suite.
Avec mon navigateur j'ouvre la page : injection-membres.php (qui ouvre le fichier membres.txt et qui effectue la requête de réinjection), avec ce fichier j'ai créé un tableau qui me permet de faire une visualisation des informations tel qu'elles sont lues et réinjectées.
le séparateur des données est une tabulation (je précise ca peut vous être utile)
Mes deux soucis sont ceux ci :
Dans mon fichier texte il y a un "champs" qui comporte du texte, dans ce texte parfois on y trouve un ou plusieurs ; et des "
ex :
"location ""Mini Cooper"" cabriolet" (ici la personne à simplement voulu souligner Mini Cooper comme ceci : "Mini Cooper" et quand cette ligne à été lue des " ont été rajoutés)
"horse racing, Opera's season (10 km); thermes at Vichy (10 km)" (ici la personne à voulu ajouter un point virgule pour structurer sa phrase, mais quand cette ligne à été lue des " ont été ajoutés en début de phrase et en fin de phrase)
Naturellement quand les données sont réinjectées dans la table, ces deux anomalies sont elles aussi rajoutées.
Je n'ais pas vraiment d'autres choix que de travailler comme ceci pour faire l'import de mes données, j'ai déjà envisagé une autre solution mais je n'ais pas accès à la table d'origine pour faire un export en .sql (changement d'hébergeur et récupération des données seulement par un fichier export que l'ont peu générer en txt ou csv)
J'avais trouvé une méthode pour protéger le points virgule, mais par la suite tout les guillemets qui étaient présent dans cette partie étaient supprimés.
Merci d'avance aux personnes qui se pencheront sur mon soucis !
A voir également:
Problème de " et de ; lors de la lecture d'un fichier texte
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 22 févr. 2006 à 18:02
oups, j'oubliais de précisé que pour les guillemets je pensais utiliser : addslashes() et ensuite stripslashes() avant l'injection dans la base.
Cela fonctionnerai ??
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 22 févr. 2006 à 18:26
Merci Malalam pour ta précision mais cela ne fonctionne pas :(
Voila ce que cela me donne : "horse racing, Opera\'s season (10 km); thermes at Vichy (10 km)" (cela me protège bien effectivement mes " )
Peux tu me préciser mysql_real_escape_string ? Je ne la connait pas, j'utilise habituellement addslashes (désolée pour l'erreur dans ce que j'ai dit plus haut, mais oui effectivement je stripslashes pour l'affichage et j'addslashes pour l'injection), laquelle est le mieux ?? (les données sont effectivement réintégrées dans une base MySql)
Par contre je viens de m'appercevoir de quelque chose :
Le fichier d'export que l'on peut utiliser pour transférer nos données d'un hebergement à l'autre est un export global donc on a absolument toutes les informations de la base dedans, à chaque fois on le découpe pour faire des fichiers plus petit qui correspondent à nos nouvelles tables.
Quand je prépare mon fichier, tout est nickel au niveau des "cellules" qui contiennent du texte (je prépare les fichiers sous excel),
par contre une fois créé et enregistré (soit en format txt soit en format csv, j'ai fait les deux) c'est là qu'il me rajoute les " qui sont de trop... Donc finalement cela serait plus une erreur venant d'excel (je pense) lors de l'enregistrement.
Avez vous une solution pour traiter ce problème ??
Vous n’avez pas trouvé la réponse que vous recherchez ?
ImmortalPC
Messages postés954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 22 févr. 2006 à 18:57
Salut,
perso je remplace les " et ' par leur équivalent " et '
ce qui donne un fonction str_replace(array('\'','"'), array(''','"'), $mavar);
@+
Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 22 févr. 2006 à 19:36
Salut,
htmlentities($chaine,ENT_QUOTES); sinon.
Mais il faut que tu utilises comme te l'a dit malalam addslashes(). devant toutes les valeurs que tu récupères, avant d'exécuter la requête il faut que tu passes par ça, sinon y'aura forcément une erreur.
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 22 févr. 2006 à 20:43
Merci Anthomicro et Immortal-PC malheureusement cela n'arrange pas mon problème !
Le gros hic, c'est que ce n'est pas mon script qui les rajoute ces ", mais ils se rajoutent lorsque j'enregistre mon fichier (en texte ou csv).
Il faudrait que je trouve une combine pour justement éviter qu'ils s'ajoutent tout seul. C'est bizarre d'ailleurs qu'ils s'ajoutent comme ça....
Sinon l'autre solution serait de les enlever dans le script mais ca risque d'être plus lourd à gérer parce que :
Cas n°1 :
Si j'ajoute addslashes() voilà ce que cela va me donner
"\location ""\Mini Cooper""\ cabriolet"
Cas n°2 :
"\horse racing, Opera's season (10 km); thermes at Vichy (10 km)"
Mais ils resteront toujours, alors que ce que j'aimerai c'est supprimé les " superflus.
A moins que j'ai pas bien saisie ce que vous m'avez dit dans vos propositions .....
Sinon j'ai trouvé une solution, mais ca me les supprime tous et comme ce sont des descriptions saisie par des membres, enlever les " qu'ils ont ajouté pour souligner quelque chose dans leur phrase, ca va pas le faire du tout ...
ImmortalPC
Messages postés954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 22 févr. 2006 à 21:00
Re,
peux tu nous envoyer la source ??
++
Immortal-PC,
téléchargements,astuces ,entre-aide informatique , conseils pour vos problèmes d'ordi.
<!--StartFragment -->Grâce à Immortal-PC votre ordinateur passera les âges.
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 22 févr. 2006 à 21:25
Oui si tu veux, mais je pense pas que cela vous aide beaucoup, puisque le soucis viendrait du fichier : membre.txt en fait...
$membres = file("../base/membres.txt");
$nb_membres = count($hotel);
if ($nb_membres == 0)
{
echo 'Il n\'y a pas de membres enregistrés dans le fichier';
}
//Construction de la table pour visualisation des infos
echo '<table border=1>
';
echo '<tr>
<th bgcolor="#CCCCFF">AUTRESP_FR</th>
<th bgcolor="#CCCCFF">AUTRE_FR</th>
<th bgcolor="#CCCCFF">AUTRESP_UK</th>
<th bgcolor="#CCCCFF">AUTRE_UK</th>
</tr>';
for ($i=0; $i<$nb_membres; $i++)
{
$cols = explode( "\t", $membres[$i]);
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 22 févr. 2006 à 22:14
Alors le contenu :
Dans le fichier quand je le créer (imaginer les cellule excel), je ne prends que les données que j'ai besoin et enregistre sous le nouveau document.
<tr><td>location "Mini Cooper" cabriolet</td><td></td><td>Car rental (Mini Cooper cabrioler)</td><td><td></tr>
<tr><td></td><td></td><td>hippodrome, Opéra (10 km), thalasso à Vichy (10km)</td><td>horse racing, Opera's season (10 km); thermes at Vichy (10 km)<td></tr>
Après enregistrement du fichier :
<tr><td>"location ""Mini Cooper"" cabriolet"</td><td></td><td>Car rental (Mini Cooper cabrioler)</td><td><td></tr>
<tr><td></td><td></td><td>hippodrome, Opéra (10 km), thalasso à Vichy (10km)</td><td>"horse racing, Opera's season (10 km); thermes at Vichy (10 km)"<td></tr>
le fichier en lui même en ouverture autre que excel :
"location ""Mini Cooper"" cabriolet" \t \t Car rental (Mini Cooper cabrioler) \t \n
hippodrome, Opéra (10 km), thalasso à Vichy (10km) \t \t "horse racing, Opera's season (10 km); thermes at Vichy (10 km)" \t \n
Voilà globalement....
J'espère que ca vous éclaire un peu :S
bref ensuite lorsque tu récupères tes donnes tu fais un enlever_slashes($_POST['blabla']) ensuite tu sauvegardes le tout dans le fichier (bien qu'apparemment il n'y ait pas besoin de passer par un enlever_slashes() ensuite tu réouvres et tu n'utilises pas le addslashes pour afficher, par contre le htmlentities enlève le ENT_QUOTES et ça devrait aller (même si tu le laisses mais bon... c'est pas utile)
<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 23 févr. 2006 à 09:20
Merci Anthomicro mais là encore ça ne m'aide pas à résoudre mon problème, puisque le fichier je le prépare sous excel.
Je test quand même et réenregistrerai mes données dans un autre fichier texte.
Sinon, je vais voir du coté de Access si y a pas moyen de préparer un fichier texte sans rajout de " quand il ne faut pas.
murrigane
Messages postés88Date d'inscriptionmardi 31 mai 2005StatutMembreDernière intervention19 mai 2006 24 févr. 2006 à 14:08
Merci Malalam pour ta réponse, j'ai effectivement utilisé cette fonction.
Sinon j'ai aussi remplacé les " par des + (caractère que l'on ne trouve pas dans les descriptions) et le ; par un µ ensuite dans mon script qui traite la préparation de mon fichier d'importation, j'ai fait des str_replace sur les + (") et les µ (;) pour ravoir ma structure nickel.
et j'ajoute également : addslashes()