+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    juin 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juin 2012
    Messages : 241
    Points : 34
    Points
    34

    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

  2. #2
    Responsable Développement Web


    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    22 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : juin 2008
    Messages : 22 568
    Points : 87 732
    Points
    87 732
    Billets dans le blog
    4

    Par défaut

    Afficher le chiffre le plus proche de 0
    J'aurais tendance à dire


    Plus sérieusement,
    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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 963
    Points : 3 910
    Points
    3 910

    Par défaut

    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]

  4. #4
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    juin 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juin 2012
    Messages : 241
    Points : 34
    Points
    34

    Par défaut

    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

  5. #5
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    juin 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juin 2012
    Messages : 241
    Points : 34
    Points
    34

    Par défaut

    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);
     
     
     
    ?>
    @+

  6. #6
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    juin 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juin 2012
    Messages : 241
    Points : 34
    Points
    34

    Par défaut

    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

  7. #7
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 963
    Points : 3 910
    Points
    3 910

    Par défaut

    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]

  8. #8
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    5 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

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

    Informations forums :
    Inscription : août 2008
    Messages : 5 433
    Points : 10 470
    Points
    10 470

    Par défaut

    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
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  9. #9
    Nouveau Membre du Club
    Homme Profil pro
    Inscrit en
    juin 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : juin 2012
    Messages : 241
    Points : 34
    Points
    34

    Par défaut

    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

  10. #10
    Expert Confirmé Avatar de RunCodePhp
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : janvier 2010
    Messages : 2 963
    Points : 3 910
    Points
    3 910

    Par défaut

    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]

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •