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 :

Modifier la fin d'une ligne au milieu de fichier texte


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut Modifier la fin d'une ligne au milieu de fichier texte
    Bonjour a tous.

    Je suis debutant en PHP, ( je viens de terminer le cours de Mateo );
    je voudrais connaitre la fonction qui permet d'ecrire a la fin de ligne ( par exemple) n° 30 d'un fichier texte, qui ne represente pas un tableau,
    je precise que l'ecriture doit se faire apres les : merci pour votre aide.



    Exemple de fichier texte a modifier :
    // Temporary campaign situation file. Automatically generated by FoS

    [Header]
    Campaign:Cmp-1800
    Epoqu:NapoleonicTactical\
    nation:1
    referee:0
    difficulty:1
    turn:1 <= exemple je veux modifier ce chiffre
    current player:0
    player score:0
    AI score:0
    remaining battles:0

    [Global action stack]
    Nb global action:0<= exemple 2 je veux modifier aussi ce chiffre

    [Objectives]
    Obj 1:1
    Obj 2:1
    Obj 3:1
    Obj 4:1
    Obj 5:2
    Obj 6:2
    Obj 7:2
    Obj 8:2

    [Country1]
    resources:0
    basic incomes:15
    is conquered:0
    strategy:0
    diplomacy

  2. #2
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Tu peux utiliser FILE_APPEND de file_put_contents, mais tu peux procéder comme suis :
    1 : Récupérer contenu du fichier cible avec file_get_contents
    2 : Parcourir ta chaine, et compter le nombre de ligne
    3 : Concaténer ta chaine récupérée à celle que tu veux ajouter à la suite du fichier
    4 : Utiliser file_put_contents et passer la nouvelle chaine en paramètre

    L'avantage de la deuxième méthode ne réside pas dans ce cas là, mais si par exemple, tu cherches une ligne particulière à modifier, ou à forcer l'ajout à partir d'une ligne n.
    Bref, tu es libre de faire les ajouts, suppressions, ou modifications que tu veux, là où tu le souhaites, avec juste un peu d'imagination.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Merci Lokicoule de m'avoir repondu.

    Je precise que je ne veux pas ajouter du texte a la fin de mon fichier, mais ecraser des chiffres qui sont a modifier sur une ligne precise sans retour a la ligne.

    J'avais pensé faire avec la fonction fopen, et mode r+,
    mettre un while et feof pour parcourir le fichier,

    et utiliser la fonction fseek pour positionner le curseur au bon endroit, ( est t'il possible de l'utiliser sur par exemple la 15 e ligne et comment ?

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Bonjour, j'ai cherché sur pas mal de forum et aucun code pour modifier le chiffre de la fin d'une enieme ligne de fichier texte, c'est soit le debut ou la fin ou alors dans un tableau... les rare cas qui sont comme le mien ressemble trop a des essais, avec souvent des problemes.

    Il y aurait t'il un schema de fonction a utiliser, ou du moins une manipulation plus precise a faire que celle que j'ai eu , comme je l'ai dit je debute, et pas mal de fonction sont encore inconnus...



    Merci a vous.

  5. #5
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Une ébauche de class codé juste pour toi, j'ai pas géré l'encodage, donc tant que ton fichier n'a pas de char avec accent, ça marche nickel.
    Le seul petit bémol se trouve dans le fait que le blocnote ne semble pas en mesure de lire les '\n', contrairement à sublimetext par exemple. Donc tu l'auras compris ouvres le avec un editeur de text qui prends en compte les retours chariots. J'ai pas poussé plus loin donc à chercher si c'est gênant.
    Je me suis trompé au début donc tu as en bonus la possibilité d'ajouter des lignes où tu le veux, j'ai pas commenté le code, et n'ai pas cherché non plus à l'optimiser.
    Pour le parseur, je ne me suis pas embêté, la fonction edit_content remplace la case du tableau par le mot recherché plus les ':' plus la nouvelle chaine. Pas mal de verif sont à faire, mais le résultat est fonctionnel dans l'ensemble.
    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
     
    <?php
     
    	main();
     
    	function main()
    	{
    		$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				'line'	=>	"turn",
    				'text'	=>	4
    			);
    		$p_file = new ClassFile($datas);
    		if ($p_file->edit_to_file() == true)
    			echo "success";
    		$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				'line'	=>	4,
    				'text'	=>	"test"
    			);
    		$p_file = new ClassFile($datas);
    		if ($p_file->add_to_file() == true)
    			echo "success";
    	}
     
    	class ClassFile
    	{
    		private $name, $line, $word, $file, $content;
     
    		function __construct($datas)
    		{
    			$this->name = $datas['name'];
    			if (is_int($datas['line']) == true)
    				$this->line = $datas['line'];
    			else
    				$this->word = $datas['line'];
    			$this->text = $datas['text'];
    		}
     
    		function add_to_file()
    		{
    			if (empty($this->line))
    			{
    				echo "echec to add";
    				return false;
    			}
    			$this->get_content();
    			$this->put_content_to_array_add();
    			$this->new_content();
    			$this->overwride();
    			return true;
    		}
     
    		function edit_to_file()
    		{
    			if (empty($this->word))
    			{
    				echo "echec to edit";
    				return false;
    			}
    			$this->get_content();
    			$this->put_content_to_array_edit();
    			$this->edit_content();
    			$this->new_content();
    			$this->overwride();
    			return true;
    		}
     
    		function get_content()
    		{
    			$this->file = file_get_contents($this->name, FILE_USE_INCLUDE_PATH);
    		}
     
    		function put_content_to_array_add()
    		{
    			$i = 0;
    			$j = 0;
    			$this->content[0] = null;
    			$size = strlen($this->file);
    			while ($i < $size)
    			{
    				if ($this->file[$i] == "\n")
    					{
    						$this->content[] = null;
    						$j++;
    					}
    				if ($j == $this->line)
    				{
    					$this->content[] = null;
    					$this->content[$j++] = "\n".$this->text;
    				}
    				$this->content[$j] .= $this->file[$i++];
    			}
    		}
     
    		function put_content_to_array_edit()
    		{
    			$i = 0;
    			$j = 0;
    			$this->content[0] = null;
    			$size = strlen($this->file);
    			while ($i < $size)
    			{
    				if ($this->file[$i] == "\n")
    					{
    						$this->content[] = null;
    						$j++;
    					}
    				$this->content[$j] .= $this->file[$i++];
    			}
    			//print_r($this->content);
    		}
     
    		function edit_content()
    		{
    			$pos = null;
    			$size = sizeof($this->content);
    			for ($i = 0; $i < $size; $i++)
    			{
    				$pos = strpos($this->content[$i], $this->word);
    				if ($pos != false)
    					$this->content[$i] = "\n".$this->word.':'.$this->text;
    			}
    			echo "<br />";
    			//print_r($pos);
    		}
     
    		function new_content()
    		{
    			$this->file = null;
    			$size = sizeof($this->content);
    			$i = 0;
    			while ($i < $size)
    				$this->file .= $this->content[$i++];
    			echo "<pre>".$this->file."</pre>";
    		}
     
    		function overwride()
    		{
    			file_put_contents($this->name, $this->file);
    		}
     
    	}
    ?>

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Merci Lokicoule pour ton aide,
    j'ai observe 4 ou 5 ligne ou il y a des problemes vu par Wamp...

    Pour apprendre a coder, j'aurais preferé un code sans les objets, plus classique que je puisse suivre, eh oui
    et surtout assez commentés, ca m'aiderais pour me lancer.

    Cela dit, je te remercie de m' aider.

  7. #7
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Si tu peux poster les erreurs ou warnings ça m'intéresserai pas mal, ainsi que ta version de php, sachant que je n'ai aucune erreur renvoyée pour ce code.
    Voici le code procédural commenté :
    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
    <?php
     
    	main();
     
    	function main()
    	{
    		//On crée le tableau à passer en paramètre
    		//name (=) au nom du fichier
    		//line (=) au numéro de ligne ou au mot clé
    		//text (=) à la chaine à ajouter ou à la nouvelle valeur
    		$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				'line'	=>	"turn",
    				'text'	=>	7
    			);
     
    		edit_to_file($datas);
    		/*$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				'line'	=>	25,
    				'text'	=>	"test"
    			);*/
    		//add_to_file($datas);
    	}
     
    	//Fonction qui gère l'ajout d'une nouvelle ligne
    	function add_to_file($datas)
    	{
    		//On récupère le contenu du fichier
    		$file = get_content($datas);
     
    		//On stock le contenu du fichier dans un tableau, \n est le séparateur
    		//Et on ajoute une ligne à la position souhaité
    		$content = put_content_to_array_add($datas, $file);
     
    		//On crée le nouveau contenu du fichier à partir du nouveau tableau
    		$file = new_content($content);
     
    		//On réécri le contenu du fichier
    		overwride($datas['name'], $file);
    	}
     
    	//Fonction qui gère la modification d'une valeur
    	function edit_to_file($datas)
    	{
    		$file = get_content($datas);
    		$content = put_content_to_array_edit($datas, $file);
     
    		//On modifie la valeur pour le mot clé souhaité
    		$content = edit_content($datas, $content);
     
    		$file = new_content($content);
    		overwride($datas['name'], $file);
    	}
     
    	//Récupère le contenu d'un fichier text à l'aide la fonction file_get_contents
    	function get_content($datas)
    	{
    		return file_get_contents($datas['name'], FILE_USE_INCLUDE_PATH);
    	}
     
    	//Fonction qui parcourt la chaine de charactere à la recherche de \n 
    	//Si \n on crée une nouvelle case dans le tableau content
    	//On stock chaque ligne dans une case du tableau
    	//Si la case correspond à la valeur contenu dans le tableau de données on ajoute une ligne
    	function put_content_to_array_add($datas, $file)
    	{
    		$i = 0;
    		$j = 0;
    		$content[0] = null;
    		$size = strlen($file);
    		while ($i < $size)
    		{
    			if ($file[$i] == "\n")
    				{
    					$content[] = null;
    					$j++;
    				}
    			if ($j == $datas['line'])
    				{
    					$content[] = null;
    					$content[$j++] = "\n".$datas['text'];
    				}
    			$content[$j] .= $file[$i++];
    		}
    		return $content;
    	}
     
    	//Fonction qui parcourt la chaine de charactere à la recherche de \n
    	//Si \n on crée une nouvelle case dans le tableau content
    	//On stock chaque ligne dans une case du tableau
    	function put_content_to_array_edit($datas, $file)
    	{
    		$i = 0;
    		$j = 0;
    		$content[0] = null;
    		$size = strlen($file);
    		while ($i < $size)
    		{
    			if ($file[$i] == "\n")
    				{
    					$content[] = null;
    					$j++;
    				}
    			$content[$j] .= $file[$i++];
    		}
    		return $content;
    	}
     
    	//Fonction qui parcourt le nouveau tableau et cherche la présence du mot clé
    	//Si le mot clé est contenu dans la case du tableau alors on remplace la totalité
    	//du contenu de la case par le mot clé + : + la nouvelle valeur
    	function edit_content($datas, $content)
    	{
    		$pos = null;
    		$size = sizeof($content);
    		for ($i = 0; $i < $size; $i++)
    		{
    			$pos = strpos($content[$i], $datas['line']);
    			if ($pos != false)
    				$content[$i] = "\n".$datas['line'].':'.$datas['text'];
    		}
    		return $content;
    	}
     
    	//Fonction qui crée la nouvelle chaine à partir du nouveau tableau
    	function new_content($content)
    	{
    		$file = null;
    		$size = sizeof($content);
    		$i = 0;
    		while ($i < $size)
    			$file .= $content[$i++];
    		echo "<pre>".$file."</pre>";
    		return $file;
    	}
     
    	//Fonction qui écrase le contenu du fichier
    	function overwride($name, $file)
    	{
    		file_put_contents($name, $file);
    	}
    ?>

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Version de PHP : 5.3.13
    Vrsion de Apache : 2.2.22

    Quand aux problemes, j'avais 4 ou 5 lignes qui apparaissait, j'ai appuyer sur une mauvaise ligne de Wamp, ( Debug je crois ), et je n'ai plus que ceci :
    success

    success

    Je n'arrive pas a revenir a ces 4 ou 5 lignes, comment faire ?


    Ton code semble etre en deux partie ?, une partie pour ajouter une nouvelle ligne, et l'autre pour ajouter une modification apres une ligne, ( jai lu rapidement) ?
    Je n'aurais besoin que que la seconde partie.



    Pour expliquer ce que je veux faire, c'est un jeu :
    des joueurs placent des coordonnees dans une formulaire, qui modifieront uniquement les chiffre en fin des lignes, pas besoin de revenir sur une nouvelle, il faut ecraser le ou les chiffres apres les : c'est tout.

    Mon idée c'est que le joueur d'un camps ( 1 = bleu ou 2 = rouge ) doit pouvoir choisir une ou plusieurs armées, ( en cochant une ou plusieurs cases), et leur attribuer une valeur de coordonnée a une ou plusieurs de ces cases, qui permettra de modifier un fichier, qui leur sera ensuite envoyé une fois celui ci modifié.

    Voici le code basique du formulaire:


    Code html : 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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"><head>
     
           <title>Field of Strategy</title>
    	   <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
    <meta name="ProgId" content="FrontPage.Editor.Document"><title>Module</title>
    	   <link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
    	   <link href="styles.php" rel="stylesheet" type="text/css" media="all" />
    	   <link rel="shortcut icon" type="image/x-icon" href="favicon.bmp" />
    </head>
    <body>
     
     
    	   </head>
     
    <body>
     
    <p>Placez vos armées sur la carte grace aux coordonnées correspondant aux points sur la carte que vous voudrez atteindre.</p>
     
    <form action="Position.php" method="post" class="gche">
           <p>Mettez vos coordonnees pour placer vos armées : <img src="armees.png" alt="" />:</p>
     
        <input type="text" name="coordonnees" />
        <input type="reset" value="effacer" />
        <input type="submit" value="Envoyer" /><br /><br />
        <input type="checkbox" name="armees" id="armees" /> <label
    for="armees">Armees1</label><br />
         <input type="checkbox" name="armees2" id="armees" /> <label
    for="armees">Armees2</label><br />
         <input type="checkbox" name="armees3" id="armees" /> <label
    for="armees">Armees3</label><br />
          <input type="checkbox" name="armees4" id="armees" /> <label
    for="armees">Armees4</label>
    </form>
     
      <p>Mettez vos coordonnees pour placer vos armées : <img src="armees2.png" alt="" />:</p>
    <form action="Position.php" method="post" class="droite">
          <input type="text" name="coordonnees" />
          <input type="reset" value="effacer" />
          <input type="submit" value="Envoyer" /><br /><br />
          <input type="checkbox" name="armees" id="armees" /> <label
    for="armees">Armees1</label><br />
          <input type="checkbox" name="armees2" id="armees" /> <label
    for="armees">Armees2</label><br />
          <input type="checkbox" name="armees3" id="armees" /> <label
    for="armees">Armees3</label><br />
         <input type="checkbox" name="armees4" id="armees" /> <label
    for="armees">Armees4</label>
    </form>
    <html><head>
    hm, j'avais indenté le code, mais c'est revenu tout contre le bord.
    comment faire pour faire comme toi ?

  9. #9
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Faudrait juste que tu mettes à jour ta version de php.
    Comme expliqué précédemment, je me suis fourvoyé au début je pensais qu'il te fallait ajouter des lignes, j'ai vue plus tard que tu voulais modifier des valeurs, c'est pourquoi tu as les fonctions de modification, et d'ajout.
    J'ai bien compris ton besoin, quand tu auras fais la maj de php, tu t'apercevras qu'il rempli très bien son rôle. Le multi edition n'a pas été géré, tout simplement parce que je n'y avais pas pensé durant la phase de développement. Je l'implémenterai plus tard si besoin.
    Désolé mais je suis allergique au html, je ne pourrais donc pas t'aider là dessus.

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    J'ai pris la version : wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b.exe

    J'ai deja un probleme : Aestan tray Menu a rencontré un probleme et doit fermer ... avec XP

    Sur vista, Apache HTTP Server a cesse de fonctionner...
    C'est pour ca que j'en etais resté a la version ancienne de Wamp.


    Il est possible que j'aurais besoin de rajouter des ligne mais plus tard...
    Par contre le multi edition m'est absolument necessaire.


    Il ya des fonction que je ne connais pas dans ton code, je ne comprend pas tout, il faudra me l'expliquer d'avantage.

    Pour le html pas de soucis.


    Bon, je ne peux pas installer la derniere version de Wampserver, je suis obligé de revenir a l'ancienne qui marche.
    Je ne peux donc pas utiliser ton code, peux tu en faire un plus classique, avec aucun objet si c'est possible ? comme je debute...

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Bonjour, puisque le code que tu m'a passé ne peut pas etre lu par wampsever et que je ne peux pas installer la derniere version,
    j'ai trouvé un morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    // Chemin vers fichier texte
    $file ="CmpSaxeSummer1813.csi";
     
     
    $read=file($file);// On met dans la variable (tableau $read) le contenu du fichier file est une fonction qui place le contenu dans un tableau
     
    //On peut afficher ensuite les lignes, celle qu'on veut            
    echo $read[34];//Affiche la ligne ( on peut en mettre + ) grace a $read qui est un tableau ?>
    Ce code me permet d'atteindre la ligne que je veux et de la lire,
    mais je ne sais pas comment modifier cette dite ligne, ( pas la 1 ere ou la derniere).

    Avec l'utilisation de fseek, j'ai bien reussi, mais mon fichier a 7000 lignes, et je me vois mal l'utiliser pour ça, j'aimerais une fonction plus commode.

    Ma question:
    Comment modifier une ligne ( exemple 34 eme)
    (en evitant d'utiliser fseek pour aller sur la bonne ligne, il doit y bien avoir une autre fonction pour se placer
    sur la bonne ligne) et ensuite utiliser fseek pour placer le curseur sur le bon endroit de la ligne ?

    J'ai bien le code que tu m'a passer Lokicoule, mais mon Wampserver est une ancienne version, pour installer la derniere il manque une dll, j'ai cherché mais ca convient toujours pas.

    Merci.

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Je ne peux toujours pas installer la derniere version de wamp, j'ai donc cherché une solution de rechange, avec ce code, desolé lokicoule.,

    Il y a t'il quelqu'un qui saurait ameliorer le code que j'ai mis, ca fait plusieurs jours que je suis dessus, je le repete je ne suis que debutant,
    je n'ai pas eu de professeur pour m'apprendre mais seulement un manuel, donc c'est pas beaucoup.


    je cherche a avoir juste la possibilitée de recuperer la ligne ( c'est fait), y ecrire dedans et mettre cette ligne dans le fichier texte, mais sans ecraser tout le fichier et le placer a la bonne ligne, ce que je n'ai pas reussi a faire depuis plusieurs jours.


    Il y a t'il quelqu'un pour me repondre sur ce nouveau code, ca fait 4 jours que je suis dessus et google ne pas pas apporter les solutions ( rare et souvent avec des probleme)) , ca commence a bien faire...

  13. #13
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Au cas où tu parviendrais à mettre à jour ta version de php, j'ai réussi à prendre le temps d'implémenter le multi-ajout, multi-édition.
    Dans le pire des cas ce week-end si j'ai le temps, j'adapterai le code à ta version de php, si tu as des messages d'erreur copie/colle les dans le cas où ça nécessiterait des modifications minimes.

    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
    <?php
     
    	main();
     
    	function main()
    	{
    		/*
    		Tableau pour ajouter des lignes, numéro de lignes comme clé, text à ajouter
    		$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				14	=>	"test",
    				37	=>	"tt"
    			);*/
    		$datas = array(
    				'name'	=>	"file_to_parse.txt",
    				'nation'	=>	13,
    				'turn'	=>	18,
    				'difficulty' => 11,
    				'referee' => 22
    			);
     
    		edit_to_file($datas);
    		//add_to_file($datas);
    	}
     
    	function add_to_file($datas)
    	{
    		$nb_lines = 0;
    		foreach ($datas as $key => $value)
    		{
    			if ($nb_lines > 0)
    			{
    				$lines[] = $key;
    				$mod[] = $value;
    			}
    			$nb_lines++;
    		}
    		$file = get_content($datas['name']);
    		$content = put_content_to_array_add($lines, $mod, $file);
    		$file = new_content($content);
    		overwride($datas['name'], $file);
    	}
     
    	function edit_to_file($datas)
    	{
    		$nb_lines = 0;
    		foreach ($datas as $key => $value)
    		{
    			if ($nb_lines > 0)
    			{
    				$lines[] = $key;
    				$mod[] = $value;
    			}
    			$nb_lines++;
    		}
    		$file = get_content($datas['name']);
    		$content = put_content_to_array_edit($file);
    		$content = edit_content($lines, $mod, $content);
    		$file = new_content($content);
    		overwride($datas['name'], $file);
    	}
     
    	function get_content($name)
    	{
    		return file_get_contents($name, FILE_USE_INCLUDE_PATH);
    	}
     
    	function put_content_to_array_add($lines, $mod, $file)
    	{
    		$i = 0;
    		$j = 0;
    		$k = 0;
    		$nb_lines = sizeof($lines);
    		$content[0] = null;
    		$size = strlen($file);
    		while ($i < $size)
    		{
    			if ($file[$i] == "\n")
    				{
    					$content[] = null;
    					$j++;
    				}
    			$k = 0;
    			while ($k < $nb_lines)
    			{
    				if ($j == $lines[$k] - 1)
    					{
    						$content[] = null;
    						$content[$j++] = "\n".$mod[$k];
    					}
    				$k++;
    			}
    			$content[$j] .= $file[$i++];
    		}
    		return $content;
    	}
     
    	function put_content_to_array_edit($file)
    	{
    		$i = 0;
    		$j = 0;
    		$content[0] = null;
    		$size = strlen($file);
    		while ($i < $size)
    		{
    			if ($file[$i] == "\n")
    				{
    					$content[] = null;
    					$j++;
    				}
    			$content[$j] .= $file[$i++];
    		}
    		return $content;
    	}
     
    	function edit_content($lines, $mod, $content)
    	{
    		$pos = null;
    		$size = sizeof($content);
    		$nb_lines = sizeof($lines);
    		for ($i = 0; $i < $size; $i++)
    		{
    			for ($j = 0; $j < $nb_lines; $j++)
    			{
    				$pos = strpos($content[$i], $lines[$j]);
    				if ($pos != false)
    					$content[$i] = "\n".$lines[$j].':'.$mod[$j];
    			}
    		}
    		return $content;
    	}
     
    	function new_content($content)
    	{
    		$file = null;
    		$size = sizeof($content);
    		$i = 0;
    		while ($i < $size)
    			$file .= $content[$i++];
    		echo "<pre>".$file."</pre>";
    		return $file;
    	}
     
    	function overwride($name, $file)
    	{
    		file_put_contents($name, $file);
    	}
    ?>

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Bonjour et merci pour ta patience.

    Voila j'ai reperé ce probleme :
    Warning: file_get_contents(file_to_parse.txt) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory in C:\wamp\www\Campagne\code pour la campagne avec multi ajout et multi edition.php on line 65


    Call Stack
    # Time Memory Function Location
    1 0.0093 404464 {main}( ) ..\code pour la campagne avec multi ajout et multi edition.php:0
    2 0.0094 404464 main( ) ..\code pour la campagne avec multi ajout et multi edition.php:3
    3 0.0094 405040 edit_to_file( ) ..\code pour la campagne avec multi ajout et multi edition.php:22
    4 0.0094 405896 get_content( ) ..\code pour la campagne avec multi ajout et multi edition.php:56
    5 0.0094 405960 file_get_contents ( ) ..\code pour la campagne avec multi ajout et multi edition.php:65

  15. #15
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Tu essaies d'ouvrir le fichier file_to_parse.txt (mon fichier test qui est situé dans le répertoire courant à savoir celui où est situé le .php), donc il faut que tu rentres comme paramètre dans le tableau le bon nom de fichier.

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Ca y est j'ai pu ouvrir mon fichier avec ton code, ( mille fois merci).

    Par contre je ne sais pas comment utiliser ton code,
    il me faudrait plus de detail pour que je comprenne son fonctionnement, avec pas mal commentaire.

    Désolé mais je debute vraiment dans le php.

  17. #17
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Si tu veux ajouter des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $datas = array(
    				'name'	=>	"file_to_parse.txt",
    				14		=>	"test",
    				37		=>	"tt"
    			);
    		add_to_file($datas);
    14, 37 étant les numéro de lignes où faire l'ajout.

    Dans le cas de la modification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		$datas = array(
    				'name'			=>	"file_to_parse.txt",
    				'nation'		=>	13,
    				'turn'			=>	18,
    				'difficulty' 	=> 11,
    				'referee' 		=> 22
    			);
    		edit_to_file($datas);
    nation étant le mot clé à rechercher (il faut que tu indiques le mot clé entier, ex: current player), et 13 la nouvelle valeur à lui attribuer.
    L'algo général a déjà été expliqué plusieurs fois, notamment dans les commentaires de la première version procédurale.
    Une fois que tu auras essayé de comprendre le code, et que tu auras des questions, j'y répondrai volontiers.

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Je ne manquerais pas de te poser des questions, ca arrivera bientot.

    Merci pour ton aide,
    je vais essayer de comprendre ton code.

  19. #19
    Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2012
    Messages : 245
    Points : 52
    Points
    52
    Par défaut
    Je m'aperçois que je n'ai pas mis suffisament d'exemple:

    comment modifier d'autre lignes qui sont la suite de la liste plus haut, et qui ont la meme phrase :

    [Army11]
    name:VIIe Corps - Reynier
    nation:1
    pos:52
    mp left:9
    force:25
    moral:2
    reinforcement:0
    entrenchment:0
    besieged time:0
    siege work:0
    identification level:3
    in battle:0
    decoy:0
    Nb actions:0 <= modifier ici
    superior:
    profil:1
    supply:1
    losses:150
    temp losses:0
    posture:4
    name:VIIe Corps - Reynier
    type:21
    [
    name:26e Division - Kaminieki
    type:20
    [
    name:1e Rgt - Pol
    type:2

    name:8e Rgt - Pol
    type:2

    name:15e Rgt - Pol
    type:2

    name:16e Rgt - Pol
    type:2

    name:26e Div. 1e Bat.
    type:14
    ]

    name:27e Division - Grabowski
    type:20
    [
    name:2e Rgt - Pol
    type:2

    name:4e Rgt - Pol
    type:2

    name:12e Rgt - Pol
    type:2

    name:14e Rgt - Pol
    type:2

    name:27e Div. 1e Bat.
    type:14
    ]



    [Army12]
    name:VIIIe Corps - Poniatowski
    nation:1
    pos:35
    mp left:9
    force:19
    moral:3
    reinforcement:0
    entrenchment:0
    besieged time:0
    siege work:0
    identification level:3
    in battle:0
    decoy:0
    Nb actions:0<= modifier ici
    superior:
    profil:1
    supply:1
    losses:150
    temp losses:0
    posture:4
    name:VIIIe Corps - Poniatowski
    type:21
    [
    name:51e Div.
    type:20
    [
    name:32e leger prov
    type:4

    name:34e leger prov
    type:4

    name:35e de ligne prov
    type:1

    name:63e Rgt ligne
    type:2

    name:51e Div. 1e Bat.
    type:14
    ]

    name:52e Div.
    type:20
    [
    name:37e leger prov
    type:1

    name:39e de ligne
    type:2

    name:86e de ligne
    type:2

    name:121e de ligne
    type:2

    name:52e Div. 1e Bat.
    type:14
    ]

  20. #20
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    L'algo du coup est un peu différent, tu as plusieurs possibilités qui s'offre à toi :
    Rajouter une dimension au tableau content de la fonction edit_to_file, qui aura donc deux dimensions, et dont la première contiendra les numéros d'armées.
    Ou, tu peux simplement utiliser un compteur qui compte le nombre de fois où le mot [Army apparait (plus simple, et plus rapide à coder), et faire la comparaison avec l'armée voulue.
    Bien entendu, il faut modifier le tableau, et indiquer l'armée ciblée. Là encore il y a plein de manière de faire, donc à toi de jouer, et n'hésites pas à poster tes versions test.

Discussions similaires

  1. Lire une ligne précise d'un fichier texte
    Par Junta dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/04/2009, 19h26
  2. Acceder a une ligne donnée d'un fichier texte
    Par mcorvaisier dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/02/2009, 11h00
  3. Chercher une ligne aléatoire dans un fichier texte
    Par pyopyo dans le forum Langage
    Réponses: 1
    Dernier message: 30/04/2008, 10h26
  4. Réponses: 1
    Dernier message: 20/09/2007, 16h15
  5. Ecriture dans une ligne spécifique d'un fichier texte
    Par X-plode dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 15/07/2007, 09h46

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