Leitura de caracteres em um alinha de arquivo em C++ [RESOLVIDO]

1. Leitura de caracteres em um alinha de arquivo em C++ [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 06/09/2018 - 22:13h

Boa noite,

Estou com um problema para ler caracteres em uma linha de arquivo em c++, por exemplo, o arquivo de texto tem o seguinte conteúdo:

1,laranja
2,uva
3,pera
Eu preciso pegar os caracteres ate a ',' e depois tambem, por exemplo, só número ou só a palavra.

Tentei usar a função getline, junto com o objeto do arquivo, mas houve um erro que não consegui entender.
Aqui esta o código:
#include <iostream>
#include <fstream>

using namespace std;

int main(int agrc, char **argv)
{
fstream arquivo;
arquivo.open("ordenar.txt");

if(!arquivo.is_open())
{
cout << "\nErro ao abrir arquivo.\n" << endl;
arquivo.clear();
return 0;
}
else
{
cout << "\nArquivo pronto para leitura.\n" << endl;

arquivo.getline(',');

cout << arquivo;

arquivo.close();
}

return 0;
}


Como proceder ?




  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 10/09/2018 - 22:53h

Outra

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main()
{
std::fstream arquivo {"ordenar.txt", std::ios::in};

if(!arquivo.is_open())
throw std::runtime_error("Erro ao abrir arquivo.");

// Lê os campos e processa
int l_num = 1;
do
{
std::string linha;

// Lê uma linha
if (std::getline(arquivo, linha) && linha.size() > 0)
{
// Processa todos os campos dessa linha
std::istringstream ss {linha};

int campo = 1;
for (std::string buffer; std::getline(ss, buffer, ','); ++campo)
{
std::cout << "Campo " << campo << " da linha " << l_num << ": " << buffer << std::endl;
}

++l_num;
}
}
while (arquivo.good() && !arquivo.eof());

return 0;
}

______________________
https://github.com/phoemur

3. Re: Leitura de caracteres em um alinha de arquivo em C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/09/2018 - 00:07h

Você usou getline() de modo equivocado. Você tem de indicar um array de caracteres ou objeto da classe std::string onde serão armazenados os caracteres lidos do stream. Veja a documentação de std::istream::getline() e de std::getline() no http://www.cplusplus.com/reference/ ou no http://cppreference.com/.

Depois disso, você tem de ter imprimir o conteúdo do array/string para onde fez a leitura, não o objeto do arquivo


4. Re: Leitura de caracteres em um alinha de arquivo em C++ [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 09/09/2018 - 10:07h

Mas como fazer a "captura" dos caracteres até a virgula ?


5. Re: Leitura de caracteres em um alinha de arquivo em C++

Fernando
phoemur

(usa Debian)

Enviado em 10/09/2018 - 22:39h

Sugestão

#include <cctype>
#include <iostream>
#include <fstream>
#include <string>

int main()
{
std::fstream arquivo {"ordenar.txt", std::ios::in};

if(!arquivo.is_open())
throw std::runtime_error("Erro ao abrir arquivo.");

do
{
std::string primeiro, segundo;

// Ignora espaços ou linhas em branco (opcional)
while (std::isspace(arquivo.peek()))
arquivo.get();

// Lê
if (std::getline(arquivo, primeiro, ',') &&
std::getline(arquivo, segundo))
{
std::cout << "Campo 1: " << primeiro
<< " Campo 2: " << segundo << std::endl;
}
}
while (arquivo.good() && !arquivo.eof());

return 0;
}

______________________
https://github.com/phoemur






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts