Page 1 sur 1

Extraire des données d'un fichier

Posté : 02 mars 2010, 10:45
par Yannou75013
Bonjour à tous
j'aimerais traiter un fichier de données dont je voudrais n'en extraire que celles qui m'intéressent et les coller dans un fichier vierge afin de les traiter par la suite.
j'ai déjà un code qui me permet de compiler tous mes fichiers de données en un seul. Je veux garder ce fichier et en créer un autre avec les données selectionnées sous forme de tableau
comment puis-je faire ?
Merci d'avance

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 11:28
par ouckileou
Quel est le format du fichier ? CSV, XML, ... ?

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 11:38
par Yannou75013
il s'agit d'un fichier texte en voici un exemple :
-------- SESSION START ---------
STUDENT: 35050 COURSE: 29C1
BOOK: X:\1318\1318.tbk
---- LOG START ---- 2010 02 25 11 26

Q=1 : E=Response! : R=<else> "m"
Q=1 : E=Response! : R=<else> "Nous voulons"
Q=1 : E=Response! : R=<else> "Nous voulons mettre en valeur les qualit|ts du chien"
Q=1 : E=Response! : R=<else> "Nous voulons mettre en valeur les qualit|ts du chien par rapport au standard"
Q=1 : E=Response! : R=<else> "Nous voulons mettre en valeur les qualit|ts du chien par rapport au standard "
Q=2 : E=Response! : R=<else> "ll"
Q=2 : E=Response! : R=<else> "ll "
Q=3 : E=Response! : R=<else> "l"
Q=4 : E=Response! : R=<else> "m"
Q=5 : E=Response! : R=<else> "mm"
Q=5 : E=Response! : R=<else> "mm "
Q=5 : E=Response! : R=<else> "mm*"
Q=6 : E=Response! : R=<else> "l"
Q=7 : E=Response! : R=<else> "m"
Q=8 : E=Response! : R=<else> "mm"
Q=1 : E=Response! : R=<it contains "mettre en valeur" and it contains "qualité" and it contains "standard" and it contains "longueur" and it contains "finesse" and it contains "chanfrein" and it contains "oeil" and it contains "amande" and it contains "ciselure" and it contains "mâchoire" and it contains "port" and it contains "tête" and it contains "sortie" and it contains "encolure" and it contains "longueur" and it contains "oreille" and it contains "qualité" and it contains "tenue" and it contains "aspect" and it contains "noble" and it contains "fier"> "Nous voulons mettre en valeur les qualit|ts du chien par rapport au standard, et en particulier :|l- montrer la longueur et la finesse du chanfrein,|l- souligner l'oeil en amande,|l- mettre en valeur la ciselure de la mâchoire,|l- am|tliorer le port d[...]"
Q=1 : E=Locked! : R=<it contains "mettre en valeur" and it contains "qualité" and it contains "standard" and it contains "longueur" and it contains "finesse" and it contains "chanfrein" and it contains "oeil" and it contains "amande" and it contains "ciselure" and it contains "mâchoire" and it contains "port" and it contains "tête" and it contains "sortie" and it contains "encolure" and it contains "longueur" and it contains "oreille" and it contains "qualité" and it contains "tenue" and it contains "aspect" and it contains "noble" and it contains "fier"> "Nous voulons mettre en valeur les qualit|ts du chien par rapport au standard, et en particulier :|l- montrer la longueur et la finesse du chanfrein,|l- souligner l'oeil en amande,|l- mettre en valeur la ciselure de la mâchoire,|l- am|tliorer le port d[...]"
Q=2 : E=Response! : R=<it contains "bien" and it contains "lavé" and it contains "défrisé" and it contains "mousse" and it contains "laisse" and it contains "trait" and it contains "arrière" and it contains "coin de l'oeil" and it contains "élastiques" and it contains "arc de cercle" and it contains "Séparer" and it contains "nouvelle mèche" and it contains "attacher" and it contains "première mèche"> "Le poil doit |ltre bien lav|t et d|tfris|t, de pr|tf|trence à l'aide de produits durcissants, tels que les mousses. Il faut tout d'abord ne pas oublier de mettre en place la laisse de pr|tsentation. Tracer un trait allant de l'arrière du coin de l'oei[...]"
Q=2 : E=Locked! : R=<it contains "bien" and it contains "lavé" and it contains "défrisé" and it contains "mousse" and it contains "laisse" and it contains "trait" and it contains "arrière" and it contains "coin de l'oeil" and it contains "élastiques" and it contains "arc de cercle" and it contains "Séparer" and it contains "nouvelle mèche" and it contains "attacher" and it contains "première mèche"> "Le poil doit |ltre bien lav|t et d|tfris|t, de pr|tf|trence à l'aide de produits durcissants, tels que les mousses. Il faut tout d'abord ne pas oublier de mettre en place la laisse de pr|tsentation. Tracer un trait allant de l'arrière du coin de l'oei[...]"
Q=3 : E=Response! : R=<it contains "une heure" or it contains "1 heure"> "une heure"
Q=3 : E=Locked! : R=<it contains "une heure" or it contains "1 heure"> "une heure"
Q=4 : E=Response! : R=<it contains "France" and it contains "principe" and it contains "interdit" and it contains "modération" and it contains "peu visible"> "en France, c'est en principe interdit. IL faut donc le faire avec mod|tration, et de pr|tf|trence de manière peu visible."
Q=4 : E=Locked! : R=<it contains "France" and it contains "principe" and it contains "interdit" and it contains "modération" and it contains "peu visible"> "en France, c'est en principe interdit. IL faut donc le faire avec mod|tration, et de pr|tf|trence de manière peu visible."
Q=5 : E=Response! : R=<it contains "coupe" and it contains "élastique" and it contains "soin" and it contains "crème" and it contains "adoucir" and it contains "chouchou" and it contains "relave" and it contains "aussitôt" and it contains "possible"> "On coupe les |tlastiques avec beaucoup de soin. On passe une crème sur le poil pour l'adoucir, et on met en place un ou plusieurs chouchous. On relave le chien aussitôt que possible."
Q=5 : E=Locked! : R=<it contains "coupe" and it contains "élastique" and it contains "soin" and it contains "crème" and it contains "adoucir" and it contains "chouchou" and it contains "relave" and it contains "aussitôt" and it contains "possible"> "On coupe les |tlastiques avec beaucoup de soin. On passe une crème sur le poil pour l'adoucir, et on met en place un ou plusieurs chouchous. On relave le chien aussitôt que possible."
Q=6 : E=Response! : R=<it contains "24 heures"> "24 heures"
Q=6 : E=Locked! : R=<it contains "24 heures"> "24 heures"
Q=7 : E=Response! : R=<it contains "protection" and it contains "évit" and it contains "ridicul"> "Il faut assurer la meilleure protection du pelage, tout en |tvitant de ridiculiser le chien !"
Q=7 : E=Locked! : R=<it contains "protection" and it contains "évit" and it contains "ridicul"> "Il faut assurer la meilleure protection du pelage, tout en |tvitant de ridiculiser le chien !"
Q=8 : E=Response! : R=<it contains "passer le peigne" and it contains "au-dessus" and it contains "élastique"> "Il faut toujours passer le peigne au-dessus de l'|tlastique pour |ltre sûr de ne pas risquer la perte de l'oreille !"
Q=8 : E=Locked! : R=<it contains "passer le peigne" and it contains "au-dessus" and it contains "élastique"> "Il faut toujours passer le peigne au-dessus de l'|tlastique pour |ltre sûr de ne pas risquer la perte de l'oreille !"
Q= du quizz ! : E=ShowScore! : S=8,8
Q=Appréciation de l'étudiant : E=Response! : R=<else> "10"

---- SESSION END ---- 13:46:52
Total session time: 02:20:37
Final Score: 8/8

moi je veux extraire de ce fichier : le code etudiant (n° à coté de STUDENT) ; le code du cours (N° à côté de COURSE) ; la date (apres log start) sans les heures et les resutats Final score

et mettre toutes ces données sous forme de tableau

Merci beaucoup de ton aide

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 12:13
par ouckileou
Wow...

C'est pour ça qu'on inventé le CVS ou le XML, pour avoir un format standard de données, délimitées par des virgules ou des points-virgules, des balises, de sorte que chaque langage puisse proposer des fonctions toutes faites pour lire les données, ou en créer.

Là je crois que tu vas devoir utiliser les fonctions basiques de lecture de fichiers... ton numéro étudiant a-t-il toujours la même longueur ? Est-il toujours composé de chiffres uniquement ? Tu pourrais à la rigueur récupérer ce qui est entre "STUDENT:" et "COURSE:" avec une expression régulière et faire un trim() dessus pour enlever les espaces.

Pareil pour le reste, essayer d'identifier des repères...

:arrow: http://www.php.net/manual/fr/ref.filesystem.php

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 12:26
par yannou75013
Merci beaucoup pour toutes ces réponses (et le lien vers les commandes...)
alors logiquement oui, STUDENT est toujours de la même forme (5 chiffres), mais il arrive que les eleves mettent leur nom à la place de leur code... sinon ce serait trop facile lol
je vais tenter de faire comme tu m'a dis.
aujourdh'hui on untilise une macro de word pour traiter ces fichier, mais elle est lourde et plante régulièrement (notament quand le fichier est trop volumineux) je voulais donc essayer de simplifier les chose.

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 12:35
par ouckileou
Tu as la main sur le format de sortie ?

À ta place je tenterai vraiment d'utiliser un format standard pour tes données de sorties, ce sera beaucoup plus simple à traiter par la suite, et plus sûr. Tu n'auras pas à penser à tous les cas possibles, typiquement le nom à place du code. Si la valeur est encadrée par deux balises, tu t'en fous, tu prends ce qu'il y a entre les deux et c'est bon.

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 12:41
par yannou75013
Ah oui effectivement ce serait plus facile.
aujourd'hui je fait un copier coller des mes fichiers que je reçois par mail et ça me genere donc un fichier .txt général grace à ce code :

<?php

$RepertoireTraitement = "c:/AudrecoLog/";

$Txt = '';

$Repertoire = opendir($RepertoireTraitement);

while (false !== ($AudrecoLog = readdir($Repertoire)))
{

$Fichier = fopen("$RepertoireTraitement"."$AudrecoLog", "r");
$FichierTaille = filesize("$RepertoireTraitement"."$AudrecoLog");
$Txt .= fread($Fichier, $FichierTaille);
fclose($Fichier);
unlink("$RepertoireTraitement"."$AudrecoLog");
$Txt .= "\r\n";

}

closedir($Repertoire);

$Horodatage = date('YmdHis');
$GrandFichier = "AudrecoLogRegroupement$Horodatage.txt";
$GrandFichier = fopen ("$RepertoireTraitement"."$GrandFichier", "w");
fputs($GrandFichier, $Txt);
fclose($GrandFichier);

?>

Puis changer ce .txt en .csv ?

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 13:09
par blof
bonjour,

en utilisant les expressions régulières :
<pre>
<?php
$txt = '-------- SESSION START ---------
STUDENT: 35050 COURSE: 29C1
BOOK: X:\1318\1318.tbk
---- LOG START ---- 2010 02 25 11 26

Q=1 : E=Response! : R=<else> "m"

... etc ...

-------- SESSION START ---------
STUDENT: 35999 COURSE: 30X8
BOOK: X:\1318\1318.tbk
---- LOG START ---- 2010 03 02 11 26

Q=1 : E=Response! : R=<else> "m"

... etc ...
';

echo "$txt\n#######################\n\n";

preg_match_all('/STUDENT: (\d+) +COURSE: (\w+)\b.+---- LOG START ---- (\d+ \d+ \d+) /Us', $txt, $v);

echo "\n<b>tableau \$v[1] :</b>\n";
print_r($v[1]);
echo "\n<b>tableau \$v[2] :</b>\n";
print_r($v[2]);
echo "\n<b>tableau \$v[3] :</b>\n";
print_r($v[3]);


?>
</pre>
=> http://lumadis.be/regex/tuto_pcre.php

Re: Extraire des données d'un fichier

Posté : 02 mars 2010, 13:42
par yannou75013
Merci à vous deux
si je comprend bien $v permet d'extraire la donnée que l'on veut ?