Visualizar Fichero Pantalla DOS

Yo creo un programa donde tengo una estructura y unas funciones, la funcion cargar tengo este codigo como guardo la informacion en un block de notas y me funciona bien
FILE *fi;
                fi = fopen("BaseD.txt", "a+");
                ofstream fs("BaseD.txt", ios::app);
                fs << ob.del << " | " << ob.nom << " | " << ob.ape<< " | " << ob.cod<< " | " << ob.tel<< " | " << ob.mt <<endl;   
                fs.close();
Ahora cuando la quiero visualizar me arroja otros datos o valores, este es el código que tengo.
char cadena[128];
    ifstream fe("BaseD.txt");    
    fe.getline(cadena, 128);
    cout << ob.ape << endl;
    cin.get();    
    system ("pause");
Me arroja otros valores. Como podría hacer para queme filtrara su búsqueda por código, y como podría hacer para borrar un registro desde la ventana DOS,
mil gracias
mi correo es (xxxxxx)
es algo urgente.

1 Respuesta

Respuesta
1
Primero te recomiendo de siempre utilizar este formato a la hora de leer desde un archivo:
string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }
Ahí veras que se comprobá que la linea existe antes de leerla. En tu caso, como puedes estar seguro que tienes una linea numero 128... Al menos que te cofundas entre el tamaño del dato que quieres leer y el numero de linea...
Luego si quieres leer tu OBJETO desde el archivo, el comando getLine no es suficiente. Tienes que actualizar las variables miembro una a una. Haciendo un sscanf:
Si quiero leer la cadena siguiente "Nombre|apelido|edad" llamo a sscanf de esta manera:
scanf (cadena,"%s|%s|%d",miObjeto.nombre,miObjeto.apelido,&miObjeto.edad);
Suerte.
Hola, mira cuando realizo tu código me dice getline no se encontró el identificador, y que cout << line << endl; binario,  no se encontro  un operador  que adopte un operando en la parte derecha de tipo std(o bien no existe).
ahora mira que ya puedo visualizar lo que contiene el fichero con este codigo
ifstream fe;
    char cad[128];
    fe.open ("BaseD.txt");
    fe >> cad;
    while(!fe.eof())
    {
        cout<<"Nombre\t,Codigo\t\n";
        cout << cad<<"\t";
        fe >> cad;
    }    
    system ("pause");
Mis preguntas son, como podría ver una solo linea digamos hay dos una tiene un campo válido = 's' - 'n', quisiera ver los que contienen válido = 's'.
y como podria yo borrar los campos valido ='n'.
Muchas gracias por tu ayuda...
No te compila porque tienes que definir los include. Pon eso al principio (del todo) de tu código.
// Include for basic file operations
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
Para leer un campo conociendo el formato de la linea puedes utilizar sscanf.
Si tienes una linea del tipo "Campo Valido = 's'"
lo puedes leer haciendo:
char c;
sscanf (lineaDeTexto,"Campo Valido = '%c'",c);
ahora la s estara en la variable c y podras hacer comparaciones tipo 
if (c == 's') {}
<div>Modificar un campo no el lo mas sencillo. mejor leer el archivo por completo y escribir otro. despues se borra el primer archivo y se renombra el otro como el primero.</div>
<div></div>
<div>Aqui tienes un codigo que lo hace todo.</div>
<div></div>
<div>
<div>#include <cstdio></div>
<div>#include <fstream></div>
<div>#include <string></div>
<div>#include <iostream></div>
<div>using namespace std;</div>
<div> </div>
<div>int main()</div>
<div>{</div>
<div>    string line;</div>
<div>    // open input file</div>
<div>    ifstream in("infile.txt");</div>
<div>    if( !in.is_open())</div>
<div>    {</div>
<div>          cout << "Input file failed to open\n";</div>
<div>          return 1;</div>
<div>    }</div>
<div>    // now open temp output file</div>
<div>    ofstream out("outfile.txt");</div>
<div>    // loop to read/write the file.  Note that you need to add code here to check</div>
<div>    // if you want to write the line</div>
<div>    while( getline(in,line) )</div>
<div>    {</div>
<div>        if(line != "I want to delete this line")</div>
<div>            out << line << "\n";</div>
<div>    }</div>
<div>    in.close();</div>
<div>    out.close();    </div>
<div>    // delete the original file</div>
<div>    remove("infile.txt");</div>
<div>    // rename old to new</div>
<div>    rename("outfile.txt","infile.txt");</div>
<div> </div>
<div>    // all done!</div>
<div>    return 0;</div>
<div>}</div>
</div>
<div></div>
<div></div>
<div>Suerte.</div>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas