2016-10-21 4 views
0

J'ai un grand fichier txt, par exemple:
text.txt qui contient:PHP | Remplacer la ligne en grande txt fichier

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 
line9 

Mais je ne peux pas obtenir solotion comment faire un fichier PHP qui simplement remplace la ligne 4 avec le contenu line4 avec un texte différent ....

Merci pour toute aide! :)

+0

Où est le code? Qu'avez-vous essayé? – Eric

+0

Avoir accès à la commande 'exec'? si oui - je connais la solution pour les gros fichiers –

+0

Si le fichier est vrai grand - 'exec ("/bin/sed -i '4s /.*/ New_Content_Here /' chemin_du_fichier ");' –

Répondre

2

Vous devriez utiliser la fonction file() de PHP pour cela. Il retournera un tableau contenant chaque ligne.

$file = file('path/to/text.txt'); 
$lines = array_map(function ($value) { return rtrim($value, PHP_EOL); }, $file); 
$lines[3] = 'New content for line 4'; 
$lines = array_values($lines); 

enregistrer de nouveau, imploser le tableau avec saut de ligne:

$content = implode(PHP_EOL, $lines); 
file_put_contents('path/to/your/file.txt', $content); 
+0

Merci, je vais essayer! – PartyGuy

+0

ne fonctionne pas pour moi :( – PartyGuy

+0

Qu'est-ce qui ne fonctionne pas et ce qui se passe à la place? –

0

Vous pouvez lire votre fichier dans un tableau, retirez la 4e ligne en supprimant l'3th index, et mettre tous ensemble de nouveau dans un fichier:

$lines = file('text.txt'); //read the file in an array 
array_splice($lines , 3); //remove 4th line 
//or 
array_splice($lines , 3, 'different text'); //replace line with different text 
file_put_contents('text.txt', implode("\n", $lines)); //put the array back into the file 
+0

Vous devez à nouveau imploser les lignes $ par newline, car passer un tableau équivaut à 'file_put_contents ($ filename, implode ('', $ lines))' où les nouvelles lignes ne seront pas ajoutées. –

+0

Oui, et comme $ lines est un tableau à une seule dimension, il sera implosé par '', ce qui supprimerait toutes les nouvelles lignes et l'enregistrerait sur une seule ligne. –

+0

Oui, vous avez raison. J'ai corrigé ma réponse. Merci pour la correction. –

0

Je pense que la solution devrait être comme les suivantes - 1. Obtenez le contenu du fichier texte à l'aide file_get_contents() fonction 2. Remplacez ensuite le texte 3. Puis à nouveau écrire de nouveau les données existantes dans ce fichier texte à nouveau en utilisant file_put_contents()

L'extrait de code

$remove_text = "text to remove"; 
$file_content = file_get_contents("your text file"); 
if(($key = array_search($remove_text, $file_content)) !== false) { 
    unset($file_content[$key]); 
} 
file_put_contents("your text file",$file_content); 

Hope it helps :)

+0

Le contenu du fichier doit être implosé avant de mettre au fichier. Mon mauvais.: P –