Leia um arquivo em uma matriz em C ++

Leia um arquivo em uma matriz em C ++
Ler o arquivo inteiro em uma matriz não é tão difícil quanto parece. Um arquivo, seja texto ou não, consiste em bytes do início ao fim. Os bytes podem ser lidos como personagens. Os personagens podem ser lidos um a um na matriz.

Este artigo explica como ler um arquivo inteiro em uma matriz. O cabeçalho C ++ (biblioteca) FStream, tem a classe IFStream. A classe ifstream tem () funções de membros sobrecarregadas. Duas dessas funções de membro sobrecarregadas podem ser usadas para ler o arquivo inteiro em uma matriz. Um programa para essa leitura deve começar com:

#incluir
#incluir
usando namespace std;

As duas primeiras linhas são diretivas, não declarações. O primeiro inclui a biblioteca FStream para as funções get (). O segundo inclui a biblioteca iostream para impressão no terminal (console) e para receber caracteres do teclado. A terceira linha é uma declaração. Ele insiste que qualquer nome não precedido por "std ::" é do espaço de nome padrão.

Há um pequeno problema nas funções get (), o comprimento da matriz deve ser estimado, para ser pelo menos um personagem a mais do que o número de caracteres no arquivo. A idéia é ter '\ 0' incluído logo após o último personagem de leitura na matriz, formar uma longa sequência.

Se o comprimento da matriz não puder ser estimado como tal, todo o arquivo deve ser lido em algum outro objeto, como um objeto de string (da classe String). Como o objetivo deste artigo é explicar como ler uma matriz, o tamanho da matriz deve ser estimado.

Para o restante deste artigo, supõe -se que o nome do arquivo, cujo conteúdo seja lido, é txtfile.txt, no diretório, dir1, no diretório doméstico/usuário.

Conteúdo do artigo

- Lendo todo o arquivo de arquivo por caractere

- Lendo todo o arquivo com uma função de membro

- Conclusão

Lendo todo o arquivo de arquivo por caractere

A sintaxe da função Get () Get (), para isso, é: é:

Basic_istream& get (char_type & c);

Um segmento de código do programa para ler o próximo caractere no arquivo é:

char c;
Char arr [100];
int i = 0;
enquanto (ifs.obtenha (c))
arr [i] = c;
i ++;

A primeira declaração declara a variável, C receberá cada um dos caracteres. A segunda declaração declara a matriz que receberá todos os personagens, um por um. A terceira linha declara um índice para a matriz que começa de zero para abordar todos os elementos da matriz, que receberão um personagem. Com essa abordagem, '\ 0' pode ser adicionado após o último caráter do arquivo ter sido incluído na matriz.

Os parênteses do loop de enquanto têm,

ifs.obtenha (c)

onde ifs é o nome do objeto ifstream. O próximo personagem do arquivo é obtido pela função GET do membro e atribuído a C. Depois disso, o ponteiro interno do objeto IFStream apontaria para o personagem depois que ele lia. Quando o final do arquivo é alcançado, a expressão: “Ifs.get (c) "se torna falso em vez de verdadeiro e, portanto, o loop do enquanto termina.

O programa a seguir, lerá todos os caracteres de um arquivo e imprimirá todo o conteúdo do terminal:

#incluir
#incluir
usando namespace std;
int main ()

ifstream ifs = ifstream ("DIR1/TXTFILE.txt ", ios_base :: in);
if (ifs.is_open () == true)
char c; int i = 0; Char arr [100];
enquanto (ifs.obtenha (c))
arr [i] = c;
i ++;

ifs.fechar(); arr [i] = '\ 0'; cout<
outro
cout<< "File could not be open!" <retornar 0;

IfStream como codificado, abre o arquivo para leitura.

Lendo todo o arquivo com uma função de membro

A função de membro get () get () para ler o arquivo inteiro, sem o loop while, é:

Basic_istream& get (char_type* s, streamsize n, char_type delim);

Ele ainda lê o arquivo inteiro caractere por caracteres, mas esse não é mais o negócio do programador C ++. Além disso, essa função adiciona o caractere nulo, '\ 0' em nome do programador, assumindo que n é pelo menos um caractere mais longo que o conteúdo do arquivo.

O primeiro argumento desta função Get () sobrecarregada é a matriz com as mesmas restrições (incluindo estimativa) que a matriz acima para receber todos os caracteres do arquivo. O segundo argumento, n, do tipo streamsize, é uma estimativa do número de caracteres no arquivo. É aconselhável tornar o tamanho da matriz e n, o mesmo. Não há necessidade de um loop de tempo com esta função de membro.

Agora, uma linha em um arquivo de texto termina com a sequência de fuga, '\ n'. Se o terceiro argumento for '\ n', apenas a primeira linha do arquivo seria lida. Portanto, a função deve ser enganada com qualquer personagem que provavelmente não seja encontrado no conteúdo do arquivo. Um bom candidato para o terceiro argumento é '\ 0'. Com essa função de membro sobrecarregada, o programador precisa ter algum conhecimento dos personagens possíveis no arquivo para não usar um personagem que faça parte do conteúdo do arquivo.

O programa a seguir lerá todos os caracteres de um arquivo com uma instrução e imprimirá todo o conteúdo do terminal:

#incluir
#incluir
usando namespace std;
int main ()

ifstream ifs = ifstream ("DIR1/TXTFILE.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char arr [100];
ifs.obtenha (arr, 100, '\ 0');
ifs.fechar(); cout<
outro
cout<< "File could not be open!" <retornar 0;

Conclusão

Um arquivo inteiro pode ser lido em uma matriz. Antes de tudo, precisa da classe C ++ IFStream da biblioteca FSTREAM. O arquivo deve ser aberto para leitura. Para ler todos os personagens (bytes) de um arquivo (um por um) na matriz, use a função do membro ifstream,

Basic_istream& get (char_type & c)

como a condição em um loop de tempo. Para ler todos os caracteres (bytes) de um arquivo, na matriz com uma função de membro do iFStream sem o loop while, a função do membro IFStream deve ser:

Basic_istream& get (char_type* s, streamsize n, char_type delim);

Não se esqueça de enganar a função no terceiro argumento. Com esta função, o programador precisa ter algum conhecimento dos personagens possíveis no arquivo.