NewbieContest

Programmation => Langages Web => Discussion démarrée par: Gelope le 05 Juillet 2008 à 08:11:18



Titre: [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 05 Juillet 2008 à 08:11:18
Voilà, je débute en php, et je dois créer un programme, en php, qui va à partir d'un txt formaté, avec pour chaque ligne plusieurs champs bien découpés, créer une base de donnée, où forcément, chaque champs du txt correspondra à un champs dans la BDD...
Accessoirement, je recevrais chaque jour un nouveau fichier txt qui devra mettre à jour la BDD... :oops:

Quelqu'un aurait un tutoriel à me proposer car j'avoue être perdu..

Merci d'avance


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Al3x le 05 Juillet 2008 à 08:48:13
Pour du PHP c'est plutôt dans la section Langage Web qu'il faudrait poster.  :rolleyes:

Pour faire ce que tu souhaites, tu peux faire comme ça :
Code:
$fic = fopen("tonfichier.txt", "r");

do {
       $ligne = fgets($fic);
       $ligne = rtrim($ligne); // pour retirer le saut de ligne
       $champs = explode('le_caractere_de_delimitation', $ligne);

      /*Crée ta requête sql en utilisant les champs dans le tableau $champs */

      mysql_query($ta_requete) or die(mysql_error());

} while(!feof($fic));

fclose($fic);



Pour les détails regarde la documentation sur http://php.net (http://php.net).


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 05 Juillet 2008 à 09:06:30
Merci, oui pour langage web, c'est le Bordeau d'appellation AOC qui fait que je me suis trompé, si un modo pouver chagner le fichier de place!

Il subsite pour le moment deux problèmes :s

->Les champs ne sont pas délimités à chaque fois par le même caractère :s Parfois ce sont des étoiles, parfois, parfois, comme par exemple pour les champs nom prénom, ce sont des espaces :s

->De plus, pour le cas du matricule, qui sera en fait la clé, il prend plusieurs "formes": C'est à chaque fois une suite de chiffres, mais parfois "tous collés" (ex: 21212122121) et parfois une suite de chiffre limités par des espaces (2chiffre - Un espace: ex: 21 21 21 21)...... On peut savoir quel structure aura la clé en fonction d'un des autres champs (Si le champs vaut une certaine valeur, se sera le premier cas, autre valeur, le deuxième cas....)

->Enfin, il y a des parties inutiles au fichier: Je m'explique: On peut dire que les données à traiter se trouvent dans des sortes de tableaux (Encadrée par des **,  voir à la fin du post pour l'exemple). Il y a ce qu'on pourrait appeler une entête au début, puis différentes séparations entre les "tableaux": en gros, le txt se présente de la facon suivante: Entête - Tab de données à traiter - Entête ...... Je dois laisser le fichier tel quel... Je me demandais s'il n'était pas possible de créer une copie du fichier(avec une ligne de code bien sur), et ensuite de pouvoir à l'aide de boucles supprimer mes entêtes: En effet, comme les lignes à traitée commence toutes par des étoiles, suivie de 13 chiffres, on peut lui dire un truc du genre: "Lit le fichier, si la ligne ne commence pas par une étoile suivie de treize entiers, tu la supprime....." Je ne vois que cette méthode pour avoir un fichier "utilisable" mais étant un nouveau en prog, je n'ai pas encore une expérience suffisante pour détecter tous les cas de figures et trouver les solutions optimisées....


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: mansonboy le 05 Juillet 2008 à 16:43:47
Post un contenu d'un de ces fichier txt pour voire. Sa sera plus facile je pense de t'aider.


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 08 Juillet 2008 à 08:00:36
Désolé je ne peux pas, à cause du secret profesionnel...


Titre: Re : Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: _o_ le 08 Juillet 2008 à 09:15:46
Désolé je ne peux pas, à cause du secret profesionnel...

Ben, ça va être dur de répondre dans ces conditions.

Mon point de vue à ce sujet, puisqu'on est dans un environnement professionnel :
D'abord, il doit y avoir une spécification d'interface qui décrit le fichier en question, et qui permet d'en déduire les manips à faire côté base de données. Si ce n'est pas le cas, ben heu... c'est pas pro. :) Une fois la spécification connue, ce n'est qu'une question d'algorithmique pour transposer ça dans le langage de tonchoix.

Le truc qui me chiffonne surtout, c'est qu'on a l'impression que tu cherches à nous faire faire le travail pour lequel tu es payé, et là, c'est plus que discutable. Si tu ne parviens pas à réaliser ce travail dans l'état de tes connaissances, de deux choses l'une : ou tu le signales à ta hiérarchie (la transparence, ça a du bon); ou tu te débrouilles par toi-même pour t'auto-former (en l'occurrence en PHP/SQL). Il y a suffisamment de tutoriels sur le net dans ce domaine pour que cela ne soit pas une barrière insurmontable.
Note que les deux propositions ne sont pas mutuellement exclusives : il m'arrive régulièrement de signaler à mes chefs qu'ils m'ont collé sur le dos un truc que je sais pas faire, mais qu'avec un peu plus de temps que prévu au départ, je peux m'en sortir. Ça participe aussi à la relation de confiance avec ton patron. Tu es franc sur les problèmes rencontrés, mais tu proposes une solution réaliste aux soucis rencontrés.


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 08 Juillet 2008 à 10:21:12
Le projet ne consiste pas seulement à découper les champs d'un fichier texte!

Il y a une semaine je ne connaissais rien au php, maintenant je dois me débrouiller pour dans trois semaines sortir un projet qui est je pense complexe en respectant le cahier des charges!

 Oui je traine sur les tutoriaux, pour moi le forum c'est un tutorial+: C'est interractif, on peut avoir des réponses à ses problèmes et de facon plus adaptée.

Tu ne veux pas m'aider, que veux tu que je te dises? Ne m'aide pas, j'espère que sur la toile il y aura bien quelqu'un capable de m'aider si je coince vraiment!

MErci


Titre: Re : Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: _o_ le 08 Juillet 2008 à 12:59:41
Le projet ne consiste pas seulement à découper les champs d'un fichier texte!

Je m'en doute. C'est pourquoi en général, on écrit des spécifications avant de développer. De cette manière, il ne doit quasiment plus y avoir de point d'ombre lors de la conception et du développement de l'application.

Citation
Tu ne veux pas m'aider, que veux tu que je te dises? Ne m'aide pas, j'espère que sur la toile il y aura bien quelqu'un capable de m'aider si je coince vraiment!

Bon, je prends ta réponse comme une confirmation que tu es payé pour faire ce boulot. Si c'est le cas, tant mieux pour toi si tu trouves un pigeon pour faire gratuitement ce pour quoi tu es payé. Mais ne compte pas sur moi. Y'a une petite différence entre ça et l'entraide que l'on peut trouver sur le net (ça m'arrive de l'utiliser, et ça m'arrive de répondre aux questions des autres en retour).

Par contre, quelle que soit la situation dans laquelle tu te retrouves, je peux te garantir que tu n'auras pas de réponses potables sans expliquer exactement ce que tu souhaites faire, en fournissant les spécifications et un exemple de fichier. Et ça, ça n'a rien à voir avec mon opinion sur la question, c'est juste que personne n'a jamais réussi à répondre correctement à une question aussi vague, sans détails techniques. En fait, en l'occurrence, je ne suis même pas sûr que quelqu'un ait compris où était ton problème.


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 08 Juillet 2008 à 13:41:21
Oui je suis payé pour ca.

Je demande en gros, à comment faire pour découper une ligne quand les séparateurs ne sont pas à chaque fois les même!
J'ai juste fait une disjonction de cas pour essayer d'être le plus précis possible, c'est tout!

Je me demandais en fait s'il y avait une méthode comme par exemple en vb, avec la fonction "Mid" ou l'on choisit la ènième caractère à partir duquel on découpe et combien de caractère découpe séléctionne ont à partir de celui ci...

Les spécificité du cahier des charges consistent à me dire quels sont les champs que je devrais reprendre dans la BDD, c'est tout. (pour ce qui est du découpage).


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: S0410N3 le 08 Juillet 2008 à 14:06:16
http://fr2.php.net/manual/fr/function.preg-split.php


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 08 Juillet 2008 à 15:02:03
Merci, j'ai trouvé, avec substr c'est plus simple et extrêment efficace!

Voila _o_, maintenant je vais mériter l'argent que je vais me faire avec ce projet, happy?


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: S0410N3 le 08 Juillet 2008 à 15:32:37
3 jours pour trouver la fonction substr c'est pas mal.
On n'ose pas trop imaginer le temps que va prendre le reste ^^'

J'espère quand même que ce n'est pas payé à l'heure ;P


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 08 Juillet 2008 à 15:55:12
Désolé je ne bosse pas le w-e


Titre: Re : Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: _o_ le 08 Juillet 2008 à 17:43:51
Voila _o_, maintenant je vais méritais l'argent que je vais me faire avec ce projet, happy?

Heureux ? Non, à vrai dire, je m'en fiche pas mal que tu gagnes de l'argent d'une façon que je juge éthique ou non. Ce dont je suis sûr, c'est que si tu avais posé une question très précise m'ayant fait pensé à substr, j'y aurais répondu, et je ne me serais pas enflammé sur la justesse de ton salaire. Or, j'ai beau relire la discussion, et je ne vois aucune question de ce genre (avant 13h41, en tout cas). Aucun regret, donc. Je te suggère, par contre, d'être plus précis la prochaine fois sur ton problème. Ça évitera de tourner autour du pot toute la journée.


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 09 Juillet 2008 à 10:04:41
La prochaine c'est maintenant :)

Je lis le fichier et ne veux utiliser que les lignes commencant par une étoile suivit d'un chiffre.

J'utilise donc un regex. Mais il ne marche pas :s

Citation
if (preg_match("#^\*[0-9]#",$ligne);

Je protège bien le métacharactère... $ligne contient la ligne pointée bien-sûr!

Voilà l'erreur!

Citation
Parse error: parse error in /var/www/html/editique2/Controle/test.php on line 17

Merci à ceux qui vont m'aider


Titre: Re : Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: alph1 le 09 Juillet 2008 à 10:16:59
Citation
if (preg_match("#^\*[0-9]#",$ligne);

Une ou plusieurs erreurs de syntaxe :
Deux parenthèses ouvertes et une seule se ferme !!!

De plus que se passe-t-il si ton IF est TRUE ?


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 09 Juillet 2008 à 10:35:21
C'est bon, il y avait une petite erreur en plus de cette parenthèse, merci alpha^^


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: alph1 le 09 Juillet 2008 à 10:44:46
Oui le "point-virgule" placé avant l'action produite dans le cas où le IF est TRUE.


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: zours le 09 Juillet 2008 à 11:50:14
Ouais nan mais je crois sincèrement qu'il est urgent que tu te (re)plonges dans les concepts syntaxiques du PHP, là :/. Et apparemment, des cours/tutos d'algorithmie ne seraient pas du luxe non plus...


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: Gelope le 10 Juillet 2008 à 09:19:57
Merci Alpha!

Une autre question! Encore une fois si c'est pour flame, ce n'est pas la peine, si je vous ennuye avec ces question, le mieux à faire c'est de m'ignorer et de laisser tranquillement descendre ce topic! Si ce topic est toujours en haut du forum, c'est qu'au moins deux personnes y trouvent une utilité, alors même si vous ne comprenez pas, merci de les respecter!

J'ai une question qui relève maitenant plus de l'algorithmie! On imagine une base de donnée, mise à jour quotidiennement, qui à la valeur d'un champs, comme le nom par exemple,  qu'on peut retrouver de facon récurente. Je voudrais au final pour chaque ligne, ajouter un champ occurence qui contient le nombre de fois ou l'on trouve ce nom dans le BDD.

Mais je gère une base de donnée qui contient 2 millions de lignes(je ne connais pas le terme exact), et mon but est d'être le plus rapide possible! Donc, pour cette bdd mise à jour quotidiennement, quel serait la méthode la plus rapide?

Modération : tu es bien gentil, mais faut pas pousser non plus...


Titre: Re : [Php/MySql] Création d'une base de donnée à partir d'un fichier .txt
Posté par: zours le 10 Juillet 2008 à 10:44:45
Ouais, merci à celui qui a locké.

J'en profite quand même pour enfoncer ce que _o_ disait : si t'es payé pour ça, c'est un peu du foutage de gueule d'essayer de faire faire le boulot ici (ouais, j'suis moins poli que lui). Ou alors t'en embauches un comme presta pour ce boulot, et tu le rémunères par la même occasion.