cómo reemplazar una fila en particular usando php. No sé el número de línea. Quiero reemplazar una línea que contenga una palabra en particular.cómo reemplazar una línea particular en un archivo de texto usando php?
Respuesta
Uno de los enfoques que se pueden utilizar en archivos más pequeños que pueden caber en su memoria dos veces:
$data = file('myfile'); // reads an array of lines
function replace_a_line($data) {
if (stristr($data, 'certain word')) {
return "replaement line!\n";
}
return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents('myfile', implode('', $data));
Una nota rápida, PHP> 5.3.0 es compatible con las funciones lambda para que pueda quitar la declaración de la función llamada y acortar el mapa para:
$data = array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, $data);
teóricamente podría hacer de esto una sola (más difícil de seguir) declaración php:
file_put_contents('myfile', implode('',
array_map(function($data) {
return stristr($data,'certain word') ? "replacement line\n" : $data;
}, file('myfile'))
));
Otro enfoque (menos intensivo de memoria) que se debe utilizar para archivos más grandes:
$reading = fopen('myfile', 'r');
$writing = fopen('myfile.tmp', 'w');
$replaced = false;
while (!feof($reading)) {
$line = fgets($reading);
if (stristr($line,'certain word')) {
$line = "replacement line!\n";
$replaced = true;
}
fputs($writing, $line);
}
fclose($reading); fclose($writing);
// might as well not overwrite the file if we didn't replace anything
if ($replaced)
{
rename('myfile.tmp', 'myfile');
} else {
unlink('myfile.tmp');
}
Si no conoce la línea, tendrá que buscar en todas las líneas.
iterate over the file line by line o read the file into memory all at once. A continuación, busque la palabra con una combinación de strpos
y str_replace
o use preg_replace
.
Si itera, simplemente use strpos
y reemplace la línea una vez que no haya resultado FALSA. Luego guarde el archivo nuevamente en el disco.
Usted tiene que sobrescribir el archivo completo.
Por lo tanto, para el archivo relativamente pequeño, read file into array, busque la palabra, reemplace la fila encontrada, escriba all the rest en file.
Para el archivo grande, el algoritmo es levemente diferente, pero es bastante similar en general.
parte importante es file locking
por eso preferimos una base de datos.
+1 para la nota sobre 'rebaño()' – gnarf
$filedata = file('filename');
$newdata = array();
$lookfor = 'replaceme';
$newtext = 'withme';
foreach ($filedata as $filerow) {
if (strstr($filerow, $lookfor) !== false)
$filerow = $newtext;
$newdata[] = $filerow;
}
Ahora $newdata
contiene el contenido del archivo como una matriz (implode()
utilizar si no quiere matriz) con la línea que contiene "replaceme" sustituido por "withme".
También puede utilizar el modo multi-línea con expresiones regulares
preg_match_all('/word}/m', $textfile, $matches);
esto es, por supuesto, asumiendo que es un documento más pequeño en la lista y se carga. De lo contrario, las otras respuestas son mucho más 'mundo real' de una solución.
Tal vez esto podría ayudar:
$data = file("data.php");
for($i = 0;$i<count($data);$i++){
echo "<form action='index.php' method='post'>";
echo "<input type='text' value='$data[$i]' name='id[]'><br>";
}
echo "<input type='submit' value='simpan'>";
echo "</form>";
if(isset($_POST['id'])){
file_put_contents('data.php',implode("\n",$_POST['id'])) ;
}
Esto es bueno si usted está buscando una subcadena (ID) en una línea y desea reemplazar la antigua línea con la nueva línea.
Código:
$id = "123";
$new_line = "123,Programmer\r"; // We're not changing the ID, so ID 123 remains.
$contents = file_get_contents($dir);
$new_contents= "";
if(strpos($contents, $id) !== false) { // if file contains ID
$contents_array = preg_split("/\\r\\n|\\r|\\n/", $contents);
foreach ($contents_array as &$record) { // for each line
if (strpos($record, $id) !== false) { // if we have found the correct line
$new_contents .= $new_line; // change record to new record
}else{
$new_contents .= $record . "\r";
}
}
file_put_contents($dir, $new_contents); // save the records to the file
echo json_encode("Successfully updated record!");
}
else{
echo json_encode("failed - user ID ". $id ." doesn't exist!");
}
Ejemplo:
archivo antigua:
ID, ocupación
123, estudiante
124, capa de ladrillo
ejecutar el código cambiará archivo a:
Nueva archivo:
ID, ocupación
123, programador
124, ladrillo capa
- 1. reemplazar un texto en particular en todos los archivos usando el comando de shell de una línea
- 2. Reemplazar cadena en archivo de texto usando PHP
- 3. ¿Cómo puedo reemplazar una línea específica por número de línea en un archivo de texto?
- 4. PHP Modificar una sola línea en un archivo de texto
- 5. ¿Cómo saltar a una línea particular en un gran archivo de texto?
- 6. reemplazar una línea con múltiples líneas en un archivo
- 7. Cómo obtener una línea particular de un archivo
- 8. ¿Cómo agregar una línea vacía en un archivo de texto usando la línea de comando?
- 9. cómo reemplazar (actualizar) el texto en un archivo línea por línea
- 10. Obtener una línea en un archivo enorme con PHP
- 11. ¿Cómo reemplazar el texto en el archivo de texto usando el script del archivo bat?
- 12. ¿Cómo recorre cada línea en un archivo de texto usando un archivo de lote de Windows?
- 13. Leer un archivo de texto con php
- 14. ¿Cómo puede encontrar y reemplazar texto en un archivo usando el entorno de línea de comandos de Windows?
- 15. sobrescribir una línea específica en un archivo de texto usando VB.NET
- 16. Reemplazar caracteres en un archivo
- 17. ¿Cómo reemplazar un personaje con una nueva línea en Emacs?
- 18. Reemplazar cadena en un archivo de texto en node.js
- 19. Reemplazar texto en archivo con Python
- 20. Cómo reemplazar una cadena en una posición particular
- 21. ¿Cómo guardo un cuadro de texto multilínea como una línea en un archivo de texto?
- 22. leyendo un archivo de texto en R línea por línea
- 23. cadena reemplazar en un archivo grande con php
- 24. ¿Cómo reemplazo todos mis valores NULL en un campo particular en una tabla particular?
- 25. Leer un archivo de texto línea por línea en Qt
- 26. ¿Cómo agrego una línea de texto al medio de un archivo usando bash?
- 27. Cómo utilizar PowerShell para eliminar espacio del final de una línea en un archivo de texto
- 28. ¿Cómo reemplazar la cadena en un archivo usando NANT?
- 29. ¿Cuál es la MEJOR manera de reemplazar texto en un archivo usando C#/.NET?
- 30. Leer en archivo de texto línea por línea php - no se detectó nueva línea
Thanq ..... Está funcionando bien – kishore
El enfoque menos intensivo en memoria es exactamente lo que necesitaba (simple y fácil de entender) ..... ¡¡¡GRACIAS !!! – scottcarmich