[PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtotime)
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

[PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtotime)



  1. #1
    Pollux32

    [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtotime)


    ------

    Bonjour,

    Dans une discussion précédente je faisais entre état d'un problème d'affichage de dates pour l'axe X dans JpGraph
    J'ai analysé ce que j'injectais dans le graphe et je remarque un problème avec le 1er élément.
    Il y a bien une date lue ($data[ 0 ]) , mais elle n'est pas placée dans le tableau.
    Où est donc mon erreur ?

    Merci d'avance pour vos pistes !

    NB, vous pouvez trouver le fichier .csv à cette adresse dropbox

    Code:
    for ( $i = 0; $i < 36; $i++ ) {
      $data = explode( ";", $Fichier[ $i ] );  
     // stockage dates et heures et minutes
      $ws_dt[ $i ] = strtotime( $data[ 0 ] ); //
      echo $data[ 0 ] . ' ' . $ws_dt[ $i ] . ' '. strftime("%d/%m/%Y %H:%M",$ws_dt[ $i ] )  . '<br>';
    (code complet plus bas)

    Donne
    20-10-2020 09:30 01/01/1970 00:00
    20-10-2020 09:35 1603186500 20/10/2020 09:35
    20-10-2020 09:40 1603186800 20/10/2020 09:40
    20-10-2020 09:45 1603187100 20/10/2020 09:45
    20-10-2020 09:50 1603187400 20/10/2020 09:50
    Code:
    <?php
    setlocale( LC_ALL, "fr_FR" );
    $ws_pr_x = 0; // pression maX
    $ws_pr_n = 9999; // pression miN
    $Fichier = file( 'meteo_24h.csv' );
    	
    //déclaration tableaux	
    $ws_dt=[];	// dates
    $ws_prb=[]; // 'basses' pressions (<1015)
    $ws_prh=[]; // 'hautes' pressions
    
    for ( $i = 0; $i < 36; $i++ ) {
      $data = explode( ";", $Fichier[ $i ] );
      /* 
      0 date et heure
      1 pression
      2 temp
      3 hum
      4 rain
      5 rain rate
      6 direction du vent en chiffres
      7 idem en lettres
      8 vent
      9 rafales
      */
    
      // stockage dates et heures et minutes
      $ws_dt[ $i ] = strtotime( $data[ 0 ] ); //
      echo $data[ 0 ] . ' ' . $ws_dt[ $i ] . ' '. strftime("%d/%m/%Y %H:%M",$ws_dt[ $i ] )  . '<br>';
      // stockage pressions
      $data[ 1 ] = str_replace( ",", ".", $data[ 1 ] ); // remplace les virgules par des points
      // Détermination des pression min et max
      if ( $ws_pr_x < $data[ 1 ] )$ws_pr_x = $data[ 1 ]; //pression maX
      if ( $ws_pr_n > $data[ 1 ] )$ws_pr_n = $data[ 1 ]; //pression miN
      // création des séries, la première, $ws_prb, pour les basses pressions, limitée à 1015 ; la seconde, $ws_prh, pour les hautes pressions 
      if ( $data[ 1 ] > 1015 ) {
        $ws_prb[ $i ] = 1015;
        $ws_prh[ $i ] = $data[ 1 ] - 1015;
      } else {
        $ws_prb[ $i ] = $data[ 1 ];
        $ws_prh[ $i ] = 0;
      }
    } // fin de la lecture du fichier

    -----
    Dernière modification par Pollux32 ; 27/10/2020 à 09h12.

  2. #2
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Dans une discussion précédente je faisais, entre autre, état d'un problème d'affichage
    Dernière modification par Pollux32 ; 27/10/2020 à 09h21.

  3. #3
    umfred

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Je ne sais pas si c'est l'origine du problème, mais en ouvrant le fichier avec un éditeur hexa, j'ai remarqué 3 caractères non-imprimables en tête du fichier qui peuvent peut-être expliquer le problème.
    Il faudrait afficher la longueur de $data[0] pour voir si la 1ère date est plus longue que les suivantes.

  4. #4
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Bonjour umfred,

    Bravo et merci pour cette perspicacité ! J'ai retiré ces 3 octets litigieux et la conversion strtotime fonctionne bien.
    Désolé pour le temps de réponse, mais comme ce fichier CSV est construit en VB.NET, j'ai passé du temps a corriger le problème.

    Par contre, cela ne fonctionne toujours pas pour le graphique.

    Nom : 2020.10.29 10.07001 PC-POLLUX.png
Affichages : 126
Taille : 27,0 Ko

    Code:
    <?php
    require_once( '../jpgraph/jpgraph.php' );
    require_once( '../jpgraph/jpgraph_bar.php' );
    require_once( '../jpgraph/jpgraph_date.php' );
    
    setlocale( LC_ALL, "fr_FR" );
    
    $ws_pr_x = 0; // pression maX
    $ws_pr_n = 9999; // pression miN
    $Fichier = file( 'meteo_24h.csv' );
    
    for ( $i = 0; $i < 36; $i++ ) {
      $data = explode( ";", $Fichier[ $i ] );
      /* 
      0 date et heure
      1 pression
      2 temp
      3 hum
      4 rain
      5 rain rate
      6 direction du vent en chiffres
      7 idem en lettres
      8 vent
      9 rafales
      */
    
      // stockage dates et heures et minutes
      $ws_dt[ $i ] = strtotime( $data[ 0 ] ); // OK
      // stockage pressions
      $data[ 1 ] = str_replace( ",", ".", $data[ 1 ] ); // remplace les virgules par des points
      // Détermination des pression min et max
      if ( $ws_pr_x < $data[ 1 ] )$ws_pr_x = $data[ 1 ]; //pression maX
      if ( $ws_pr_n > $data[ 1 ] )$ws_pr_n = $data[ 1 ]; //pression miN
      // création des séries, la première, $ws_prb, pour les basses pressions, limitée à 1015 ; la seconde, $ws_prh, pour les hautes pressions 
      if ( $data[ 1 ] > 1015 ) {
        $ws_prb[ $i ] = 1015;
        $ws_prh[ $i ] = $data[ 1 ] - 1015;
      } else {
        $ws_prb[ $i ] = $data[ 1 ];
        $ws_prh[ $i ] = 0;
      }
    } // fin de la lecture du fichier
    
    //---------------------------------------------------------------------------
    
    if ( $ws_pr_n > 1015 ) {
      $ws_pr_n = 1015;
    };
    //$ws_pr_n = ( int )$ws_pr_n - 1;
    //$ws_pr_x = ( int )$ws_pr_x + 1.9;
    $ws_pr_n -= 1;
    $ws_pr_x += 1;
    // Create the graph. These two calls are always required
    $graph = new Graph( 600, 400 );
    $graph->SetScale( "datlin", $ws_pr_n, $ws_pr_x ); // échelle de date, min et max en y
    
    //$graph->SetShadow();
    $graph->img->SetMargin( 60, 10, 10, 120 );
    
    // Create the bar plots
    $b1plot = new BarPlot( $ws_prb );
    $b1plot->SetFillColor( '#0000ff' ); //bleu
    $b2plot = new BarPlot( $ws_prh );
    $b2plot->SetFillColor( '#ffff00' ); //jaune
    
    // Create the grouped bar plot
    $gbplot = new AccBarPlot( array( $b1plot, $b2plot ) );
    
    //$graph->xaxis->SetTickLabels($ws_dt);
    // Set the angle for the labels to 90 degrees
    $graph->xaxis->SetLabelAngle( 90 );
    $graph->xaxis->SetPos( $ws_pr_n );
    // The automatic format string for dates can be overridden
    $graph->xaxis->scale->SetDateFormat( 'd/m/Y H:i' );
    //$graph->xaxis->scale->SetTimeAlign( DAYADJ_1 );
    
    //transparence
    //$graph->SetFrame(true,'black:0', 1); 
    //$graph->img->SetTransparent('black');
    
    // ...and add it to the graPH
    $graph->Add( $gbplot );
    
    //$graph->xaxis->title->Set("X-title");
    //$graph->yaxis->title->Set( "hPA" );
    
    $graph->title->SetFont( FF_FONT1, FS_BOLD );
    $graph->yaxis->title->SetFont( FF_FONT1, FS_BOLD );
    $graph->xaxis->title->SetFont( FF_FONT1, FS_BOLD );
    
    // Display the graph
    $graph->Stroke();
    ?>

  5. A voir en vidéo sur Futura
  6. #5
    umfred

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    ça ne fonctionnait pas avant, sans faire la conversion en type date ? avec le changement d'ordre de certaines lignes

    Je viens de voir que tu as commenté ligne //$graph->xaxis->SetTickLabels($ws_dt);
    celle qui est censé affecté tes dates à l'axe x; ça peut expliquer ton problème d'affichage des dates

  7. #6
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Bonjour,

    Oui $graph->xaxis->SetTickLabels($ws_dt); affiche le nombre timestamp, ce qui est assez logique puisque c'est ce qu'il contient
    ce n'est qu'un label, j'imagine qu'on peut le formater ?
    Dernière modification par Pollux32 ; 29/10/2020 à 13h23.

  8. #7
    umfred

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Mais je t'indiquais que cette ligne était commentée donc tu n'affectais rien en X, ce qui explique sans doute que tu as des dates erronées sur ton graphe

  9. #8
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    D'accord d'accord, je suis parfois un peu dur de comperdure

    Donc, si je décommente, j'ai ceci :

    Nom : 2020.10.29 17.18002 PC-POLLUX.png
Affichages : 119
Taille : 29,7 Ko

  10. #9
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Ce qui est normal, car ce sont bien QUE des label, et en rien des données de temps. https://jpgraph.net/download/manuals..._SETTICKLABELS
    Je ne trouve aucun exemple d'histogramme (dot) avec des timestamp en X...

  11. #10
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Code:
    $dt_x=array();
    foreach ($ws_dt AS $val)
    	{
    	$dt_x[]=date("d/m/Y h:i",$val);
    	}
    $graph->xaxis->SetTickLabels($dt_x);
    Mais cela reste des étiquettes...

  12. #11
    Pollux32

    Re : [PHP] problème avec la lecture d'un fichier vers tableau et le 1er élément (une date et strtoti

    Pour finir, j'ai résolu mon problème de dates en abandonnant l'idée d'utiliser des barres. C'était bon quand je n'avait qu'un relevé par heure.
    J'utilise donc des lignes, plutôt des surfaces, non cumulées. Les hautes pressions en jaune derrière, et les basses pressions (<=1015) devant en bleu.
    C'est l'effet que je recherchais.
    J'ai un autre problème, mais j'ouvre une nouvelle discussion

Discussions similaires

  1. Lecture fichier audio sur un NAS avec un uC
    Par Max_Pof dans le forum Électronique
    Réponses: 15
    Dernier message: 15/04/2014, 14h10
  2. lecture de fichier avec matrices
    Par invite17761f0f dans le forum Programmation et langages, Algorithmique
    Réponses: 15
    Dernier message: 12/12/2012, 22h05
  3. Problème de lecture de fichier .wav avec ADC et µC
    Par fdamien12 dans le forum Électronique
    Réponses: 3
    Dernier message: 28/10/2011, 12h42
  4. Lecture fichier avec 'idl'
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 27/06/2008, 15h36
  5. probleme avec vista -> lecture du son avec fichier .mpg
    Par invite7f1547ae dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 23/01/2008, 22h28