Estou em um tutorial que apresenta arquivos (como ler e escrever de \ para arquivo)
Em primeiro lugar, este não é um dever de casa, é apenas uma ajuda geral que estou procurando.
Sei ler uma palavra de cada vez, mas não sei ler uma linha de cada vez ou como ler todo o arquivo de texto.
E se meu arquivo contiver 1000 palavras? Não é prático ler cada palavra.
Meu arquivo de texto denominado (Ler) contém o seguinte:
Amo jogar jogos adoro ler tenho 2 livros
Isso é o que eu fiz até agora:
#include <iostream>
#include <fstream>
using namespace std;
int main (){
ifstream inFile;
inFile.open("Read.txt");
inFile >>
Existe alguma maneira possível de ler todo o arquivo de uma vez, em vez de ler cada linha ou cada palavra separadamente?
c++
iostream
fstream
file-handling
Mody
fonte
fonte
Respostas:
Você pode usar
std::getline
:#include <fstream> #include <string> int main() { std::ifstream file("Read.txt"); std::string str; while (std::getline(file, str)) { // Process str } }
Observe também que é melhor apenas construir o fluxo de arquivos com os nomes dos arquivos em seu construtor, em vez de abrir explicitamente (o mesmo vale para o fechamento, apenas deixe o destruidor fazer o trabalho).
Mais documentação sobre
std::string::getline()
pode ser lida em Referência do CPP .Provavelmente, a maneira mais fácil de ler um arquivo de texto inteiro é apenas concatenar as linhas 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'); }
fonte
while(getline(f, line)) { ...}
realmente é a maneira recomendada de fazer isso. Isso é explicado aqui: gehrcke.de/2011/06/… --- lá você também encontrará abordagens úteis para o tratamento adequado de erros.#include <iostream>
#include <iostream>
seria necessário? Parece-me isso<fstream>
e<string>
são suficientes. Se você quer dizerstd::getline
, está dentro<string>
, não dentro<iostream>
.Eu sei que este é um tópico realmente muito antigo, mas gostaria também de apontar outra maneira que é realmente muito simples ... Este é um código de amostra:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream file("filename.txt"); string content; while(file >> content) { cout << content << ' '; } return 0; }
fonte
Acho que você poderia usar a função istream .read (). Você pode apenas fazer um loop com um tamanho de bloco razoável e ler diretamente para o buffer de memória e, em seguida, anexá-lo a algum tipo de recipiente de memória arbitrário (como std :: vector). Eu poderia escrever um exemplo, mas duvido que você queira uma solução completa; por favor, deixe-me saber se você precisar de alguma informação adicional.
fonte
Bem, para fazer isso também se pode usar a função freopen fornecida em C ++ - http://www.cplusplus.com/reference/cstdio/freopen/ e ler o arquivo linha por linha da seguinte forma -:
#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; }
fonte
Outro método que ainda não foi mencionado é
std::vector
.std::vector<std::string> line; while(file >> mystr) { line.push_back(mystr); }
Então, você pode simplesmente iterar sobre o vetor e modificar / extrair o que você precisa /
fonte
vector
é uma etapa desnecessária. Você pode iterar ao longo doifstream
usostd::istream_iterator<std::string>(inFile)
.você também pode usar isso para ler todas as linhas do arquivo uma por uma e 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 isto possa te ajudar :)
fonte
olá mano esta é uma maneira de ler a string na linha exata usando este código
Espero que isto possa te ajudar !
#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; }
Boa sorte !
fonte