Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Como eliminar una linea de un txt

Estas en el tema de Como eliminar una linea de un txt en el foro de C/C++ en Foros del Web. Hola gente como andan?, quisiera saber si alguno sabe una forma de eliminar una linea de un txt?...
  #1 (permalink)  
Antiguo 11/04/2014, 14:02
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Como eliminar una linea de un txt

Hola gente como andan?, quisiera saber si alguno sabe una forma de eliminar una linea de un txt?
  #2 (permalink)  
Antiguo 11/04/2014, 14:27
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

Hola, podrías indicar para que lenguaje necesitás hacerlo?
ya que son diferentes C y C++

Gracias
  #3 (permalink)  
Antiguo 11/04/2014, 17:54
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Como eliminar una linea de un txt

Hola. También intenta algo por tu cuenta, aunque sea mínimo, para que podamos ayudarte con tu código!
  #4 (permalink)  
Antiguo 11/04/2014, 21:15
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola, podrías indicar para que lenguaje necesitás hacerlo?
ya que son diferentes C y C++

Gracias
Es para c++ :B
  #5 (permalink)  
Antiguo 11/04/2014, 21:18
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Cita:
Iniciado por carbon Ver Mensaje
Hola. También intenta algo por tu cuenta, aunque sea mínimo, para que podamos ayudarte con tu código!
Hola carbon! de verdad intente varias cosas pero no tengo idea, lo unico que tengo es la linea que quiero borrar del archivo de texto pero no se como eliminarlas mira

Código C++:
Ver original
  1. void salidaTam(ifstream &v1, string p1,string p2){
  2.     string linea;
  3.     ofstream fsalida1;
  4.     fsalida1.open(p2.c_str(), ofstream::app);
  5.     while(!v1.eof()){
  6.         getline(v1,linea);
  7.         if (p1=="a"){
  8.             if (linea.substr(0,1)=="c"){
  9.                 fsalida1<<linea<<endl; // esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  10.             }
  11.         }
  12.         if (p1=="b"){
  13.             if (linea.substr(0,1)=="m"){
  14.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  15.             }
  16.         }
  17.         if (p1=="c"){
  18.             if (linea.substr(0,1)=="g"){
  19.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  20.             }
  21.         }
  22.     }
  23.     fsalida1.close();
  24. }
  #6 (permalink)  
Antiguo 12/04/2014, 06:19
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

Hola nuevamente, creo que este código te funcionará:

Código C++:
Ver original
  1. void salidaTam(ifstream &v1, string p1,string p2){
  2.     string linea;
  3.     ofstream fsalida1;
  4.     fsalida1.open(p2.c_str(), ofstream::app);
  5.     while(!v1.eof()){
  6.         getline(v1,linea);
  7.         if (p1=="a"){
  8.             if (linea.substr(0,1)!="c"){
  9.                 fsalida1<<linea<<endl; // esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  10.             }
  11.         }
  12.         if (p1=="b"){
  13.             if (linea.substr(0,1)!="m"){
  14.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  15.             }
  16.         }
  17.         if (p1=="c"){
  18.             if (linea.substr(0,1)!="g"){
  19.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  20.             }
  21.         }
  22.     }
  23.     fsalida1.close();
  24. }

Creo que va a funcionar porque simplemente el programa no escribirá en el archivo si se cumplen estas condiciones:

if (linea.substr(0,1)!="c"){
if (linea.substr(0,1)!="m"){
if (linea.substr(0,1)!="g"){


Espero que te funcione!!
Suerte!!
  #7 (permalink)  
Antiguo 12/04/2014, 08:09
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola nuevamente, creo que este código te funcionará:

Código C++:
Ver original
  1. void salidaTam(ifstream &v1, string p1,string p2){
  2.     string linea;
  3.     ofstream fsalida1;
  4.     fsalida1.open(p2.c_str(), ofstream::app);
  5.     while(!v1.eof()){
  6.         getline(v1,linea);
  7.         if (p1=="a"){
  8.             if (linea.substr(0,1)!="c"){
  9.                 fsalida1<<linea<<endl; // esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  10.             }
  11.         }
  12.         if (p1=="b"){
  13.             if (linea.substr(0,1)!="m"){
  14.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  15.             }
  16.         }
  17.         if (p1=="c"){
  18.             if (linea.substr(0,1)!="g"){
  19.                 fsalida1<<linea<<endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  20.             }
  21.         }
  22.     }
  23.     fsalida1.close();
  24. }

Creo que va a funcionar porque simplemente el programa no escribirá en el archivo si se cumplen estas condiciones:

if (linea.substr(0,1)!="c"){
if (linea.substr(0,1)!="m"){
if (linea.substr(0,1)!="g"){


Espero que te funcione!!
Suerte!!
pero lo que hace esta función es copiar una línea en un txt aparte, yo lo que quiero hacer es esa línea que copio borrarla del archivo original después de copiarla
  #8 (permalink)  
Antiguo 12/04/2014, 10:33
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

ahora entiendo perfectamente, probare si puedo ayudarte soy muy novato, pero trataré de darte una mano, ya hare algunas pruebas y si me funcionan te las paso o si alguien te resuelve el problema antes.
  #9 (permalink)  
Antiguo 12/04/2014, 14:03
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Cita:
Iniciado por Principe_Azul Ver Mensaje
ahora entiendo perfectamente, probare si puedo ayudarte soy muy novato, pero trataré de darte una mano, ya hare algunas pruebas y si me funcionan te las paso o si alguien te resuelve el problema antes.
Yo tambien soy novato jeje recien hace 1 año que empece a programar, todavia me falta mucho u,u
  #10 (permalink)  
Antiguo 12/04/2014, 15:57
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

De a poco vamos a aprender!!!
Yo llevo tan sólo días en C++ y ya he hecho uno que otro programa muy básico.
De a poco llegaremos lejos.
  #11 (permalink)  
Antiguo 13/04/2014, 18:04
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Lo que yo intente hacer es comparar el archivo original con el que ya esta clasifica y las lineas que son diferentes ponerlas en un archivo original 2 por asi decirlo pero me copia una linea mal y otra que falta no la pone

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     ifstream entrada("prueba.txt"); //archivo original
  8.     ifstream salida("prueba2.txt"); //archivo con algunas lineas del original
  9.     ofstream salida2("prueba3.txt"); // archivo vacio para poner las lineas del
  10.      //original que  no esten en el "prueba2.txt"
  11.     string linea,linea2;
  12.  
  13.     while(!entrada.eof()){
  14.         getline(entrada,linea);
  15.         for(int i=0; i<!salida.eof();i++){
  16.             getline(salida,linea2);
  17.             if(linea != linea2){
  18.                 salida2 << linea << endl;
  19.             }
  20.         }
  21.     }
  22.     return 0;
  23. }
  #12 (permalink)  
Antiguo 14/04/2014, 21:54
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

Hola Urban94, por fin he podido hacer el código que necesitás, me ha llevado días, pero era algo simple, aunque no es la primera vez que me pasa.
Lo que pasa que muchas veces la cabeza debe descansar y luego cuando volvés a sentarte en la pc, lo hacés como si fuese que vino un ingeniero y te dijo esto se hace así, así y así; pude hacerlo porque despejé un momento mi mente y cuando volví le entendí al código, había hecho algo que me estaba fallando y además eran innecesarias algunas cosas, pero bueno pude terminarlo sim problemas.

Quiero comentarte que lo he probado y funciona perfectamente!!!
El código es este:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8.     char linea[1280];
  9.     int IncNums = 0;
  10.     string cadena1;
  11.     ifstream Lectura("Lectura.txt");
  12.     ofstream Escritura("Escritura.txt");
  13.     Lectura.getline(linea, 1280);
  14.     string p1;
  15.     vector<string> GuardaDatos(0);
  16.  
  17.     while (!Lectura.eof()) {
  18.         p1 = linea[0];
  19.         cadena1 = linea[1];
  20.         IncNums++;
  21.  
  22.         if (p1=="a"){
  23.             if (cadena1=="c"){
  24.                 Escritura << linea << endl; // esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  25.             }
  26.         }
  27.         else if (p1=="b"){
  28.             if (cadena1=="m"){
  29.                 Escritura << linea << endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  30.             }
  31.         }
  32.         else if (p1=="c"){
  33.             if (cadena1=="g"){
  34.                 Escritura << linea << endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  35.             }
  36.         }
  37.         else {
  38.             GuardaDatos.push_back(linea);
  39.         }
  40.         Lectura.getline(linea, 1280);
  41.     }
  42.  
  43.     Escritura.close();
  44.     Lectura.close();
  45.  
  46.     ofstream Escritura1("Lectura.txt");
  47.     int Nums1 = 0;
  48.     int TotalPals = GuardaDatos.size();
  49.  
  50.     while (Nums1 < TotalPals) {
  51.         Escritura1 << GuardaDatos[Nums1] << endl;
  52.         Nums1++;
  53.     }
  54.     Escritura1.close();
  55. }

Nota: El programa es case sensitive por lo que las mayúsculas y minúsculas se distinguirán, puedes cambiar este comportamiento aplicando uno de los 2 métodos: upper o lower a la variable p1.

Antes de que ejecutés el programa, debés crear un archivo en formato .txt de nombre Lectura con lo siguiente:

ac
bm
zx
cg
zx
ac
bm
zx
cg
zx
ac
bm
cg
ac
zx
bm
cg
zx
ac
bm
cg
zx
ac
bm
zx
cg
ac
bm
zx
cg
ac
zx
bm
cg
zx

El archivo de escritura no es necesario que lo crees ya que el programa lo hará por el mismo.

Cuando crees ese archivo y le escribás dentro de él lo que puse arriba, entónces ejecutá el programa y al terminar el mismo, te creará un archivo en formato .txt de nombre Escritura con lo siguiente:

ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg

y el archivo Lectura.txt te quedará con estos datos:

zx
zx
zx
zx
zx
zx
zx
zx
zx
zx
zx

Bueno eso es lo que querías, espero que sea eso!!!!!

Este es como mi cuarto programa en C++ mi siento felíz de haberlo podido hacer

Muchas gracias a las personas que no han querido postear la solución para dejarme el lugar a mi, así aprendo, les agradezco!!!

Buena suerte y hasta pronto.

PD: El archivo Lectura.txt debe estar en el mismo directorio que el programa, por ejemplo:

C:\Users\Daniel\Desktop\C++\Programa.exe
C:\Users\Daniel\Desktop\C++\Lectura.txt

Última edición por Principe_Azul; 14/04/2014 a las 22:06
  #13 (permalink)  
Antiguo 15/04/2014, 13:52
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Cita:
Iniciado por Principe_Azul Ver Mensaje
Hola Urban94, por fin he podido hacer el código que necesitás, me ha llevado días, pero era algo simple, aunque no es la primera vez que me pasa.
Lo que pasa que muchas veces la cabeza debe descansar y luego cuando volvés a sentarte en la pc, lo hacés como si fuese que vino un ingeniero y te dijo esto se hace así, así y así; pude hacerlo porque despejé un momento mi mente y cuando volví le entendí al código, había hecho algo que me estaba fallando y además eran innecesarias algunas cosas, pero bueno pude terminarlo sim problemas.

Quiero comentarte que lo he probado y funciona perfectamente!!!
El código es este:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. int main() {
  7.  
  8.     char linea[1280];
  9.     int IncNums = 0;
  10.     string cadena1;
  11.     ifstream Lectura("Lectura.txt");
  12.     ofstream Escritura("Escritura.txt");
  13.     Lectura.getline(linea, 1280);
  14.     string p1;
  15.     vector<string> GuardaDatos(0);
  16.  
  17.     while (!Lectura.eof()) {
  18.         p1 = linea[0];
  19.         cadena1 = linea[1];
  20.         IncNums++;
  21.  
  22.         if (p1=="a"){
  23.             if (cadena1=="c"){
  24.                 Escritura << linea << endl; // esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  25.             }
  26.         }
  27.         else if (p1=="b"){
  28.             if (cadena1=="m"){
  29.                 Escritura << linea << endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  30.             }
  31.         }
  32.         else if (p1=="c"){
  33.             if (cadena1=="g"){
  34.                 Escritura << linea << endl;// esta linea la guardo en un txt pero tambien es la que quiero eliminar del archivo original
  35.             }
  36.         }
  37.         else {
  38.             GuardaDatos.push_back(linea);
  39.         }
  40.         Lectura.getline(linea, 1280);
  41.     }
  42.  
  43.     Escritura.close();
  44.     Lectura.close();
  45.  
  46.     ofstream Escritura1("Lectura.txt");
  47.     int Nums1 = 0;
  48.     int TotalPals = GuardaDatos.size();
  49.  
  50.     while (Nums1 < TotalPals) {
  51.         Escritura1 << GuardaDatos[Nums1] << endl;
  52.         Nums1++;
  53.     }
  54.     Escritura1.close();
  55. }

Nota: El programa es case sensitive por lo que las mayúsculas y minúsculas se distinguirán, puedes cambiar este comportamiento aplicando uno de los 2 métodos: upper o lower a la variable p1.

Antes de que ejecutés el programa, debés crear un archivo en formato .txt de nombre Lectura con lo siguiente:

ac
bm
zx
cg
zx
ac
bm
zx
cg
zx
ac
bm
cg
ac
zx
bm
cg
zx
ac
bm
cg
zx
ac
bm
zx
cg
ac
bm
zx
cg
ac
zx
bm
cg
zx

El archivo de escritura no es necesario que lo crees ya que el programa lo hará por el mismo.

Cuando crees ese archivo y le escribás dentro de él lo que puse arriba, entónces ejecutá el programa y al terminar el mismo, te creará un archivo en formato .txt de nombre Escritura con lo siguiente:

ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg
ac
bm
cg

y el archivo Lectura.txt te quedará con estos datos:

zx
zx
zx
zx
zx
zx
zx
zx
zx
zx
zx

Bueno eso es lo que querías, espero que sea eso!!!!!

Este es como mi cuarto programa en C++ mi siento felíz de haberlo podido hacer

Muchas gracias a las personas que no han querido postear la solución para dejarme el lugar a mi, así aprendo, les agradezco!!!

Buena suerte y hasta pronto.

PD: El archivo Lectura.txt debe estar en el mismo directorio que el programa, por ejemplo:

C:\Users\Daniel\Desktop\C++\Programa.exe
C:\Users\Daniel\Desktop\C++\Lectura.txt
Tienes toda la razon, estaba tan encascado en comparar 2 textos, que nunca se me hubiera ocurrido esta forma, la verdad esta genial. Muchas gracias!!
  #14 (permalink)  
Antiguo 15/04/2014, 13:54
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Solo quisiera que me expliques como funciona este pedasito de codigo

Código C++:
Ver original
  1. vector<string> GuardaDatos(0);

y este
Código C++:
Ver original
  1. GuardaDatos.push_back(linea)

entiendo que es un vector de string, pero nunca vi uno asi xD
  #15 (permalink)  
Antiguo 15/04/2014, 14:13
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

Hola Urban94!!

En esta línea:

Código C++:
Ver original
  1. vector<string> GuardaDatos(0);

se define un vector de tipo "string o cadena" con el nombre de GuardaDatos y un valor de 0, esto quiere decir que el vector no tiene nada dentro de él ni tampoco tiene un tamaño ya que se lo creó con el valor 0, para eso utilicé esta otra línea:

Código C++:
Ver original
  1. GuardaDatos.push_back(linea)

que sirve para agregar valores a un vector y además sirve para aumentar en 1 el tamaño del vector, por ejemplo:

Código C++:
Ver original
  1. vector<string> GuardaDatos(0);
  2. GuardaDatos.push_back("hola")
  3. GuardaDatos.push_back("como")
  4. GuardaDatos.push_back("estas")

ahí creamos un vector de nombre GuardaDatos con el tamaño 0 y agregamos 3 valores:

"hola"
"como"
"estas"

pero al usar el método push_back se incrementa el tamaño del vector en 1, entónces el vector pasa a tener un valor de 3, porque cláro agregamos 3 valores!!!

Entónces si queremos saber los valores simplemente con usar estos 3 métodos se obtiene los 3 valores del vector:

Código C++:
Ver original
  1. GuardaDatos[0] // Devuelve hola
  2. GuardaDatos[1] // Devuelve como
  3. GuardaDatos[2] // Devuelve estas

Espero haber sido cláro y hacés bien en preguntar!!!

Nota: He buscado por todos lados para saber como borrar líneas en un archivo de texto, pero he encontrado métodos no esperados, por ejemplo crear un archivo nuevo en donde almacenar los nuevos valores, luego se elimina el archivo original y el archivo nuevo se lo renombra como estaba antes (el que se eliminó), pero esto no lo ví para nada bien, no es la manera y menos para un lenguaje como C++.
Así que probando logré guardar todos los datos de cada línea en un vector para luego sobreescribir en el mismo archivo con los valores nuevos.

PD: En esta parte del código:

Código C++:
Ver original
  1. GuardaDatos.push_back(linea)

la palabra linea es una variable de tipo char que contiene el valor de las líneas del archivo original.


Nos vemos!! Suerte!!!
  #16 (permalink)  
Antiguo 15/04/2014, 19:08
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Código C++:
Ver original
  1. string vector[0];
ah joya ya entendí todo aunque hasta donde yo entendia los vectores se declaraban así
  #17 (permalink)  
Antiguo 15/04/2014, 21:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como eliminar una linea de un txt

Se refiere a la clase vector:
https://www.youtube.com/playlist?lis...1FA8520A1A818C
http://www.minidosis.org/#/temas/Cpp.Vectores

:3
  #18 (permalink)  
Antiguo 17/04/2014, 09:38
 
Fecha de Ingreso: marzo-2014
Ubicación: Buenos Aires
Mensajes: 59
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Como eliminar una linea de un txt

Joya vangodp, me re sirve la pagina de minidosis xD
  #19 (permalink)  
Antiguo 17/04/2014, 23:05
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como eliminar una linea de un txt

Pues no sé si eso es un array o una string, porque se declara como string, pero también lleva el nombre de vector.

Etiquetas: txt
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 18:07.