Estoy en un tutorial que presenta archivos (cómo leer y escribir desde \ a un archivo)
En primer lugar, esto no es una tarea, 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 (Leer) contiene lo siguiente:
Amo jugar juegos Amo leer 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 >>
¿Existe alguna forma posible de leer todo el archivo a la vez, en lugar de leer cada línea o cada palabra por separado?
Respuestas:
Puede utilizar
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 simplemente construir 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).
Se
std::string::getline()
puede leer más documentación sobre en CPP Reference .Probablemente, la forma más fácil de leer un archivo de texto completo es simplemente concatenar esas 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'); }
fuente
while(getline(f, line)) { ...}
realmente es la forma recomendada de hacer esto. Esto se explica aquí: gehrcke.de/2011/06/… --- allí también encontrará enfoques útiles para el manejo adecuado de errores.#include <iostream>
#include <iostream>
necesario? Me parece que<fstream>
ya<string>
son suficientes. Si quieres decirstd::getline
, está dentro<string>
, no dentro<iostream>
.Sé que este es un hilo realmente antiguo, pero también me gustaría señalar otra forma que en realidad es realmente simple ... Este es un código de muestra:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("filename.txt"); string content; while(file >> content) { cout << content << ' '; } return 0; }
fuente
Creo que podrías usar la función istream .read (). Puede simplemente hacer un ciclo con un tamaño de fragmento razonable 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 avíseme si necesita información adicional.
fuente
Bueno, para hacer esto, también puede usar la función freopen provista en C ++ - http://www.cplusplus.com/reference/cstdio/freopen/ y leer 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; }
fuente
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); }
Luego, simplemente puede iterar sobre el vector y modificar / extraer lo que necesita /
fuente
vector
es un paso innecesario. Podría iterar sobre elifstream
usingstd::istream_iterator<std::string>(inFile)
.también puede usar esto para leer todas las líneas en el archivo una por una y luego imprimir i
#include <iostream> #include <fstream> using namespace std; bool check_file_is_empty ( ifstream& file){ return file.peek() == EOF ; } int main (){ string text[256]; int lineno ; ifstream file("text.txt"); int num = 0; while (!check_file_is_empty(file)) { getline(file , text[num]); num++; } for (int i = 0; i < num ; i++) { cout << "\nthis is the text in " << "line " << i+1 << " :: " << text[i] << endl ; } system("pause"); return 0; }
Espero que esto pueda ayudarte :)
fuente
hola hermano esta es una forma de leer la cadena en la línea exacta usando este código
Espero que esto pueda ayudarte !
#include <iostream> #include <fstream> using namespace std; int main (){ string text[1]; int lineno ; ifstream file("text.txt"); cout << "tell me which line of the file you want : " ; cin >> lineno ; for (int i = 0; i < lineno ; i++) { getline(file , text[0]); } cout << "\nthis is the text in which line you want befor :: " << text[0] << endl ; system("pause"); return 0; }
Buena suerte !
fuente