Mon script donne des faux résultats
Résolu/Fermé
Amelie0528
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
-
Modifié par Amelie0528 le 4/02/2016 à 15:00
karl - 27 oct. 2016 à 10:42
karl - 27 oct. 2016 à 10:42
A voir également:
- Mon script donne des faux résultats
- Script vidéo youtube - Guide
- Lexer resultats - Télécharger - Sport
- Resultats foot - Télécharger - Vie quotidienne
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
2 réponses
Mimiste
Messages postés
1149
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
206
4 févr. 2016 à 15:17
4 févr. 2016 à 15:17
bonjour
j'ai pas regardé dans le détail si il y a une erreur mais, pour commencer, dans ton CSV t'aurai pas une valeur qui peux servir d'identifiant ? Une valeur unique par ligne et qui donc servirait à être comparée. Plutôt que de tester des lignes entières avec strcomp
j'ai pas regardé dans le détail si il y a une erreur mais, pour commencer, dans ton CSV t'aurai pas une valeur qui peux servir d'identifiant ? Une valeur unique par ligne et qui donc servirait à être comparée. Plutôt que de tester des lignes entières avec strcomp
Mimiste
Messages postés
1149
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
206
Modifié par Mimiste le 5/02/2016 à 14:57
Modifié par Mimiste le 5/02/2016 à 14:57
Voila ce que ça donne, c'est fonctionnel, juste adapter les chemins des fichiers
<?php $inputFilePath = "test.csv"; //fichier en entrée $outputFilePath = "seuil.txt"; //fichier en sortie $limitToCheck = 10; //seuil $pricePositionInCSV = 8; //position du prix dans le csv //Ouverture des fichiers d'entrée et de sortie $inputFileResource = fopen($inputFilePath,'r'); $outputFileResource = fopen($outputFilePath,'r+'); //On vérifie si l'ouverture des fichiers a réussie if ($inputFileResource && $outputFileResource){ //On parcours chaque ligne du fichier d'entrée while (!feof($inputFileResource)){ $lineInput = chop(fgets($inputFileResource)); //On extrait la ligne courante $ar = explode(";",$lineInput); $valueToTest = $ar[$pricePositionInCSV]; //On verifie si la valeur dépasse le seuil max if (floatval($valueToTest) >= $limitToCheck){ //La valeur dépasse la limite, on vérifie si elle a déja été ajoutée au fichier de sortie $found = false; rewind($outputFileResource); //On renvoi le curseur au debut du fichier while (!feof($outputFileResource)){ $lineOutput = chop(fgets($outputFileResource)); //On extrait la ligne courante if ($lineOutput == $lineInput){ //On compare la ligne en entrée avec la ligne du fichier de sortie $found = true; } } if ($found){ //On a trouvé une correspondance dans le fichier de sortie, on ne fait rien } else { //On a pas trouvé de correspondance dans le fichier, on ajoute la ligne //On place le curseur à la fin du fichier fseek($outputFileResource, 0, SEEK_END); //On écrit la ligne fwrite($outputFileResource, $lineInput."\r\n"); } } else { //La valeur ne dépasse pas la limite, on ne fait rien } } //On ferme les flux fclose($inputFileResource); fclose($outputFileResource); } ?>
Amelie0528
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
5 févr. 2016 à 15:25
5 févr. 2016 à 15:25
un grand merci Mimiste vous m'avez sauvé , c'est un code bien lisible et compréhensible
je adapté le fichier d'entré pour qu'il reçois mes csv car ils sont issus d'une boucle, cette adaptation à affecté cette ligne de votre code $valueToTest = $ar[$pricePositionInCSV];
par conséquence ça généré ce code d'erreur :
Notice: Undefined offset: 8 in C:\wamp\www\application\quotidien.php on line 37
si non voila ce que ça donne après l'adaptation
je adapté le fichier d'entré pour qu'il reçois mes csv car ils sont issus d'une boucle, cette adaptation à affecté cette ligne de votre code $valueToTest = $ar[$pricePositionInCSV];
par conséquence ça généré ce code d'erreur :
Notice: Undefined offset: 8 in C:\wamp\www\application\quotidien.php on line 37
si non voila ce que ça donne après l'adaptation
<?php // path du dossier CDR 0 remplacer par le chemin correspondant lors de la mise du script sur le serveur $dir = "C:\Users\Master\Desktop\quotidien\CDRs"; // Ouvre un dossier bien connu, et liste tous les fichiers if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if( $file == '.' || $file == '..' ) continue; $chaine= substr($file, 8, -4); $compteur= $chaine ; // path a remplacer lors de la mise du script sur le serveur //fichier en entrée $inputFilePath = "C:\Users\Master\Desktop\quotidien\CDRs\Pacetel_".$compteur.".cdr"; $outputFilePath = "C:\Users\Master\Desktop\quotidien\CDRtest\seuil.txt"; //fichier en sortie $limitToCheck = 10; //seuil $pricePositionInCSV = 8; //position du prix dans le csv //Ouverture des fichiers d'entrée et de sortie $inputFileResource = fopen($inputFilePath,'r'); $outputFileResource = fopen($outputFilePath,'r+'); //On vérifie si l'ouverture des fichiers a réussie if ($inputFileResource && $outputFileResource){ //On parcours chaque ligne du fichier d'entrée while (!feof($inputFileResource)){ $lineInput = chop(fgets($inputFileResource)); //On extrait la ligne courante $ar = explode(";",$lineInput); $valueToTest = $ar[$pricePositionInCSV]; //On verifie si la valeur dépasse le seuil max if (floatval($valueToTest) >= $limitToCheck){ //La valeur dépasse la limite, on vérifie si elle a déja été ajoutée au fichier de sortie $found = false; rewind($outputFileResource); //On renvoi le curseur au debut du fichier while (!feof($outputFileResource)){ $lineOutput = chop(fgets($outputFileResource)); //On extrait la ligne courante if ($lineOutput == $lineInput){ //On compare la ligne en entrée avec la ligne du fichier de sortie $found = true; } } if ($found){ //On a trouvé une correspondance dans le fichier de sortie, on ne fait rien } else { //On a pas trouvé de correspondance dans le fichier, on ajoute la ligne //On place le curseur à la fin du fichier fseek($outputFileResource, 0, SEEK_END); //On écrit la ligne fwrite($outputFileResource, $lineInput."\r\n"); } } else { //La valeur ne dépasse pas la limite, on ne fait rien } } //On ferme les flux fclose($inputFileResource); fclose($outputFileResource); } } } closedir($dh); } ?>
Amelie0528
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
5 févr. 2016 à 15:59
5 févr. 2016 à 15:59
j'ai fait un var_dump($valueToTest); ca montre que $valueToTest conntient bien les prix et la première ligne du csv est de type caractère , peut être c'est ça qui fait l'erreur!!
Mimiste
Messages postés
1149
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
206
Modifié par Mimiste le 5/02/2016 à 16:10
Modifié par Mimiste le 5/02/2016 à 16:10
ha oui c'est ligne par ligne, alors j'imagine que si t'a une ligne qui ne ressemble pas aux autres, genre qui n'est pas un csv, t'a un tour de boucle qui fera une erreur
Amelie0528
Messages postés
51
Date d'inscription
dimanche 2 novembre 2014
Statut
Membre
Dernière intervention
22 février 2016
>
Mimiste
Messages postés
1149
Date d'inscription
samedi 17 mai 2008
Statut
Membre
Dernière intervention
6 mars 2016
8 févr. 2016 à 11:08
8 févr. 2016 à 11:08
Merci Mimiste pour ce script , il est fonctionnel cela ma permis de bien avancer
4 févr. 2016 à 15:21
en faite j'ai aucune valeur qui peut être identifient dans mes csv et c'est là le problème.
mon responsable de stage me dit qu'il fallait comparait les deux lignes comme étant des chaines de caractères mais ça ne marchais pas non plus
4 févr. 2016 à 15:48
Un autre truc bizarre par contre c'est que tu vérifie si l'alerte est nouvelle, après avoir inséré la ligne dans le fichier cible
tu devrait plutôt d'abord tester la présence de la ligne qui dépasse le seuil puis seulement si elle n'existe pas déjà dans le fichier cible, l'insérer non ?
4 févr. 2016 à 16:24
4 févr. 2016 à 16:51
T'a fait un algo avant ? Papier ou autre, genre pour au moins lister les étapes que tu veux que ton code execute
Modifié par Amelie0528 le 4/02/2016 à 17:01
j'ai un autre version qui est plus lisible mais ne fonctionne pas , elle affiche les lignes qui dépasse le seuil mais n'arrive pas a savoir si l’alerte a était déjà donnais ou pas.
mon problème est que je suis débutant et mon responsable de stage n'est pas développeur il est plutôt réseaux, en fin bref , je galère comme ça depuis un mois , voila l'autre version du code