eliminar línea de archivo .txt

1,966 views
Skip to first unread message

carlos

unread,
Mar 17, 2009, 8:50:18 AM3/17/09
to PHP-Ovillo
Hola foro, he intentado adaptar un código que encontre, pero mis
nociones de php son básicas y no acabo de conseguir que funcione, el
ejemplo donde aparecía esta creado para borrar todas las lineas en
blanco del archivo, en cambio yo quisiera borrar sólo la línea que le
paso por una variable.

En principio consigo borrar la línea pero al mismo tiempo también me
borra el contenido de las demás líneas dejándome el archivo con líneas
en blanco.

<?php
$archivo = file('elarchivo.txt');

foreach($archivo as $a => $va1){
if($archivo[$a] = $_GET['linea'] ){
unset($archivo[$a]);
}
}

file_put_contents('elarchivo.txt', implode ( $archivo, "\n") );

?>

No endiendo muy bien que hace el file_put_contents() imagino que
reescribir el archivo, si elimino esta línea, va peor

alguien puede echar una mano?

gracias anticipadas

carlos campderrós

unread,
Mar 17, 2009, 9:04:20 AM3/17/09
to php-o...@googlegroups.com
Hola,

comento encima del código...

2009/3/17 carlos <carlo...@gmail.com>


En principio consigo borrar la línea pero al mismo tiempo también me
borra el contenido de las demás líneas dejándome el archivo con líneas
en blanco.

<?php
$archivo = file('elarchivo.txt');

foreach($archivo as $a => $va1){

// dos errores en esta línea. El más importante, estás asignando a la línea del texto el valor
// de $_GET['linea'], en vez de comparar los valores.
// y por otro lado, lo que has de comparar es tan sólo $a, no $archivo[$a].
// así que cambiala por:   if ($a == $_GET['linea']) {
if($archivo[$a] = $_GET['linea'] ){
unset($archivo[$a]);
}
}

file_put_contents('elarchivo.txt', implode ( $archivo, "\n") );

?>

No endiendo muy bien que hace el file_put_contents() imagino que
reescribir el archivo

http://php.net/file-put-contents

Saludos.


--
Si no puedes deslumbrar con tu sabiduría,
desconcierta con tus gilipolleces

carlos campderrós

unread,
Mar 17, 2009, 9:07:41 AM3/17/09
to php-o...@googlegroups.com
Hola, vuelvo a ser yo. Una mejora bastante gorda del código anterior...

<?php

$archivo = file('elarchivo.txt');
if (isset($archivo[$_GET['linea']]))
{
  unset($archivo[$_GET['linea']]);
}

file_put_contents('elarchivo.txt', implode($archivo, "\n"));
?>

carlos

unread,
Mar 17, 2009, 10:37:27 AM3/17/09
to PHP-Ovillo
Hola,
gracias por contestar, me ha borrado el contenido de la lína pero no
la línea, he probado con poner

<?php
$archivo = file('elarchivo.txt');

if (isset($archivo[$_GET['linea']])) {
unset($archivo[$_GET['linea']]);
}elseif($archivo[$a]==""){
unset($archivo[$a]);
}

file_put_contents('elarchivo.txt', implode($archivo, "\n"));

?>

No da ningún error pero no borra la línea tampoco...o es por el salto
de línea del final de file_put_contents?

saludos
carlos carrera

carlos

unread,
Mar 17, 2009, 12:47:07 PM3/17/09
to PHP-Ovillo
Hola de nuevo he probado de cambiar esta línea por

> file_put_contents('elarchivo.txt', implode($archivo));

y en localhost me funciona pero en el servidor me dice

Fatal error: Call to undefined function: file_put_contents() in

saludos
carlos carrera

carlos campderrós

unread,
Mar 17, 2009, 12:59:30 PM3/17/09
to php-o...@googlegroups.com
Hola,

file_put_contents según el manual se introdujo en php5. Lo que
significa que más te vale actualizar (si puedes) el servidor, ya que
debe estar corriendo en php4 y hace como mucho tiempo que se dió por
muerto, por lo que no hay actualizaciones de seguridad ni nada.

Por otra parte, puedes simular el comportamiento de file_put_contents
con fopen, fwrite y fclose. Mira el topic justo antes q este (de Jaume
Op, no recuerdo el asunto) y el manual sobre fopen, fwrite y fclose y
en 10 minutos lo tienes.

carlos

unread,
Mar 18, 2009, 1:26:14 PM3/18/09
to PHP-Ovillo
gracias lo probaré

saludos
carlos carrera

jop

unread,
Mar 19, 2009, 3:27:20 AM3/19/09
to php-o...@googlegroups.com
El asunto en concreto es
[php-ovillo] Comentarios en web del dia del dia 17/03/09

Jaume

carlos carrera soro

unread,
Mar 19, 2009, 9:07:08 AM3/19/09
to php-o...@googlegroups.com
>El asunto en concreto es
>[php-ovillo] Comentarios en web del dia del dia 17/03/09

si lo encontre  gracias, acabo de conseguirlo, imagino que el código es correcto porque funciona

<?php 
//guardar contenido en un array
$cont = file('ofertas.txt'); 

        //saber el número de líneas
$numero_filas = count($cont);

echo "hay ".$numero_filas." ofertas en la base de datos";
        
        //borrar una línea
if (isset($cont[$_GET['linea']])) { 
unset($cont[$_GET['linea']]); 
}

$cont_new = implode('', $cont);

$f = fopen('ofertas.txt', 'w');
fwrite($f, $cont_new);
fclose($f);  

echo "<p><strong>La oferta ha sido eliminada</strong></p>";
?>  

--
saludos
-------------------------------------------------------------------------------------------------------------------------
Carlos carrera

Reply all
Reply to author
Forward
0 new messages