Utiliser un fichier txt à la place d'une TB MySql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Utiliser un fichier txt à la place d'une TB MySql

par Cyrano » 08 août 2006, 21:02

Des VARCHAR ne peuvent pas excéder 255
Vrai pour MySQL V4 ; faux à partir de MySQL V5.0.3 (65.535 caractères max)
Ben j'ignorais ce détail, me coucherais moins ignorant ce soir :P

par Henri » 08 août 2006, 10:19

Des VARCHAR ne peuvent pas excéder 255
Vrai pour MySQL V4 ; faux à partir de MySQL V5.0.3 (65.535 caractères max)

par Cyrano » 08 août 2006, 10:05

Code : Tout sélectionner

create table nomfichier (nomcol1 varchar(1024), nomcol2 vachar(1024), ... )
Des VARCHAR ne peuvent pas excéder 255, pour 1024, choisis plutôt le type TEXT ;)

par clochard11 » 08 août 2006, 00:21

Bonjour Henri,

Ton analyse est parfaitement correct, le programme php qui traitera mon fichier .txt se servira de la première ligne pour connaitre
les noms de colonne et des caractères || pour passer d'une colonne à une autre (parsing).
Dans ce cas la longueur et le type de colonne n'auront aucune influence.

Le désavantage de mon idée d'utilisation est que l'on ne peux faire de mathématique Sql du genre SELECT MAX(Col1) ou SELECT SUBSTR(colx) etc.....
vu que justement nous n'utiliserions pas de TB et que nous ne connaissons pas le type de colonne lue.

Ici, c'est uniquement un fichier texte pour la gestion d'une liste simple de membres, de livre, de dvd ou tout ce que l'on veux qui ne demande
pas de relation 1:n ou n:1 etc .....entre x fichiers txt.
Le fichier txt utilisé resemblera à une TB dénormalisée et c'est voulu avec tous les désaventages que cela comporte, mais aussi la simplicité pour tout un chacun.
Chaque néophite sera capable de créer son propre fichier txt (ou cvs), si celui-ci est capable d'utiliser Excel, un bloc note ou même word
avec la seule contrainte de la structure de la première ligne.
C'est le programme Php qui construira son tableau à 2 dimensions ( X colonnes sur x lignes) sans plus.
Pour la gestion du contenu de ce fichier txt, une page Html ou autre avec les boutons "Ajouter","Supprimer","Modifier" sur chaque ligne sera automatiquement générée.
Je pense que du côté de GuppY, les spécialistes ne travaillent pas autrement. Mais ça je ne sais vraiment pas le faire.

Merci pour tes explications.
Amicalement
Hassan

par Henri » 07 août 2006, 09:48

Créer de véritable TB MySql, Oracle, DB2 etc.. , implique que je connaisse parfaitement la structure de mon fichier input. Or c'est bien là le problème.
Quelque soit la solution que tu adopteras, il faudra qu'à un moment ou à un autre, la structure de la table ou de la pseudo table soit connue par le programme. Que tu travailles avec un fichier texte ou une base de données, il faudra bien que tu ajoutes un nom dans le champ NOM et un prénom dans un champ PRENOM.

GuPPY ne travaille pas autrement : il charge un mémoire un tableau en lisant le fichier texte, mais chaque fichier est décrit par une structure.

Cette structure est connue puisqu'elle est contenue dans la première ligne de ton fichier. Il est facile de la récupérer et de créer une table de manière dynamique avec exactement les mêmes noms de colonne que ceux décrits dans la première ligne :

Code : Tout sélectionner

create table nomfichier (nomcol1 varchar(1024), nomcol2 vachar(1024), ... )

Clochard11

par clochard11 » 06 août 2006, 21:03

Bonjour à tous,

Merci pour la précision concernant les CSV.

Pour le peu que je connaisse, les sites construits avec le CMS Guppy, travaillent déjà avec ce type de fichiers. Et ce ne doit pas être le seul.

Ils n'utilisent pas de DB au sens propre du terme, seul des fichiers cvs avec, si je ne me trompe pas, des extensions .txt et .inc.

Vous pouvez lire des explications sous "Présentation" -> "GuppY, un portail" du site : http://guppyed.org/articles.php?lng=fr&pg=36

Je tiens à vous remercier tous pour votre accueil et vos réponses très précise.
J'ai transmis mon problème dans différents forum de la communauté Guppy, il n'utilisent pas de DB et, semble-t-il, maîtrisent parfaitement l'utilisation de CSV comme pseudo DB.

Encore Merci et bravo à vous tous.

Amicalement

par naholyr » 06 août 2006, 14:27

C'est le format de fichiers que tu utilises : un ensemble de données par ligne, chaque donnée étant séparée par un séparateur prédéfini (en général ";" ou ","), et éventuellement encadrée par un guillemet double. La première ligne facultative décrit les noms de colonnes.

par clochard11 » 04 août 2006, 20:31

Re Bonjour,

Créer de véritable TB MySql, Oracle, DB2 etc.. , implique que je connaisse parfaitement la structure de mon fichier input. Or c'est bien là le problème.

Pour rappel:

-.- Je ne connais ni le nom des colonnes ni leur nombre.
-.- La seule chose que je connaisse est le nom du (des) fichier(s) .txt ,
-.- La première ligne contient toujours le nom des colonnes.
-.- Le nombre de ligne ne pourra jamais dépasser 400 et là je vois très large.
Au passage, php t'offre tout ce qu'il faut pour parser tes données maison, puisqu'on appelle ça du csv et qu'on a fgetcsv() et fputcsv() exprès pour.
L'un de vous parle de csv, que veux dire CSV ?

Merci à vous tous

par Henri » 04 août 2006, 15:39

En fait j'ai besoin d'un moteur capable de créer une pseudo TB en fonction de la première ligne de mon fichier.
Pourquoi ne pas vouloir créer des vraies tables de données avec un vrai SQL basé sur un vrai SGBD plutôt que de t'amuser à réécrire un moteur de SGBD en PHP avec du pseudo SQL ? A moins que ton but soit d'écrire un analyseur syntaxique ...

Il est tout à fait possible d'automatiser l'upload d'un fichier et le remplissage d'une base de données avec les colonnes et les enregistrements du fichier. Tant qu'à passer du temps sur ce site, autant que ce soit pour monter des routines d'import et d'export qui tiennent la route plutôt que de s'amuser à gérer la syntaxe de select, d'insert ou d'update qui de toute façon, marcheront moins bien que ce qu'ont développé MySQL, Oracle ou n'importe quel autre spécialiste de bases de données.

par naholyr » 04 août 2006, 14:47

Il n'y verra que du feu jusqu'au jour ou ton fichier dépassera les 3000-4000 lignes et où ton application s'effondrera complètement.

Il vaut mieux que l'upload de fichiers texte dans un dossier aie pour conséquence l'import de toutes ces données dans une base de données. L'admin ne s'embête pas, l'utilisateur n'y voit que du feu aussi, et tout le monde est heureux ;)

D'une manière générale, quand on a conjointement :
- un système qui marche très bien
- une source de données qui ne produit pas ce qu'il faut pour ce système

On ne s'amuse pas à recréer "système qui marche très bien" de 0 pour au bout de plusieurs mois de travail avoir "système qui marche moins bien mais qui traite mes données moisies" ;) c'est toujours la mauvaise solution.

Face à ce type de problème, on fait plutôt deux convertisseurs :
- "données maison" => "données pour système qui marche très bien"
- "données de systèmes qui marche très bien" => "données maison"

Au passage, php t'offre tout ce qu'il faut pour parser tes données maison, puisqu'on appelle ça du csv et qu'on a fgetcsv() et fputcsv() exprès pour. Tu as tous les outils, en choisissant l'option "conversion" dans une semaine tu n'as plus à te préoccuper de ce problème, et tu as un système de gestion de données pérenne. En choisissant l'autre option, dans quelques mois tu abandonneras ton projet car il sera basé sur un système vraiment trop instable (ou alors tu as un budget de fou furieux et tu développes ton propre sgbd à base de fichiers csv).

par clochard11 » 04 août 2006, 14:04

Je vous remercie tous pour votre dévouement à trouver une solution à mon "cas".

C'est pour des raison pratiques que je veux utiliser un .txt. Le fichier n'a pas toujours le même nombre de colonnes, seulle la première ligne a toujours le même format et c'est LA ligne des entêtes de colonne.

En fait j'ai besoin d'un moteur capable de créer une pseudo TB en fonction de la première ligne de mon fichier. On pourrait avoir pour un fichier "A" .txt :
ligne_1 : NOM ; PRENOM ; ADRESSE ; ....... ; .....
ligne_n : Yan : Claude ; Rte des xx12; .... ; .....
etc... etc ..

Pour un fichier "B" .txt :
ligne_1 : NumImatriculation ; Modèle ; Année ; ..... ; ... ;
Ligne_n: FD34ww34 ; Jeune ; 1988 ; ..... ; .... ;

Où l'on pourrait faire des "Insert"," Delete", "Update" mais sans SQL.

Pas simple, j'en convient. Mais l'idée étant que si l'on met ce/ces fichier dans un dossier particulier, avec une page php, nous pourrions le voir comme une TB.
Ceci à pour avantage, coté administrateur, de loader le(s) fichier(s) .txt dans un répertoire et c'est tout. Les utilisateurs l'utiliseraient comme une TB.


L'utilisateur lambda n'y verrait que du feu.

par HanX » 04 août 2006, 12:29

il me semble qu'avec odbc et access... tu peux "exporter" tes données vers un server mySQL (avec phpMyAdmin). Tu gagneras en performance et en simplicité.


Petite métaphore pour expliquer ton cas :
"Tu veux un poulet roti à la poelle" 8)

par Henri » 04 août 2006, 10:29

Si ton serveur est sur PC, tu as la possibilité de mettre en place une connexion de type ODBC sur un fichier texte ou un fichier CSV (ce qui est ton cas), et donc utiliser des ordres SQL sur ce fichier (mais uniquement en SELECT).

J'avais utilisé ça il y a pas mal d'années. Il y avait beaucoup de limitations sur les noms et emplacements des fichiers et les performances étaient lamentables.

Oui, il existe des CMS qui n'utilisent pas de base de données, mais des fichiers textes. Mais ceux que je connais utilisent un fichier par enregistrement et sont complètement propriétaire du format, ou alors utilisent des formats XML. Le problème est différent.

La solution la plus simple consiste quand même à importer tes données CSV dans une base. Il faudrait que tu écrives un script qui
1) lit le nom du fichier et crée une table qui porte ce nom
2) lit la première ligne du fichier et crée les colonnes de la table
3) importe les lignes suivantes comme des enregistrements dans la table

Tu fais tes select, tes update et des insert dans les tables et éventuellement, tu écris un script qui réexporte les données de chaque table dans le fichier texte correspondant.

par clochard11 » 04 août 2006, 10:13

Merci pour ta réponse si rapide.

Un flux RSS, je ne saurais pas l'utiliser. Comment fait-on ? quel sont les avantage et inconvénient ?

J'ai entendu dire que certain CMS n'utilisent pas de DB, Comment font-il pour enregistrer les données ? Sans en être sûr à 100%, faut voir
CMS Guppy.

Merci

par HanX » 04 août 2006, 02:25

c'est possible d'utiliser mais vraiment très mal... surtout les gros fichier c'est pas top :s

sinon créer un flux rss ne serait pas plus simple ?