IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[CSV] Lecture de fichier CSV


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut [CSV] Lecture de fichier CSV
    Bonjour à tous
    j'ai regardé le tutoriel AJAX pour modifier en ligne un tableau avec des données provenants d'une BD http://olance.developpez.com/article...cation-inline/

    il se trouve que j'aimerai faire la même chose mais en prenant les données d'un fichier.csv (séparateur";")

    je ne connait pas le code pour ouvrir les fichiers .csv , j'ai trouvé celui ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $row = 1;
    $handle = fopen("test.csv", "r");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num champs à la ligne $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
    ?>
    mais il me provoque cette erreur, j'ai l'impression qu'il ne ferme j'amai la boucle???

    Warning: fopen("000ACR47820_1-1.csv", "r") - No such file or directory in c:\program files\easyphp\www\acrbo5\csvphp.php on line 3

    Warning: fgetcsv(): supplied argument is not a valid File-Handle resource in c:\program files\easyphp\www\acrbo5\csvphp.php on line 4

    0 champs à la ligne 1:

    Warning: fgetcsv(): supplied argument is not a valid File-Handle resource in c:\program files\easyphp\www\acrbo5\csvphp.php on line 4

    0 champs à la ligne 2:

    AINSI DESSUITE...

    De plus, je ne voit pas comment l'adapter avec ce code "modification en ligne"
    Si quelqu'un peut m'aider
    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    d'après le premier message, le problème est plutôt qu'il ne trouve pas le fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: fopen("000ACR47820_1-1.csv", "r") - No such file or directory in c:\program files\easyphp\www\acrbo5\csvphp.php on line 3
    Les erreurs suivantes sont donc inévitables

    A+

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Salut à tous
    ça y est, j'arrive à ouvrir mon fichier "000ACR47820_1-1.csv"(pour moi c'est énorme...)
    Il fallait juste que je le déplace dans le même dossier ou se trouve mon code php
    mais je préfère le mettre dans un dossier spécifique comment dois-je indiquer le chemin:
    Par exemple:j'ai mon code php dans le dossier tartampion, et je voudrais pouvoir mettre mon fichier "000ACR47820_1-1.csv" sous tartampion/fivhiercsv/

    Ensuite, il m'ouvre mon fichier csv en me mettan les données à la ligne les unes sous les autres et moi, j'aimerai faire ouvrir un tableau comme ceci
    http://olance.developpez.com/article...cation-inline/
    Comment puis-je ajuster les 2 codes?
    Merci

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Resalut
    j'ai mis ce code qui m'ouvre les données sous forme de tableau il m'affiche le bon nombre de lignes mais il ne m'affiche que 4 colonnes au lieu de huits, comment cela se fait-il?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php 
     
    $nom_fichier = 'ex_1.csv'; 
    $id = fopen($nom_fichier,'r'); // Ouverture du fichier en lecture seule 
    // Affiche le fichier sous forme de tableau (HTML) 
    echo '<table border=\'1\'>'; 
    // On parcours les lignes jusqu'à la fin du fichier CSV 
    for($lig=fgetcsv($id,1024,';');!feof($id);$lig=fgetcsv($id,1024,';')) { 
      // $lig est un tableau contenant les colonnes d'une ligne 
      echo '<tr>'; 
      // On parcours et affiche le contenu des colonnes 
      for($i=0;$i<strlen($lig);$i++) 
          echo "<td>$lig[$i]</td>"; 
      echo '</tr>'; 
    } 
    echo '</table>'; 
     
    ?>
    N'y a-t-il personne pour m'aider??????
    MERCI

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Tu utilise 2 fois 'fgetcsv' avant affichage, donc il saute 1 ligne sur 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php 
      $nom_fichier = 'ex_1.csv'; 
      $id = fopen($nom_fichier, 'r'); // Ouverture du fichier en lecture seule 
      // Prépare le tableau (HTML) 
      $tableau = '<table border="1">'; 
      // On parcours les lignes jusqu'à la fin du fichier CSV 
      while (($lig = fgetcsv($id, 1024, ';')) !== FALSE) 
      {
        $tableau .= '<tr>';
        foreach ($lig as $valeur)
        {
          // Si par hasard une colonne est vide
          $valeuraAfficher = ($valeur != '') ? $valeur : '&nbsp;';
          $tableau .= '<td>' . $valeuraAfficher . '</td>'; 
        }
        $tableau .= '</tr>'; 
      }
      $tableau .= '</table>';
     
      fclose($id);
     
      // Affiche le fichier sous forme de tableau (HTML) 
      echo $tableau;
    ?>
    D'autre part, je pense plus rapide de concaténer la totalité du tableau dans une chaîne, plutôt que d'afficher chaque élément séparément.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Salut et merci pour ta réponse, mais je ne sait pas si je part dans la bonne direction en fait je voudrais ouvrir mon fichier csv sous forme de tableau modifiable comme ceci :http://olance.developpez.com/article...nline/exemple/ (double clique sur une celule du tableau et elle devient modifiable)
    Seulement, l'exemple donné pour ça ouvre le tableau depuis une BD et non d'un fichier csv, c'est là que je ne sait pas


    une autre question
    quel est le code pour demander l'ouverture, mais dans une nouvelle fenètre????

  7. #7
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Bonjour
    D'abord il faut extraire et mettre les 5 fichier dans le meme dossier sur ton serveur local et quand tu dis que
    j'ai double cliqué sur le fichier index
    ça pose des question?
    j'ai teste encore ça mache chez moi je ne sais pas ce que se passe avec toi je ne utilise pas le easyphp mais le wamp5
    version php 5.1.2 et ie 6 comme explorer .
    je domonde si qlq'un d'autre l'a essayer
    Si tu veux utiliser ton fichier tu vas changer ces lignes
    dans index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //ligne 3
    $db->csv_open('test.csv');//entrer le nom de ton fichier
    dans modifier.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //ligne 3
    $db->csv_open('test.csv');//entrer le nom de ton fichier
    enfin si ça marche n'oublier pas d'ajouter "htmlentities"et "stripslashes"dans le ficher index pour afficher correctement tes textes

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    je ne pourrait pas retester avant lundi
    je te tiens au courant
    bon week end

  9. #9
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Re bonjour
    je pense que vous avez tester les fichies avec lexplorer derectement vous n'avais pas demarrer le easyphp server !
    essaie ceci
    creer un dossier "csv" dans "c:\program files\easyphp\www\" et mettez les 5 fichier dedans demarrez le ton easyphp
    entrer dans votre internet explorer l'adressesiuvant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    http://localhost/csv/
    ou 
    http://localhost/csv/index.php

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2005
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 255
    Par défaut
    Salut,
    j'ai fait comme tu as dit, j'ai créé un dossier "csv" (avec tous les fichiers dedans) sous "c:\program files\easyphp\www\acrbo5\"

    lorsque je tape l'adresse :"http://acrnmp.kwe.egs.edf.fr/acrbo5/csv/index.php"

    Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in c:\program files\easyphp\www\acrbo5\csv\csvclass.php on line 3

    Fatal error: Cannot instantiate non-existent class: cvs_data in c:\program files\easyphp\www\acrbo5\csv\index.php on line 2


    d'ou que ça pourrait venir?

    Apparement cela viendrait d'un problème PHP4/PHP5
    Y-a-til une solution au niveau du code sans avoir à charger php5???

  11. #11
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Bonjour
    vous etes sous php4 si possible mais avec qlq modification noter que pour écrire dans un fichier .cvs on utilise la fonction "fputcsv" ça n'existe pas sous php4 mais j'ai trouve une sur le site "http://www.php.net/"
    tu peux charger un autre
    la fonction csv_assoc ne marche pas si tu veux l'utiliser .
    j'ai testé sous easyphp 1.6 php 4.2 ça marche
    avant d'essayer vérifier que la taille du fichier test.csv n'est pas a zéro

    si tu veux un moyen qui t’aide pour comprendre le code ‘ ou tes codes en général ‘ voici mon code c'est bien je le utilise souvent
    http://www.developpez.net/forums/d60...colorier-code/
    remplacer le fichier
    csvclass.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
     
    <?php  class cvs_data
    {
    	var $open=false;
    	var $filname='';
    	var $isbusy=false;
    	var $starts=false;
    	var $ends=false;
    	var $canedit=false;
    	var $delete=array();
    	var $row_count=0;
    	var $col_count=0;
    	var $buff=array();
    	var $champs=array();
    	var $assoc=array();
    	 function csv_create($filname,$colnames)
    	{
    		$fl=explode(';',$colnames);
    		if(is_array($fl))
    		{
    			$this->col_count=count($fl);
    			foreach($fl as $k=>$val)
    			{
    				if(!is_string($val))return false;
    				$this->champs[$k]=$val;
    				$this->assoc[$val]=$k;
    			}
    			$this->filname=$filname;
    			$this->csv_update();
    			return true;
    		}
    	}
    	 function csv_truncate()
    	{
    		$this->buff=array();
    		$this->csv_update();
    	}
    	 function csv_open($filname,$start=0,$limit=false)
    	{
    		if($limit!=false)
    		{
    			$this->ends=$limit+$start;
    		}
    		else
    		{
    			$this->ends=10000;
    		}
    		$this->starts=$start;
    		$this->filname=$filname;
    		$this->csv_read();
    	}
    	 function csv_read()
    	{
    		$h=@ fopen($this->filname,"r");
    		$this->buff=array();
    		if($h)
    		{
    			$inc=0;
    			$srat=false;
    			while(($data=fgetcsv($h,4096,";"))!==FALSE)
    			{
    				if($srat==false)
    				{
    					$srat=true;
    					$this->buff[]=$data;
    				}
    				else
    				{
    					$inc++;
    					if($inc>$this->starts)
    					{
    						if($inc>$this->ends)break;
    						$this->buff[]=$data;
    					}
    				}
    			}
    			if(count($this->buff)>0)
    			{
    				if(is_array($this->buff[0]))
    				{
    					$this->col_count=count($this->buff[0]);
    					$this->assoc=@ array_flip($this->buff[0]);
    					$this->champs=$this->buff[0];
    					@ array_shift($this->buff);
    					$this->row_count=count($this->buff);
    				}
    				$this->isbusy=true;
    			}
    			$this->index=1;
    			$this->open=true;
    			@ fclose($h);
    		}
    		$this->delete=array();
    		return $this->open;
    	}
    	 function csv_assoc()
    	{
    		return $this->csv_ex(true);
    	}
    	 function csv_array()
    	{
    		return $this->csv_ex();
    	}
    	 function csv_ex($arr=false)
    	{
    		if(count($this->buff)==0 || $this->isbusy==false)
    		{
    			$this->isbusy=false;
    			return false;
    		}
    		if(count($this->champs)==count($this->buff[0]))
    		{
    			$out=($arr)?@ array_combine($this->champs,$this->buff[0]):$this->buff[0];
    		}
    		else
    		{
    			$out='erreur a '.count($this->buff);
    		}
    		@ array_shift($this->buff);
    		return $out;
    	}
    	 function csv_delete($val,$refresh=true)
    	{
    		if($this->isbusy)
    		{
    			if(is_array($val))
    			{
    				@ $this->delete=array_merge($this->delete,$val);
    			}
    			else
    			{
    				@ $this->delete[]=$val;
    			}
    			if($refresh)
    			{
    				$this->csv_update();
    			}
    			return true;
    		}
    	}
    	 function csv_insert($val,$refresh=true)
    	{
    		if($this->isbusy)
    		{
    			if(is_array($val)&& count($val)==$this->col_count)
    			{
    				$this->buff[]=$val;
    				if($refresh)
    				{
    					$this->csv_update();
    				}
    				return true;
    			}
    		}
    	}
    	 function csv_edit($val,$rw,$col,$refresh=true)
    	{
    		if($this->can_edit())
    		{
    			if(intval($rw)<$this->row_count && in_array($col,$this->champs))
    			{
    				@ $this->buff[intval($rw)][$this->assoc[$col]]=$val;
    				if($refresh)
    				{
    					$this->csv_update();
    				}
    				return true;
    			}
    		}
    	}
    	 function can_edit()
    	{
    		return(count($this->buff)==$this->row_count && $this->isbusy)?true:false;
    	}
    	 function csv_update()
    	{
    		$this->csv_refresh();
    		$this->csv_read();
    	}
    	 function csv_refresh()
    	{
    		$this->open=false;
    		$h=@ fopen($this->filname,"w");
    		if($h)
    		{
    			@ $this->fputcsv($h,$this->champs,';');
    			foreach($this->buff as $lin=>$val)
    			{
    				if(!in_array($lin,$this->delete))
    				{
    					@ $this->fputcsv($h,$val,';');
    				}
    			}
    			fclose($h);
    			$this->delete=array();
    			return true;
    		}
    		return false;
    	}
    	 function csv_echo()
    	{
    		$out='<table border="1">';
    		$out.='<thead><tr><th>'.implode('</th><th>',$this->champs)."</th></tr>\r";
    		$out.='</thead><tbody>';
    		foreach($this->buff as $lin=>$val)
    		{
    			$out.="<tr><td>".implode('</td><td>',$val)."</td></tr>\r";
    		}
    		$out.='</tbody><table>';
    		echo $out;
    	}
     
    	  function fputcsv(&$handle, $fields = array(), $delimiter = ',', $enclosure = '"') {
        $str = '';
        $escape_char = '\\';
        foreach ($fields as $value) {
          if (strpos($value, $delimiter) !== false ||
              strpos($value, $enclosure) !== false ||
              strpos($value, "\n") !== false ||
              strpos($value, "\r") !== false ||
              strpos($value, "\t") !== false ||
              strpos($value, ' ') !== false) {
            $str2 = $enclosure;
            $escaped = 0;
            $len = strlen($value);
            for ($i=0;$i<$len;$i++) {
              if ($value[$i] == $escape_char) {
                $escaped = 1;
              } else if (!$escaped && $value[$i] == $enclosure) {
                $str2 .= $enclosure;
              } else {
                $escaped = 0;
              }
              $str2 .= $value[$i];
            }
            $str2 .= $enclosure;
            $str .= $str2.$delimiter;
          } else {
            $str .= $value.$delimiter;
          }
        }
        $str = substr($str,0,-1);
        $str .= "\n";
        return fwrite($handle, $str);
      }
     
     
    }
    ?>
    supprimer le variable "$linescount" dans index.php ça ne sert a rien !
    finalement éxcuser mois pour mon français

Discussions similaires

  1. [Toutes versions] Ventiler mon fichier .csv en plusieurs fichiers .csv
    Par X.e.N.o.N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/07/2018, 05h11
  2. lecture de fichier CSV
    Par bakaratoun dans le forum MATLAB
    Réponses: 12
    Dernier message: 07/12/2009, 17h00
  3. VB.Net - Lecture de fichiers csv
    Par House MD dans le forum VB.NET
    Réponses: 16
    Dernier message: 19/10/2008, 16h56
  4. [CSV] Lecture de fichier "volumineux"
    Par damaskinos dans le forum Langage
    Réponses: 8
    Dernier message: 12/06/2007, 11h22
  5. Réponses: 12
    Dernier message: 07/12/2005, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo