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 :

Modification table du prog principal par fonction


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Modification table du prog principal par fonction
    Bonjour,
    Je veux lire un fichier texte dont chaque ligne est composée de plusieurs champs séparés par des TAB (0x09) et mettre pour chaque ligne ses champs dans un tableau.
    Le programme principal appelle la fonction pour chaque ligne en lui passant le tableau en paramètre, la fonction remplit les champs du tableau.
    Le problème c'est que je ne retrouve pas les valeurs dans le tableau au retour dans le programme principal alors qu'ils sont bien remplis dans la fonction.
    Programme principal:
    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
    <?php
    session_start();
    $type=2; // changer ici $type: 0=>net sans PDO; 1=>net avec PDO; 2=>local avec PDO
    $_SESSION['type']=$type;
    $tab_line = array('c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'c10', 'c11', 'c12', 'c13', 'c14');
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
    		<link rel="stylesheet" href="stylephp.css" />
    		<?php include('fonctions.php'); ?>		
            <title>create bdd</title>
        </head>
    	<body>
    	<?php
    	$filepath='c:/users/Roger/Documents/Pharmacies/Commun/Pharmacies1.txt';
    	//dump($filepath,1000);
    	$handle=fopen($filepath, 'r');
    	if($handle)
    	{
    		while(!readaline($handle, $tab_line))
    		{
    			//echo '<p>'.$c1.$c0.$c2.'</p>';
    			//echo '<p>'.$$tab_line[1].$$tab_line[0].$$tab_line[2].'</p>';
    		}
     
    	}
    	fclose($handle);
    	?>
        </body>
    </html>
    Fonction:
    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
    <?php
    	function readaline($handle, $tab_line)
    	{
    		//global $tab_line;
    		$endoffile=true;
    		for($j=0; $j<count($tab_line); $j++) $$tab_line[$j]='';
    		$i=0;
    		while(!feof($handle))
    		{
    			$caractere=fgetc($handle);
    			$cod=ord($caractere);
    			if(($cod==0x0)or($cod==0x0D)) break; // s'il y a eu des caractères $endoffile sera false, si le 00 est juste après un 0A $endoffile sera resté à true
    			else
    			{
    				if($cod!=0x0A) // on ignore les 0A
    				{
    					if($cod==0x09) {$i++; $endoffile=false;} // $endofline à false ici car on est sûr que s'il y a une ligne on a des 09, si c'était des lignes sans 09, il faudrait le mettre à false sur chaque caractère
    					{
    						$$tab_line[$i]=$$tab_line[$i].$caractere; // on concatène les caractères dans le champ $i de la table
    					}
    				}
    			}
    		}
    		echo '<p>'.$c1.$c0.$c2.'</p>';
    		return $endoffile;
    	}
    ?>
    le echo fonctionne dans la fonction mais pas dans le prog principal, j'ai essayé de passer le tableau en global (en enlevant le paramètre dans l'appel) ça ne marche pas non plus, j'ai essayé de le passer par référence (avec &) je me fais jeter !

    Merci pour vos conseils

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu lis le fichier caractère par caractère ?
    Pourquoi tu ne traites pas ton fichier comme un CSV avec une tabulation comme séparateur ?
    C'est bien ce que c'est non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut suite
    Citation Envoyé par sabotage Voir le message
    Tu lis le fichier caractère par caractère ?
    Pourquoi tu ne traites pas ton fichier comme un CSV avec une tabulation comme séparateur ?
    C'est bien ce que c'est non ?
    Mon problème pour la suite c'est de retrouver chaque champ de la ligne dans chaque entrée du tableau (et d'un tableau php).
    Chaque entrée du tableau sera ensuite un argument pour la création d'une table SQL.
    Je peux le faire en mettant tout dans le programme principal, là ça fonctionne, mais je préfère passer par une fonction, car je veux pouvoir l'utiliser pour lire d'autres fichiers textes avec des formats différents (pas le même nombre de champs dans la ligne). Tout mettre dans le programme principal c'est possible effectivement mais pas très élégant.
    Lire en csv cela répond-il à la question posée ?
    (rappel de la question posée: comment retrouver dans le pp principal les modifications faites dans le tableau par la fonction ?)

    Merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Sérieusement oui, ça répond à la question car si tu traitais ton fichier efficacement, tu n'aurais pas une usine à gaz pareil, et donc tu ne te poserai pas la question de comment tu dois gérer une fonction qui traite ligne par ligne.
    De même avoir des variables numérotées c0->c14 ça ne se fait pas en PHP, c'est ce compliquer la vie et écrire des tonnes de code pour rien.

    Ton code se résume à ça, si j'ai bien compris (et encore je ne vois pas trop pourquoi faire un regroupement en colonne si c'est pour faire une insertion dans une base de données ensuite)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function readcsv($filepath) {
      if (($handle = fopen($filepath)) !== FALSE) {
          while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
              foreach($data as $col=>$value) {
                  $result[$col][] = $value;
              }
          }
       fclose($handle);
      }
    }
     
    $data = readcsv($filepath);
    echo 'La deuxième ligne de la première colonne contient ' . $data[0][1];
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 214
    Par défaut Fin
    Oui, ce que je voulais faire c'est tout simplement constituer dans une fonction le buffer $data qui est automatiquement constitué par l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($data = fgetcsv($handle, 1000, "\t")
    du coup je n'ai besoin que de cette ligne (inutile de faire une fonction pour une ligne).
    Je n'ai pas besoin du buffer $result qui contient toutes les lignes car je traite chaque ligne aussitôt l'avoir lue.
    Donc ça répond bien à ma question.
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modification taille div par fonction jvs
    Par MaKeaHong dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/05/2015, 09h10
  2. [WD17] Modification de largeur de colonne par prog
    Par lololebricoleur dans le forum WinDev
    Réponses: 0
    Dernier message: 08/01/2012, 13h35
  3. Réponses: 3
    Dernier message: 25/08/2011, 13h23
  4. [Débutant] Appel de variable dans une fonction déjà défini dans un prog principal
    Par hollowdeadoss dans le forum MATLAB
    Réponses: 8
    Dernier message: 19/09/2008, 13h02
  5. MAJ d'une table sous SQL Server par insertion
    Par keish dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/06/2003, 16h23

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