2010-07-19 4 views
6

J'écris du code et j'ai besoin d'écrire un nombre sur une ligne spécifique. Voici ce que j'ai jusqu'à présent:Ecrire sur une ligne spécifique en PHP

<?php 

$statsloc = getcwd() . "/stats/stats.txt"; 
$handle = fopen($statsloc, 'r+'); 

for($linei = 0; $linei < $zone; $linei++) $line = fgets($handle); 
$line = trim($line); 
echo $line; 

$line++; 
echo $line; 

Je ne sais pas où continuer après cela. J'ai besoin d'écrire $ line sur cette ligne, tout en maintenant toutes les autres lignes.

+0

Cette affirmation est plutôt ambiguë: "J'ai besoin d'écrire $ line sur cette ligne" Qu'est-ce que vous essayez réellement d'accomplir en "écrivant $ line to 'this' line?" –

+1

Savez-vous que la boucle 'for' est en train de sélectionner la ligne numéro $ zone maintenant et ne fait rien d'autre? Si oui, il existe des moyens plus faciles de le faire. – waiwai933

+0

Je suis confus. J'ai besoin d'accéder à cette ligne, d'en extraire les données, d'en ajouter une, puis de la réécrire. C'est tout ce dont j'ai besoin. – Robert

Répondre

14

vous pouvez utiliser le fichier pour obtenir le fichier comme un tableau de lignes, puis modifiez la ligne dont vous avez besoin, et réécrire le lot entier dans le fichier.

<?php 
$filename = getcwd() . "/stats/stats.txt"; 
$line_i_am_looking_for = 123; 
$lines = file($filename , FILE_IGNORE_NEW_LINES); 
$lines[$line_i_am_looking_for] = 'my modified line'; 
file_put_contents($filename , implode("\n", $lines)); 
+0

J'ai supposé que vous deviez modifier une ligne, pas en injecter une nouvelle - si vous avez besoin d'en injecter une nouvelle voir la réponse de deceze - quant à la différence entre join et implode, il n'y en a pas, join est un alias d'implode. – nathan

+0

J'ai arraché 'FILE_IGNORE_NEW_LINES' de votre réponse, bonne réflexion pour l'inclure. :) – deceze

+0

@deceze plus bienvenue, pas de problème et bonne idée – nathan

4

Cela devrait fonctionner. Cela deviendra plutôt inefficace si le fichier est trop volumineux, donc cela dépend de votre situation si c'est une bonne réponse ou non.

$stats = file('/path/to/stats', FILE_IGNORE_NEW_LINES); // read file into array 
$line = $stats[$offset]; // read line 
array_splice($stats, $offset, 0, $newline); // insert $newline at $offset 
file_put_contents('/path/to/stats', join("\n", $stats)); // write to file 
+0

Je ne sais pas comment cela correspond au code que j'ai déjà. Peux-tu m'aider? S'il vous plaît? – Robert

+0

Je suis désolée, cette pièce est assez explicite, il va falloir essayer par vous-même. – deceze

0

J'ai rencontré cela aujourd'hui et je voulais résoudre en utilisant les 2 réponses postées mais cela n'a pas fonctionné. Je devais changer à ceci:

<?php 
$filepathname = "./stats.txt"; 
$target = "1234"; 
$newline = "after 1234"; 

$stats = file($filepathname, FILE_IGNORE_NEW_LINES); 
$offset = array_search($target,$stats) +1; 
array_splice($stats, $offset, 0, $newline); 
file_put_contents($filepathname, join("\n", $stats)); 
?> 

Parce que ces lignes ne fonctionnent pas depuis le arg du tableau n'est pas un indice:

$line = $stats[$offset]; 
$lines[$line_i_am_looking_for] = 'my modified line'; 

Had ajouter que +1 pour avoir la nouvelle ligne sous le texte recherché.

Questions connexes