PHP manip d'un fichier texte bizarre
Résolu
kalimbra
Messages postés
469
Date d'inscription
Statut
Membre
Dernière intervention
-
hamza_bba Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
hamza_bba Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je dois traiter un fichier texte au format bizarre pour une utilisation sur intranet. Je ne peux absolument pas intervenir sur le formatage du fichier texte qui est le seul truc exportable dans une application propriétaire.
le format est le suivant (pour chaque ligne)
ID tab Heure tab tab tab duree
le probleme c'est que de temps en temps je n'ai pas cette ID ce qui veut dire que cela se référe à la igne précédente en donnant une donnée inversée (ie l'heure n'est plus l'heure d'entrée, mais l'heure de sortie)
ET
si il y a une seconde ligne sans ID, cela veut dire que c'est toujours la dernière id affichée qui est concernée, mais du coup pour une heure d'entrée.
Comment pourrais je traiter ces données, sachant que le but final est de ne garder que ceux qui ont une ID et une heure d'entrée (donc soit une ligne simple, soit deux lignes sans ID en dessous) et des les insérer dans une base de donnée MySQL
j'ai déjà réussi à récupérer les données qui m'intéresse, c'est le traitement de la ou des deux lignes vides qui me pose problème . Je ne sais pas si je dois créer un Array temporaire avant l'insertion, les insérer, effacer si la ligne suivante est vide, puis remettre si la ligne encore suivante est toujours vide, ....
merci de vos conseils..
je dois traiter un fichier texte au format bizarre pour une utilisation sur intranet. Je ne peux absolument pas intervenir sur le formatage du fichier texte qui est le seul truc exportable dans une application propriétaire.
le format est le suivant (pour chaque ligne)
ID tab Heure tab tab tab duree
le probleme c'est que de temps en temps je n'ai pas cette ID ce qui veut dire que cela se référe à la igne précédente en donnant une donnée inversée (ie l'heure n'est plus l'heure d'entrée, mais l'heure de sortie)
ET
si il y a une seconde ligne sans ID, cela veut dire que c'est toujours la dernière id affichée qui est concernée, mais du coup pour une heure d'entrée.
Comment pourrais je traiter ces données, sachant que le but final est de ne garder que ceux qui ont une ID et une heure d'entrée (donc soit une ligne simple, soit deux lignes sans ID en dessous) et des les insérer dans une base de donnée MySQL
j'ai déjà réussi à récupérer les données qui m'intéresse, c'est le traitement de la ou des deux lignes vides qui me pose problème . Je ne sais pas si je dois créer un Array temporaire avant l'insertion, les insérer, effacer si la ligne suivante est vide, puis remettre si la ligne encore suivante est toujours vide, ....
merci de vos conseils..
A voir également:
- PHP manip d'un fichier texte bizarre
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
1 réponse
bonjour
si j'ai comprend bien le problème voila l'idée ce forme d'un algorithme :
/* initialisation : j'initialise la variable ligne_precedent_vide selon la premiere ligne
si (premier ligne==vide) ligne_precedent_vide=faux;
sinon
ligne_precedent_vide=vrai;
/* j'insert la premier ligne dans le bd
insérer première ligne dans bd();
/* je parcoure le tableau et j'insert les lignes simple et les lignes vide dont la ligne précédent est aussi vide
pour (2eme ligne jusqu'a fin tableau) faire
si (((ligne==vide) et (ligne_precedent_vide ==vrai) ) ou (ligne non vide) ) {
inserer_ligne_mysql(ligne courante);
/* je réaffecte la variable ligne_precedent_vide selon l'etat de la ligne courante
if (ligne==vide)
ligne_precedent_vide=true
sinon
ligne_precedent_vide=false;
passer a la ligne suivante();
}
commentaire :
l'idée est de mettre les données dans un tableau temporaire comme vous avez le dit, et de crée une variable pour sauvegarder l'etat de la ligne précédent (ligne_precedent_vide) puis parcourir le tableau et inserer les lignes simple (càd : ligne !=vide ) et les lignes vide dont la ligne precedent est vide (Càd: (ligne=vide) ou (ligne_precedent_vide=vide))
volia j'espère que j'était clair , essaye de décortiquer l'algorithme pour comprendre mon idée.
a+
si j'ai comprend bien le problème voila l'idée ce forme d'un algorithme :
/* initialisation : j'initialise la variable ligne_precedent_vide selon la premiere ligne
si (premier ligne==vide) ligne_precedent_vide=faux;
sinon
ligne_precedent_vide=vrai;
/* j'insert la premier ligne dans le bd
insérer première ligne dans bd();
/* je parcoure le tableau et j'insert les lignes simple et les lignes vide dont la ligne précédent est aussi vide
pour (2eme ligne jusqu'a fin tableau) faire
si (((ligne==vide) et (ligne_precedent_vide ==vrai) ) ou (ligne non vide) ) {
inserer_ligne_mysql(ligne courante);
/* je réaffecte la variable ligne_precedent_vide selon l'etat de la ligne courante
if (ligne==vide)
ligne_precedent_vide=true
sinon
ligne_precedent_vide=false;
passer a la ligne suivante();
}
commentaire :
l'idée est de mettre les données dans un tableau temporaire comme vous avez le dit, et de crée une variable pour sauvegarder l'etat de la ligne précédent (ligne_precedent_vide) puis parcourir le tableau et inserer les lignes simple (càd : ligne !=vide ) et les lignes vide dont la ligne precedent est vide (Càd: (ligne=vide) ou (ligne_precedent_vide=vide))
volia j'espère que j'était clair , essaye de décortiquer l'algorithme pour comprendre mon idée.
a+