Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/12/2012, 18h03   #1
loribac
Membre à l'essai
 
Homme
Inscription : juin 2012
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juin 2012
Messages : 151
Points : 23
Points : 23
Par défaut Afficher le chiffre le plus proche de 0

Bonsoir;

J 'ai un fichier txt ou je recup les distances voici la structure du fichier txt


==============================================
174 , 5275 , 929 , 5275 , 156 , 169 , 5275 , 341
==============================================
ce sont des distances je voudrais afficher dans mon script que le plus petit ici 156

Voici le script de recup

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
<?php
 
$fp = fopen("dist.txt", "r");
$dist=fread($fp,2000);fclose($fp);
 
?
?
?
 
echo("le plus petit");  ???
 
?>

Voila la je ne sais pas faire : si je trouve un chiffre le plus proche de zero alors afficher ce chiffre

j 'ai essayé avec des split et autre mais rien afaire


Cordialement
loribac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 19h20   #2
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 561
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 18 561
Points : 66 550
Points : 66 550
Citation:
Afficher le chiffre le plus proche de 0
J'aurais tendance à dire


Plus sérieusement,
Citation:
j 'ai essayé avec des split et autre mais rien afaire
Montre-nous ce que tu as testé, on pourra te dire ce qui ne va pas...
Parce qu'à priori, un str_split puis un sort devraient suffire...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 19h21   #3
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 675
Points : 3 675
Salut

J'ai tendance à dire que c'est un cas d'école, le genre de truc qu'il est bon de trouver seul, sans aide, à part éplucher la doc de Php et les fonctions.

En 1er je dirais si tu n'aurais pas la possibilité de (re)formater le contenu de dist.txt (donc dès sa création) en supprimant ce qui est inutile, comme les espaces, puis d'utiliser un séparateur plus conventionnel, comme le ; (point virgule).

Pour obtenir une chaine comme : 174;5275;929;5275;156;169;5275;341


Mise à par ça, on obtient en 1er cette chaine dans $dist.
Appliquer un simple str_replace() pour supprimer ces espaces inutiles.
Ensuite explode(',', $dist) pour stocker tous les chiffres dans un tableau.
Enfin un sort($chiffres, SORT_NUMERIC) pour trier le tableau du plus petit au plus grand.
Le 1er élément sera alors le nombre le plus petit.

Il y a peut être plus simple, ou plus optimisé, c'est quasi certain.

Si tu veux faire du Php, prends au moins le temps maitriser les fonctions de bases, sinon tu ne cesseras de demander de l'aide pour des choses franchement simples.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 22h04   #4
loribac
Membre à l'essai
 
Homme
Inscription : juin 2012
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juin 2012
Messages : 151
Points : 23
Points : 23
Re , pour l 'instant j 'ai ceci

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
<?php
 
 
$fp = fopen("dist.txt", "r");
$dist=fread($fp,2000);fclose($fp);
 
 
 
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
 
$str = "$dist";
 
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
 
$arr1 = str_split($str,4);
 
print_r($arr1);
ce qui donne ceci

==========================================================
Array ( [0] => 179; [1] => 535; [2] => 831; [3] => 851; [4] => 856; [5] => 849; [6] => 858; [7] => 834; [8] => 162; [9] => 605; [10] => 845; [11] => 562; [12] => 624; [13] => 641; [14] => 660; [15] => 710; [16] => 619; [17] => 669; [18] => 831; [19] => 615; [20] => 840; [21] => 701; [22] => 539; [23] => 551; [24] => 530; [25] => 834; [26] => 546; [27] => 708; [28] => 656; [29] => 520; [30] => 665; [31] => 706; [32] => 836; [33] => 846; [34] => 552; [35] => 660; [36] => 515; [37] => 525; [38] => 829; [39] => 835; [40] => 833; [41] => 833; [42] => 833; [43] => 830; [44] => 634; [45] => 535; [46] => 662; [47] => 659; [48] => 651; [49] => 644; [50] => 559; [51] => 576; [52] => 636; [53] => 637; [54] => 578; [55] => 682; [56] => 718; [57] => 658; [58] => 647; [59] => 696; [60] => 530; [61] => 520; [62] => 557; [63] => 521; [64] => 526; [65] => 697; [66] => 870; [67] => 618; [68] => 541; [69] => 845; [70] => 584; [71] => 630; [72] => 907; [73] => 881; [74] => 643; [75] => 644; [76] => 650; [77] => 727; [78] => 859; )

=========================================================
la suite a venir
loribac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2012, 23h21   #5
loribac
Membre à l'essai
 
Homme
Inscription : juin 2012
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juin 2012
Messages : 151
Points : 23
Points : 23
C est bon j 'ai trouvé

Voici le code si cela peut servir à qq


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
 
<?php
 
//1 recup des données des distance en km
$fp = fopen("donnees.txt", "r");
$dist=fread($fp,2000);fclose($fp);
 
 
//2 remplacement des ;;
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
$str = "$dist";
 
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
$arr1 = str_split($str,4);
 
 
 
 sort($arr1, SORT_NUMERIC); 
  print_r($arr1);
 
 
 
?>
@+
loribac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2012, 01h20   #6
loribac
Membre à l'essai
 
Homme
Inscription : juin 2012
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juin 2012
Messages : 151
Points : 23
Points : 23
RE,

Une question encore,

Je ne trouve pas le moyen d'ecrire le reultat de print_r($arr1); dans un fichier txt

est ce possible ??


cdt
loribac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2012, 05h08   #7
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 675
Points : 3 675
Citation:
Envoyé par loribac
Je ne trouve pas le moyen d'ecrire le reultat de print_r($arr1); dans un fichier txt

est ce possible ??
En très peu de temps on t'as dit qu'il faut consulter la doc de Php, c'est la bible
De plus elle est très bien faite, faut pas s'en priver.

Mais encore, il y a le NET (moteur de recherche).
Tu veux écrire dans un fichier et bien recherche avec ces termes et tu auras de multitudes réponses et solutions.

Je t'assure qu'en procédant ainsi c'est largement plus efficace que t'a méthode qui n'est autre que de supposer que telle ou telle fonction ferait ceci ou cela car elle effectue déjà ça.
Méthode franchement hasardeuse, que de temps perdu.


Donc lit la doc pour cette fonction print_r().
Question : est-ce qu'il est écrit quelque part quelle permettrait d'écrire dans un fichier ?

Perso je lis ceci :
Citation:
Envoyé par Doc Php
[B]print_r() affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible.
C'est écrit : affiche.
Que je sache, affiche n'est pas l'équivalent (ou synonyme) de écrire, non ?


Ton problème c'est que tu inventes ou/et interprètes les choses.
Un langage de programmation ça ne s'invente pas, ça s'apprend
Sauf erreur
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2012, 10h59   #8
jreaux62
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 3 778
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 46
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 3 778
Points : 7 778
Points : 7 778
Envoyer un message via Skype™ à jreaux62
Bonjour,
un cas similaire a été traité récemment ici : Stocker valeur compteur de clics
Voir le script de compteur.php : à adapter.

Et aussi => FAQ PHP : ouverture/lecture/écriture... d'un fichier
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
"Quand le sage montre la lune, le sot regarde le doigt."
Confucius, Homme d'Etat et philosophe chinois (551-479 av. J.-C).
Site perso Mes tutos DVP
Gestion-Affichage de Nouvelles Affichage en tableau HTML Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 19h02   #9
loribac
Membre à l'essai
 
Homme
Inscription : juin 2012
Messages : 151
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : juin 2012
Messages : 151
Points : 23
Points : 23
bonjour et merci pour les liens jreaux62

J 'ai donc étudié la doc php , mais la autre problème

Je vais exposer le problème en espérant froisser personne .....


Mon fichier txt : 130;176;175;967;93;141;136;135;142;194; fichier dist.txt


Mon code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
$fp = fopen("dist.txt", "r");
$dist=fread($fp,2000);fclose($fp);
 
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
$str = "$dist";
 
if(strstr($dist, ';;')) 
$dist = str_replace(';;', '', $dist); 
 
 
$arr1 = str_split($str,4);
 
 
print_r($arr1);
Le résulta dans le tableau

Array ( [0] => 130; [1] => 176; [2] => 175; [3] => 967; [4] => 93;1 [5] => 41;1 [6] => 36;1 [7] => 35;1 [8] => 42;1 [9] => 94; )

Bon je comprend bien que tout viens de cette partie : $arr1 = str_split($str,4); et que cela viens du découpage de la chaîne mais je ne trouve pas d'explication a cela dans la doc ou même une autre fonction

En m 'excusant d avance de la simplicité de ma question auprès des membres du forum
loribac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 19h50   #10
RunCodePhp
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 965
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 965
Points : 3 675
Points : 3 675
L'explication vient du fonctionnement de la fonction str_split() qui n'est pas adapté dans ton cas.

D'ailleurs je t'avais suggéré la fonction explode() qui est plus simple à comprendre qui plus est, plus adapté (voit totalement).

Je m'explique.
La fonction str_split(), comme cela est décrit dans la doc, va découper la chaine selon un nombre de caractère défini en 2ème paramètre : ici tu as mis 4.

Cette fonction ne tiens pas la route (mauvais choix de fonction) car les nombres que composent la chaine ont un nombre de caractères variables.
Entre autre : 130 (3 caractères) et 93 (2 caractères).
De plus, les ; (points virgules) sont encore présent (font partie de chaque nombre).

Pourtant, ces ; sont là pour aider/faciliter la récupération de chaque nombre, ils ne sont pas là pour de la décoration.
Ce sont des séparateur (ou délimiteurs), c'est ça "le truc" qu'il fallait (ou il faut) exploiter.


La fonction explode a un fonctionnement radicalement différent (rien à voir même).
Son fonctionnement tient compte d'un élément séparateur (ou délimiteur).
La chaine, c'est à dire le contenu du fichier contient un séparateur : des points virgules ; (autant dire du pain béni).
Ils y sont, faut juste les exploiter.
C'est ça qui va permettre de récupérer chaque nombre, cela quelque soit le nombre de caractères (93 : 2 caractère, 575 : 3 caractères, etc ...).

Faut pas chercher plus loin, plus compliqué.


D'ailleurs, ce n'est pas pour rien qu'au début je t'avais suggéré de supprimer ces espaces superflus qui séparent chaque nombre, car des espaces sont des caractères à part entière.
Non seulement ces espaces ne servent à rien, mais pire, ils fiches la zizanie.

Donc je le répète à nouveau.
Au lieu de se prendre la tête à appliquer la fonction str_replace() pour supprimer ces espaces qui embêtent plus qu'autre chose pour ne conserver que les ; et rien d'autre comme séparateur, le plus simple serait de revoir le code qui crée se fichier dist.txt à l'origine (quitte à le faire à la mano) en écrivant ces nombres sans espaces donc juste en les séparant avec des ; et uniquement.
Si cela est fait il n'y aura plus besoin d'appliquer la fonction str_replace().
On somme on se simplifie la vie (et le code par la suite).
Ce point est juste une parenthèse.


Si on revient à cette fonction explode(), on lui passe 2 informations (ou 2 paramètres) :
- en 1er le séparateur -> ici le ;
- La chaine ->$dist

Un exemple en occultant le fichier (en partant de $dist)
Code :
1
2
3
4
5
<?php
$dist = '1;7894;23;456789123;97';
$nombres = explode(';', $dist);
print_r($nombre);
?>
Devrait afficher : (soit chaque élément du tableau $nombres)
1
7894
23
456789123
97
On peu difficilement faire plus simple


La doc de Php de la fonction : explode
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h13.


 
 
 
 
Partenaires

Hébergement Web