Leitura e Soma de Números de um Arquivo

C++Beginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos como ler números de um arquivo e, em seguida, somá-los linha por linha, enviando os resultados para outro arquivo. Ao seguir os passos deste tutorial, você aprenderá a escrever um programa C++ que:

Criar um novo arquivo C++

Crie um novo arquivo chamado file_sum.cpp no diretório ~/project.

touch ~/project/file_sum.cpp

Incluir as bibliotecas necessárias

Para trabalhar com arquivos em C++, precisamos incluir as bibliotecas <iostream> e <fstream> em nosso programa. Adicione o seguinte código ao seu arquivo file_sum.cpp:

#include <iostream>
#include <fstream>

using namespace std;

Solicitar ao usuário o nome do arquivo

Vamos solicitar ao usuário o nome do arquivo. Adicione o seguinte código ao seu arquivo file_sum.cpp:

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    ofstream outFile("sum.txt");
    string line;
}

Aqui, declaramos um array de caracteres fileName para armazenar o nome do arquivo que o usuário irá inserir. Em seguida, solicitamos ao usuário que insira o nome do arquivo e o armazenamos no array fileName. Finalmente, criamos um objeto ifstream para abrir o arquivo de entrada inFile e um objeto ofstream para criar o arquivo de saída outFile. Também declaramos a string line, que será usada para armazenar cada linha do arquivo de entrada.

Ler o arquivo e somar os números

Agora, vamos escrever o código para ler o arquivo e somar os números em cada linha. Para cada linha no arquivo, leremos os números usando um objeto stringstream, somaremos e escreveremos a soma no arquivo de saída. Adicione o seguinte código ao seu arquivo file_sum.cpp:

while (getline(inFile, line))
{
    int sum = 0;
    stringstream ss(line);
    int num;
    while (ss >> num)
    {
        sum += num;
    }
    outFile << sum << endl;
}

Aqui, usamos um loop while para ler cada linha do arquivo de entrada, armazenando a linha na string line. Em seguida, inicializamos a variável sum com 0, criamos um objeto stringstream chamado ss que contém o conteúdo de cada linha. Depois, extraímos cada número do stringstream para num e incrementamos a variável sum com cada número. Após todos os números na linha terem sido processados, escrevemos sum no arquivo de saída outFile.

Fechar arquivos e notificar o usuário

Por fim, precisamos fechar os arquivos de entrada e saída e informar ao usuário que o arquivo foi processado. Adicione o seguinte código ao seu arquivo file_sum.cpp:

inFile.close();
outFile.close();
cout << "File processed successfully." << endl;
return 0;

Compilar e executar o código

Compile o código file_sum.cpp usando o seguinte comando:

g++ file_sum.cpp -o file_sum

Execute o código com o seguinte comando no terminal:

./file_sum

Você será solicitado a inserir o nome do arquivo que deseja processar. Insira o nome e pressione Enter. O programa lerá o arquivo, somará os números linha por linha e escreverá os resultados em um novo arquivo chamado sum.txt.

Código completo

Aqui está o código completo do arquivo file_sum.cpp:

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

using namespace std;

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    if (!inFile)
    {
        cerr << "Unable to open file" << endl;
        return -1;
    }
    ofstream outFile("sum.txt");
    string line;

    while (getline(inFile, line))
    {
        int sum = 0;
        stringstream ss(line);
        int num;
        while (ss >> num)
        {
            sum += num;
        }
        outFile << sum << endl;
    }

    inFile.close();
    outFile.close();
    cout << "File processed successfully." << endl;
    return 0;
}

Resumo

Neste laboratório, aprendemos como ler um arquivo, somar seus números linha por linha e escrever os resultados em outro arquivo usando as bibliotecas padrão C++ <iostream> e <fstream> e a classe stringstream. Agora você deve ser capaz de lidar com arquivos e usar muitas das operações básicas de arquivo em seus programas C++.