Foros del Web » Programando para Internet » PHP »

[Solucionado] Borrar líneas *.txt con datos separadas por comas

Estas en el tema de [Solucionado] Borrar líneas *.txt con datos separadas por comas en el foro de PHP en Foros del Web. El problema rezaba asi: Tengo una serie de datos agrupados por líneas y separados por comas en un TXT, es decir: Línea uno: numerox,colorx,marcax,saborx... Línea ...
  #1 (permalink)  
Antiguo 30/12/2008, 05:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación [Solucionado] Borrar líneas *.txt con datos separadas por comas

El problema rezaba asi:

Tengo una serie de datos agrupados por líneas y separados por comas en un TXT, es decir:

Línea uno: numerox,colorx,marcax,saborx...
Línea dos: ynumero,ycolor,ymarca,ysabor...

Problema: En un formulario, el usuario me indíca el segundo dato con el objetivo de que se borre la línea del txt y se suprima el vacío que deja.

Hasta donde he llegado:Tengo una página con un bucle while que busca en el txt el dato que da el usuario. Lo encuentra... pero a lo máximo que he llegado es a borrar todo el archivo, no solo la línea con un file/str_replace.

Código:(para muestra un botón)
[
Código PHP:
// recuperando las variables del trabajo buscado y seleccionado para borrar

$nueva=$_REQUEST["nueva"];
$busca=$_REQUEST["numerotrabajo"]; //buscamos ya que asignamos el nombre original a la del vector
$tecnic=$_REQUEST["tecnica"];
$cantidad=$_REQUEST["cantidad"];
$articulo=$_REQUEST["articulo"];
$texto=$_REQUEST["texto"];
$c1=$_REQUEST["c1"];
$c2=$_REQUEST["c2"];
$cliente=$_REQUEST["cliente"];
$fichero=@fopen("sinasignar/$tecnic.txt",'r'); 
// abro archivo lectura 
    
if (!$fichero)  {
    echo(
"");
    }else{
while ( !
feof$fichero ) ) 
// no parar hasta que acabe el archivo 
{

$c fgets$ficherofilesize("sinasignar/$tecnic.txt") ); 

// separa cada dato
$v=explode(",","$c"); 
$nueva=$v[0];
$numerotrabajo=$v[1];
$tecnica=$v[2];
$cantidad=$v[5];        
$articulo=$v[6];    
$texto=$v[7];                    
$c1=$v[8];        
$c2=$v[9];
$cliente=$v[10];
if ( 
$busca==$numerotrabajo 
// SI hay coincidencia
{
:
'(:'(:'(:'(:'(:'(:'(:'(:'(:'(
}}} 
La solucion:

Código PHP:
// recuperando las variables del trabajo buscado y seleccionarlo para borrar

$nuevar=$_REQUEST["nueva"];
$busca=$_REQUEST["numerotrabajo"]; //buscamos ya que asignamos el nombre original a la del vector
$tecnicar=$_REQUEST["tecnica"];
$cantidadr=$_REQUEST["cantidad"];
$articulor=$_REQUEST["articulo"];
$textor=$_REQUEST["texto"];
$c1r=$_REQUEST["c1"];
$c2r=$_REQUEST["c2"];
$clienter=$_REQUEST["cliente"];

$fichero=@fopen("sinasignar/$tecnicar.txt",'rb');
$tmp=@fopen("sinasignar/temp.txt",'wb');
   
   while ( !
feof$fichero ) ) // no parar hasta que acabe el archivo
{
// lee hasta(\n),EOF 
$c fgets$ficherofilesize("sinasignar/$tecnicar.txt") ); 
            
// separa cada dato
$v=explode(",","$c"); 
$nueva=$v[0];
$numerotrabajo=$v[1];
$tecnica=$v[2];
$cantidad=$v[5];        
$articulo=$v[6];    
$texto=$v[7];                    
$c1=$v[8];        
$c2=$v[9];
$cliente=$v[10];

    if ( 
$busca!=$numerotrabajo ){
fputs($tmp,"$c");
}
}
fclose("$fichero");
fclose("$tmp");

//renombrar machacar el original

$dir="sinasignar/$tecnicar.txt"//puedes usar dobles comillas si quieres 
if(file_exists($dir)) 

if(
unlink($dir)) 
print 
"El archivo fue borrado"

else 
print 
"Este archivo no existe"


$dir2="sinasignar/temp.txt"//puedes usar dobles comillas si quieres 
if(file_exists($dir2)) 

if(
rename($dir2 "sinasignar/$tecnicar.txt")) 
print 
"El archivo fue renombrado"

else 
print 
"Este archivo no existe"

Última edición por sadai; 31/12/2008 a las 01:45 Razón: solucionado
  #2 (permalink)  
Antiguo 30/12/2008, 06:05
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

No puedes borrar parte de un fichero. Lo que debes hacer es escribir el fichero de nuevo solo con los datos que deben quedar.
  #3 (permalink)  
Antiguo 30/12/2008, 06:05
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

Hola otra vez, posteo alguna de las pruebas que voy haciendo mientras llega alguien que por favor me eche una mano :) Con esto me borra la línea pero deja las comas y me descoloca la siguiente

if ( $busca==$numerotrabajo ) // SI encuentra pedido
{
//antepongo ; al dato a borrar por que asi queda mas adelante
$borrar=$v;
//leo el archivo a un array, transformo el array en
//una cadena separada por ;

$cadena=join(";",file("sinasignar/$tecnic.txt"));
//reemplazo lo que voy a borrar en la cadena por nada
$cadena=str_replace($borrar,"",$cadena);
//reeemplazo los ; por saltos de línea
$cadena=str_replace(";","",$cadena);
//escribo la cadena resultante al archivo
file_put_contents("sinasignar/$tecnic.txt",$cadena);

}

Última edición por sadai; 30/12/2008 a las 06:08 Razón: hacerlo más legible :D
  #4 (permalink)  
Antiguo 30/12/2008, 06:10
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 17 años, 6 meses
Puntos: 74
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

Darkj, te lo ha dejado claro.
No puedes borra X linea de un fichero. Es imposible. Ya que te borrara todo el fichero.
He de ahí que para hacer mas o menos lo que dices, deberás de escribir el fichero de nuevo con los datos que quieres.

Saludos,
  #5 (permalink)  
Antiguo 30/12/2008, 07:12
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

Oido cocina, muy amables y muy rápidos :)

Entonces, en mi caso... como podría reescribir el archivo sin una linea concreta? Empezando ando y no me aclaro mucho como véis :). He puesto un ejemplo más abajo aplicado a mi caso (que no he sabido hacerlo funcionar) que he encontrado en estos foros:

<?php
// recuperando las variables del trabajo buscado y seleccionado para borrar

$nueva=$_REQUEST["nueva"];
$busca=$_REQUEST["numerotrabajo"]; //buscamos ya que asignamos el nombre original a la del vector
$tecnic=$_REQUEST["tecnica"];
$cantidad=$_REQUEST["cantidad"];
$articulo=$_REQUEST["articulo"];
$texto=$_REQUEST["texto"];
$c1=$_REQUEST["c1"];
$c2=$_REQUEST["c2"];
$cliente=$_REQUEST["cliente"];

$fichero=@fopen("sinasignar/$tecnic.txt",'r');
while ( !feof( $fichero ) ) // no parar hasta que acabe el archivo
{
$c = fgets( $fichero, filesize("sinasignar/$tecnic.txt") );
// separa cada dato
$v=explode(",","$c");
$nueva=$v[0];
$numerotrabajo=$v[1];
$tecnica=$v[2];
$cantidad=$v[5];
$articulo=$v[6];
$texto=$v[7];
$c1=$v[8];
$c2=$v[9];
$cliente=$v[10];

if ($busca==$numerotrabajo){

//antepongo ; al dato a borrar por que asi queda mas adelante
$borrar=";$v";
//leo el archivo a un array, transformo el array en
//una cadena separada por ;
$cadena=join(";",file("sinasignar/$tecnic.txt"));
//reemplazo lo que voy a borrar en la cadena por nada
$cadena=str_replace($borrar,"",$cadena);
//reeemplazo los ; por saltos de línea $cadena=str_replace(";","",$cadena);
//escribo la cadena resultante al archivo file_put_contents("sinasignar/$tecnic.txt",$cadena);

for ($i = 0; $i < count($v); $i++)

echo "<p>";
}}
?>
borrando...
<?php
fclose($fichero);
?>
  #6 (permalink)  
Antiguo 30/12/2008, 10:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

mm.. si puedes borrar una linea concreta!!

Código PHP:
$tmp file('foo.dat'); // cargamos en array

unset($tmp[12]); // borramos la linea 13 (si 13)

file_put_contents('foo.dat'join(''$tmp)); 
bingo!?


Referencia:

http://www.forosdelweb.com/f18/aport...-texto-593101/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 30/12/2008, 10:27
 
Fecha de Ingreso: julio-2008
Ubicación: Cba / Argentina
Mensajes: 2
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

pateketrueke Sos un groso ! ;)

Muchas Gracias, lo voy a tener en cuenta yo también.... K+
  #8 (permalink)  
Antiguo 30/12/2008, 11:22
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

Muchas gracias por el aporte :)

Llevo un rato haciendo probatinas pero demomento nada... Sigo en ello y con la referencia que has psteado y te cuento luego :)

Gracias de nuevo...

EDITO:

Hay cosas que no entiendo...

Código PHP:
$tmp file('foo.dat'); // cargamos en array foo.dat es mi archivo original donde están los datos? no hay problema por ser .txt?
unset($tmp[12]); // borramos la linea 13 (si 13) En mi caso no se que numero de linea es, Si ves el código que he puesto antes, creo que podría saberlo tomando el valor de count del bucle... Alguna sugerencia plis :D
file_put_contents('foo.dat'join(''$tmp)); Ahora cojes y pones los contenidos con nada de separacion... Es asi
Lo siento por el coñazo de mi inexperiencia, gracias de nuevo.

Última edición por sadai; 30/12/2008 a las 11:36 Razón: Aclaración
  #9 (permalink)  
Antiguo 30/12/2008, 11:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

bien, puedes usar cualquier tipo de archivo... no importa la extensión, la única condición es que tenga contenido separador por lineas... eso es simple...

tal ves, lo logras leyendo... y separando con explode las lineas \n, pero file() hace exactamente eso... respetando los saltos de linea...


claro, no sabemos que linea es... pero debemos averiguarlo, ya que no podemos eliminar todo!!

eso lo hacemos con un ciclo, ¿en este caso??

usando, foreach... con el arreglo de nuestro datos...

Código PHP:
foreach ($arreglo as $indice => $linea)
{
  if (
/* ES LA LINEA A BORRAR|ACTUALIZAR|INSERTAR etc.. */)
  {
    
// $indice es la linea...
  
}

ahora, para sobre escribir el indice usa... $arreglo[$indice] = 'nuevo_valor';

o bien, para borrar usa unset, etc, etc...



con respecto al pegado, no recuerdo bien... pero nunca he puesto un separador, osea... el carácter \n (que según entiendo, seria el corte de lineas... )

por mientras, parece que resultaría bien así... no te preocupes!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 31/12/2008, 01:39
 
Fecha de Ingreso: diciembre-2008
Mensajes: 6
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: [ayuda] Borrar líneas *.txt con datos separadas por comas

Muchas gracias por la ayuda, al final lo he solucionado volcando datos a un temporal y machacando archivos despues. Modifico el primer post para poner la solucion :)

Gracias de nuevo, muy amables :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:53.