¿Cómo leer línea por línea o un archivo de texto completo a la vez?


Estoy en un tutorial que introduce archivos (cómo leer y escribir desde\to file)

En primer lugar, esto no es una tarea, esto es solo ayuda general que estoy buscando.

Sé cómo leer una palabra a la vez, pero no sé cómo leer una línea a la vez o cómo leer todo el archivo de texto.

¿Qué pasa si mi archivo contiene 1000 palabras? No es práctico leer cada palabra.

Mi archivo de texto llamado (Read) contiene lo siguiente:

Me encanta jugar juegos Me encanta lectura Tengo 2 libros

Esto es lo que he logrado hasta ahora:

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

¿Hay alguna forma posible de leer todo el archivo a la vez, en lugar de leer cada línea o cada palabra por separado?

Author: simonmorley, 2012-10-23

5 answers

Puedes usar std::getline:

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

También tenga en cuenta que es mejor que simplemente construya el flujo de archivos con los nombres de archivo en su constructor en lugar de abrir explícitamente (lo mismo ocurre con el cierre, simplemente deje que el destructor haga el trabajo).

Más documentación sobre std::string::getline() se puede leer en Referencia CPP.

Probablemente la forma más fácil de leer un archivo de texto completo es solo concatenar las líneas recuperadas.

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.push_back('\n');
}  
 124
Author: 111111,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 13:22:35

Sé que este es un hilo muy, muy viejo, pero me gustaría también señalar otra forma que es realmente muy simple... Este es un código de ejemplo:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {

ifstream file("filename.txt");
string content;

while(file >> content) {
cout << content << ' ';
}
return 0;
}
 18
Author: user2673553,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-29 01:04:06

Creo que podrías usar istream .función read (). Solo puede hacer un bucle con un tamaño razonable de fragmento y leer directamente en el búfer de memoria, luego agregarlo a algún tipo de contenedor de memoria arbitrario (como std::vector). Podría escribir un ejemplo, pero dudo que desee una solución completa; por favor, hágamelo saber si necesita información adicional.

 4
Author: Bartek Banachewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 17:37:54

Bueno, para hacer esto también se puede usar la función freopen proporcionada en C++ - http://www.cplusplus.com/reference/cstdio/freopen / y lea el archivo línea por línea de la siguiente manera:

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}
 4
Author: AnkitSablok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-07 22:23:48

Otro método que aún no se ha mencionado es std::vector.

std::vector<std::string> line;

while(file >> mystr)
{
   line.push_back(mystr);
}

Entonces simplemente puede iterar sobre el vector y modificar / extraer lo que necesita /

 1
Author: Bugster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 17:40:37