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 :

[Tableaux] Modification fichier texte composé d'un tableau à double dimension


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut [Tableaux] Modification fichier texte composé d'un tableau à double dimension
    Bonjour,

    je vais donner un exemple concret de ce que je veux faire sinon ca va etre un peut dure de comprendre:

    - jai une premiere page avec un formulaire qui me permet de créer un tableau a deux dimension, il fait ca de cette facon :

    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
    $nb_colonnes = $_POST['nb_colonnes'];
    $nb_lignes = $_POST['nb_lignes'];
    $nb_mines = $_POST['nb_mines'];
     
    	for ($x=1;$x<=$nb_lignes;$x++)
    	{	 
    	echo "<tr>";
    		for ($y=1;$y<=$nb_colonnes;$y++)
    		{
    		$array[$x][$y] = 'CN';	
    		$valeur = $array[$x][$y];
    		echo "<td><form name='form1' method='post' action='query.php'><input type='hidden' value='$x' name='coor_x'/><input type='hidden' value='$y' name='coor_y'/><input type='image' src='terrain.jpg' value='submit' value='$x$y' id='submit'/></form></td>"; 				
    		}
    	echo "</tr>";
    	}
     
    	for ($i=1;$i<=$nb_mines;$i++){
    	$x = rand( 1, $nb_lignes );
    	$y = rand (1 , $nb_colonnes );
    	$array[$x][$y] = 'CO';
    	echo $x.$y;
    	echo $array[$x][$y];
    	}
     
     
    	$fp = fopen ("grille.txt", "w");
    	fseek ($fp, 0);
    	for ($x=1;$x<=$nb_lignes;$x++)
    	{	
    		for ($y=1;$y<=$nb_colonnes;$y++)
    		{
    			if($y==$nb_colonnes){
    			fputs ($fp, $array[$x][$y]);}
    			else{
    			fputs ($fp, $array[$x][$y].",");
    		}
    		}
    	fputs ($fp, "\r\n");
    	}
    	fclose ($fp);
    on voit ici qu'il crée un table, et un fichier en plus, dans le fichier il insere ce que contient le tableau, au début il y a soit des CN CO donc il se compose de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CN,CN,CO,CN,CN
    CN,CO,CN,CN,CO
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN
    le tableau créé sur la page ressemble a ca :



    au dessus cest juste un aide mémoire pour voir ou se situe les CO dans le fichier texte ainsi que dans le tableau array!

    Par la suite, lorsque je clic sur n'importe quelle case du tableau, ca va me submit un formulaire contenant les coordonnée de x et y dans le tableau, et me renvoyer sur une autre page afin de modifier le fichier texte, je m'explique :

    la page de query va tout dabord récupérer les coordonées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $coor_x = $_POST['coor_x'];
    $coor_y = $_POST['coor_y'];
    puis apres le but est de modifier le fichier text, si la valeur du tableau array de la case sur la quelle on a cliqué sur le tableau table est CN, on remplace CN par VN dans le fichier text, alors que si cest CO, on remplace CO par VO...

    j'ai fait comme ca :

    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
    $file = "grille.txt";
    if(file_exists($file)) {
        $tab = file($file);
        $tab_total = count($tab);
     
        $donnee = explode(",",$tab[$coor_x-1]);
        #echo $donnee[$coor_y-1];
        #print_r($tab);
        echo $tab[$coor_x][$coor_y];
     
        if( $donnee[$coor_y-1] == 'CN' ){
        #echo $tab[$coor_x-1][$coor_y-1];
        $tab[$coor_x-1][$coor_y-1] = 'VN';
        }elseif ( $donnee[$coor_y-1] == 'CO' ){
        #echo $tab[$coor_x-1][$coor_y-1];
        $tab[$coor_x-1][$coor_y-1] = 'VO'; 
        }
     
        $newone = "";
     
        for ($i=0;$i<$tab_total;$i++){
        $newone .= $tab[$i];
        }
     
        $ouvre=fopen("grille.txt","w+");
    	fwrite($ouvre,$newone);
    	fclose($ouvre);
     
    }
    mais il y a un petit probleme, ca écrit avec un décalage parfois, et parfois ca n'écrit pas!

    pour donner un exemple avec ce tableau, si je clic la :


    la case de array va contenir CO, dans le fichier texte, ca devra donner VO, et la sa donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CNVCN,CO,CN,CN
    CN,CO,CN,CN,CO
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN
    ps : il faut faire attention ici avec les tableau qui commnce a 0 ou 1 on s'emmele vite les pinceaux...

    pour vous aider je vous donne meme le script ^^ ici : dem.rar
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Lorsque tu fais ça : $tab est un tableau ou une chaine ?
    A mon avis c'est une chaine, tu devrais ensuite splitté cette chaine à chaque "," (en pensant à supprimer les "\r\n") et réaffecter les valeurs dans ton tableau.

  3. #3
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    $tab est un tableau de chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tab[0] renvoi la premiere ligne du fichier
    $tab[1] renvoi le 2e ligne du fichier, etc...
    puis apres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $donnee = explode(",",$tab[$coor_x-1]);
    me split ma chaine, $donnee[0] renvoie par exemple CN etc...

    a mon avis il doit y avoir un petit probleme avec ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        if( $donnee[$coor_y-1] == 'CN' ){
        #echo $tab[$coor_x-1][$coor_y-1];
        $tab[$coor_x-1][$coor_y-1] = 'VN';
        }elseif ( $donnee[$coor_y-1] == 'CO' ){
        #echo $tab[$coor_x-1][$coor_y-1];
        $tab[$coor_x-1][$coor_y-1] = 'VO'; 
        }
    assez chaud de modifier un tableau a deux dimension comme ca, cest casse tete :s
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    tu devrais peut-être faire un print_r de $données avant la modification et un après pour voir si le souci vient de là.

  5. #5
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    print_r($donnee) renvoie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => CN [1] => CN [2] => CO [3] => CN )
    il voit toute la ligne cest pas ca le probleme...
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=
    (\_/)
    (O.o)
    (> <)
    This is Bunny. Copy Bunny into your signature to help him on his way to world domination!!
    =-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=

  6. #6
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    dans ce cas tu devrais plutôt modifier $données et modifier juste une ligne et non tout. Ensuite tu réaffectes simplement la ligne modifiée dans $donnees et non tout $tab (déjà ton porblème sera plus centré si ça ne marche toujours pas).

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Salut,

    Je crois que l'erreur vient de ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tab[$coor_x-1][$coor_y-1] = 'VN';
    En effet dans $tab la première dimension correspond à la ligne, mais la deuxième correspond au caractère, c'est à dire que dans ton exemple avec x=1 et y=3 (si j'ai bien compris) tu place 'VN' à la place du troisième caractère de ta ligne c-a-d la virgule:

    CNVCN,CO,CN,CN
    CN,CO,CN,CN,CO
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN
    CN,CN,CN,CN,CN

    Et j'imagine que vu que la deuxième dimension ne contient que des caractères, seul le 'V' de 'VN' est placé.

Discussions similaires

  1. [WD12] modification fichier texte
    Par cgr_007 dans le forum WinDev
    Réponses: 8
    Dernier message: 15/03/2010, 01h19
  2. Modification fichier Texte
    Par toutou2000 dans le forum C#
    Réponses: 11
    Dernier message: 26/02/2010, 11h03
  3. Modification fichier texte base de donnée
    Par usermap dans le forum C#
    Réponses: 2
    Dernier message: 16/04/2009, 21h28
  4. Shell - Modification fichier texte
    Par bahaaldine dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 28/10/2007, 13h24

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