Olá, seja bem-vindo de volta.
Nesta palestra, eu gostaria para falar
sobre como podemos ler o texto de um arquivo.
Por agora, vamos concentre-se na leitura de arquivos de texto.
Então, se quisermos ler personagem a partir de um arquivo de
texto, vamos usar algumas funções.
O primeiro vai ser fgetc.
Isso lerá um caractere de um texto arquivo que foi aberto para leitura.
Lembre-se, sempre temos que abrir o arquivo antes que possamos realizar qualquer operação
de arquivo nele, a menos que é uma renomeação ou exclusão e,
em seguida, o arquivo não pode ser aberto.
Mas se você quiser fazer leitura e escrevendo ou anexando,
temos que abrir esse arquivo.
Nós sabemos que podemos abrir arquivos com modos diferentes.
Neste caso, para leitura, teríamos para abrir com um r ou um r plus,
e então podemos começar a chamar fgetc.
A função fgetc leva o ponteiro do arquivo como seu
único argumento, e ele retornará o caractere lido como tipo int.
Então, aqui está um exemplo, criamos um mchar digite int e dizemos fgetc pfile.
Vai ler um personagem na variável mchar com pfile como um
ponteiro de arquivo.
Pense em pfile já foi aberto retornar ao ponteiro do arquivo.
O mchar é do tipo porque eof, que é nosso caractere
especial, nosso final de arquivo, que é retornado o fim do arquivo foi alcançado.
Portanto, podemos sempre verificar se inteiro para ver se é eof.
E se for, não queremos para ler
mais, não queremos mais ligar para fgetc.
A função fgetc, que é equivalente a fgetc também está disponível.
Então getc é quase o mesmo que fgetc, você só deseja usar o fgetc.
Eu acho que tem algum mais proteção nele.
Com getc, requer um argumento do tipo arquivo estrela e retorna e
retorna o caractere vermelho como tipo int.
É virtualmente idêntico ao fgetc.
A única diferença entre eles é que getc pode ser implementado como uma
macro, e nem mesmo sabe o que é uma macro agora.
Então, vamos ficar com usando fgetc como nossa função para
ler personagens.
Você pode ler o conteúdo de um arquivo.
Novamente, quando necessário, você pode usar esta função de retrocesso que posiciona o arquivo
que é especificado pelo arquivo ponteiro para o início do arquivo.
Então você pode usar o retrocesso se você quer ler novamente.
Basta dizer retroceder e depois o ponteiro de arquivo, bastante básico.
Então aqui está um exemplo.
Você tem que incluir o cabeçalho io padrão sempre
que fazemos qualquer operação de arquivo.
Em nossa função principal, estamos vamos criar nosso ponteiro de arquivo.
Se eu quiser inicializar isso para nulo e vamos criar um inteiro.
A primeira coisa que vamos fazer é vamos abrir o
arquivo usando a chamada f open, e vamos especificar o nome do arquivo e vamos especificar
que é para leitura.
Isso retornará nosso ponteiro de arquivo.
Então agora nosso ponteiro fp é apontando para um arquivo válido.
Se não foi possível abrir o arquivo. TXT que não está no
caminho certo ou algo assim, ele retornará nulo.
Então, você deseja verificar se há nulos, certifique-se de que fp não seja nulo.
Se for nulo, saia do programa.
Caso contrário, quando você normalmente ler personagens, você os terá dentro
de um loop.
Então aqui estamos dizendo enquanto c é igual a fgetc fp, é a leitura de um
caractere de nosso arquivo, passando o ponteiro do arquivo para fgetc, que
retorna um inteiro.
Lembre-se, podemos pular fora do loop se esse inteiro retornado é o fim do arquivo
porque não queremos para ler além do final do arquivo.
Caso contrário, podemos apenas imprimir nosso personagem usando por cento c e c.
A última coisa que queremos fazer é nós queremos fechar o arquivo, então queremos
definir o nosso ponteiro de arquivo para nulo, e podemos retornar.
Vamos tentar utilizar isso, criando isso dentro de blocos de código.
Aqui está nosso programa dentro de blocos de código.
Diz que este programa não vai funcionar a menos que tenhamos um arquivo no disco onde quer que
o programa esteja sendo executado.
Então, primeiro, se construirmos isso, deve ser compilado bem, deve criar
um executável em algum lugar do seu disco rígido.
Tenho colocado todos os meus projetos dentro do meu diretório de empréstimos de pontos.
Então, se eu for para meus downloads e vou para o
nome do projeto, que é apenas um teste projeto então onde quer que você esteja armazenando seus projetos,
os meus estão em teste
Se eu for testar, você verá que dentro do diretório bin, dentro do
debug está o seu executável.
Aqui é onde você cria seu arquivo se você tivesse um parente.
Caminho, então aqui eu poderia apenas criar um novo arquivo e podemos tê-lo como um arquivo de
texto, então posso apenas criá-lo como um texto documento, e deve ser nomeado arquivo.
E então vou colocar algumas informações nele.
Vou apenas inserir alguns dados como oi, este é o feed de linha do Jason.
Ok, não, assim por diante, e vou salvá-lo.
Este arquivo deve existir em ordem para que este programa funcione.
Então criei o arquivo.
Agora, quando eu executá-lo, espero ele vai ler o que
acabei de adicionar e imprimir.
Diz erro e abertura de arquivo arquivo nenhum diretório de
arquivo, e isso é provavelmente porque eu coloque-o na pasta de depuração.
E isso não está sendo executado no debug.
Então, vamos tentar executá-lo no debug e Acho que provavelmente funcionaria agora.
Podemos dizer depurar, começar.
Isto irá procurar o executável no diretório de depuração, esperançosamente.
Queremos ter certeza de que ele está funcionando.
Ainda não está aí, então você tem que fazer certifique-se de saber onde está o executável.
Vamos tentar em outro lugar ou melhor ainda, poderia apenas rodar o executável dentro
do debug diretório e deve encontrá-lo lá.
Então, se eu clicar duas vezes aqui, na verdade, um não faz uma pausa.
Ele salta para fora.
Então, o que você pode fazer é
em vez de retornar, você pode dizer pausa do sistema e ele não sairá o programa até que você o execute.
Então, agora vamos tentar.
Então, agora pausado, não execute o programa.
E o que você viu foi, oi, este é o Jason.
Foi capaz de encontrar o arquivo, impresso bem, impresso não e,
em seguida, fez uma pausa.
Caso contrário, quando você executa o programa, ele imprime os dados tão
rápido e sai do programa que você está pronto.
Então é assim que você pode testá-lo.
Deve ser armazenado onde o executável é armazenado no local de onde está sendo executado.
Deve estar correndo de algum lugar outra coisa no diretório do seu projeto.
Não tenho certeza de onde está fugindo.
Podemos tentar mover o arquivo para onde está o código-fonte.
Pode ser executado a partir daqui.
Então aqui vamos colocá-lo aqui.
E agora vamos tentar executá-lo a partir de o ID e talvez funcione.
Nós não construímos.
Nós o executamos e ele foi capaz de encontrá-lo.
Então, parece que temos para colocar o arquivo dentro de onde
está o código-fonte.
Então, enquanto colocarmos esse arquivo Arquivo. texto dentro do
arquivo do projeto, você poderá vê-lo.
Um exemplo rápido de como você pode abrir um arquivo e ler caracteres únicos,
não os mais eficientes maneira de ler de um arquivo porque normalmente
você deseja ler strings.
Mas isso vai abrir tudo.
Você vê a chamada aberta, e você percebe o loop while.
Isso é importante.
Vamos voltar e falar sobre como podemos ler strings de um arquivo que
é muito mais eficiente.
Então, isso está lendo um único personagem.
Que tal ler uma string?
Você pode usar a função fgets para ler de qualquer arquivo ou fluxo.
Isso lerá uma string.
É preciso uma string de caracteres tem o primeiro parâmetro.
O número de caracteres que você deseja ler e, em seguida, o ponteiro do arquivo real.
Então, essa função vai leia uma string na área
de memória apontada pelo str.
Então você tem que realmente passe no buffer
onde os dados serão armazenados.
E isso é um ponteiro, então você tem que alocar memória para ele.
E então vai ler de o arquivo especificado como o terceiro parâmetro
que é o ponteiro do arquivo.
E então o nchar vai para dizer quantos dados devem ser lidos.
Então, se você colocar nchars como 10, ele será lido em 10 caracteres, a menos
que acerte um feed de linha primeiro.
Então vai ler um linha inteira ou vai ler o número
de caracteres que você especifique no segundo parâmetro.
O fim da linha é especificado pelo barra invertida n o que ocorrer primeiro.
Se um caractere de nova linha for vermelho, é retido
na string e um terminador nulo será anexado ao final da string.
Então, se você realmente especificou mais caracteres, seria lido até a linha de alimentação
e, em seguida, pula para fora e então pega aquele
caractere de nova linha e coloca caractere nulo no final dele.
Se não houver erro, fgets é vai retornar o ponteiro, que
é o primeiro parâmetro.
Vai retornar um ponteiro que é retornado da função.
E então também vai para preencher o ponteiro str
como o primeiro parâmetro.
Se houver um erro, será retornado nulo.
E então lendo o final do arquivo faz com que null seja retornado, o que significa
que você leu todas as suas strings.
Então, vamos ver um exemplo.
Aqui temos nosso principal, e estamos criando nosso ponteiro de arquivo criando uma
string de caracteres.
Aqui está um indicador que não fizemos mallocar quaisquer dados para ele, nós apenas criamos
um array de caracteres.
Abrimos o arquivo para leitura, lendo apenas porque é r.
Dissemos que se for nulo, pule para fora.
Caso contrário, apenas dizemos fgets, lemos em 60 caracteres.
Ou se a alimentação de linha for antes que, uma linha de
alimentação aparecerá e, em seguida, ele irá imprimi-lo e o que está sempre no buffer str.
Então, str é o primeiro personagem que foi transmitido.
E então fechamos o ponteiro do arquivo, defina-o como nulo e retorne zero.
Então, vamos, novamente, dar uma olhada em isso dentro de nossos blocos de código IDE.
A única coisa que mudou neste programa é realmente as linhas 14 a 17.
Estamos usando fgets para ler nossa string em, e então temos um buffer de str.
Portanto, também precisamos criar um matriz
de caracteres aqui que é nosso str, e queremos que contenha 60.
Estamos lendo em 60.
Vamos adicionar um feed de linha, então é vou ler em 59 e, em seguida, adicionar uma alimentação de
linha ao final dele.
Portanto, poderíamos dizer 61.
E então o fgets estará em uma declaração if, e vai
ler em cada string até que atinge 60 caracteres ou uma nova linha, e vai
imprimir essa string.
Você perceberá que não um loop while, portanto, não estamos
lendo até o final do arquivo.
Nós lemos o final de arquivo, obtemos um nulo.
Então, se construirmos isso, queremos fazer certifique-se de que temos nossas cotações corretamente.
Sempre que você copia do PowerPoint isso bagunça as aspas.
E queremos ter certeza criamos nossa variável c não é usada,
tudo bem.
Então, vamos prosseguir e executar isso.
E você vê, este é Jason.
Então, na verdade, leia em um todo linha de texto do arquivo.
É lido na primeira linha.
Então você ligaria de novo e leia na segunda linha.
Se você alterar o número de bytes ler, digamos que queremos
apenas ler 10, seria lido em 10 e então retornaria aqueles 10
em vez de ler a linha inteira.
Então, aqui está apenas o que eu tenho.
Então vai ler em número de caracteres,
seu segundo parâmetro ou até obter uma linha feed e armazena isso em str.
Str é uma matriz de caracteres.
Nós imprimimos fgets.
Fgets é muito mais eficiente para leitura.
Porque não estamos lendo um personagem e por
vez, estamos lendo mais dados.
Lendo um personagem em um o tempo não é tão eficiente.
Então agora sabemos como ler em single caracteres, sabemos
como ler strings até que eles leiam um novo linha ou vários caracteres.
Mas você também pode ler em entrada formatada de um arquivo.
Portanto, temos getc, fgetc, fgets.
E agora temos outro função chamada fscanf.
Esta é uma entrada formatada.
A entrada formatada é um dado especificado por like tem um delimitador ou um
formato específico associado a ele.
Esta função fscanf pega um arquivo do stream e, em seguida, um formato.
O formato é como o printf especificadores de formato que você usa.
Então, se você quiser ler em inteiros ou duplos, você pode especificar dados dentro
do arquivo que são introduzidos em duplas
e ele vai ler isso até ver como o scanf até ver um caractere de espaço em branco.
Portanto, o primeiro argumento para o fscanf função é um ponteiro para um objeto
de arquivo que identifica o fluxo.
Temos que saber o que arquivo do qual estamos lendo.
O segundo argumento para o função é o formato.
Esta é uma string c que contém um ou mais dos seguintes itens.
Caractere de espaço em branco, não espaço em branco caractere, especificadores de formato.
O uso é o mesmo que o scanf e no printf, mas em vez
disso, é de um arquivo.
Então, dentro das aspas duplas, você pode colocado no texto, você pode inserir caracteres de
espaço em branco ou não, mas os especificadores de formato são realmente
como você vai ler os dados.
E então você especifica variáveis que você deseja ler.
Então, a função retorna o número de
itens de entrada combinados e atribuídos com sucesso.
Então aqui está o que parece.
Você notará que o principal é criando três matrizes de caracteres, str1, str2 e
str3, com apenas dez bytes cada.
Criamos um inteiro chamado ano, atingimos um ponteiro de arquivo.
A primeira coisa que fazemos abrimos o arquivo.
Neste caso, estamos abrindo para ler e escrever.
Mas não vamos realmente escrever qualquer coisa, vamos apenas mostrar
o que estamos lendo.
Verificamos para ter certeza de que o arquivo ponteiro não é igual a nulo.
E então aqui, estamos realmente colocando algo no arquivo fputs.
Ainda não falamos sobre isso, mas isso está escrevendo algo.
Concentre-se aqui no fscanf.
O fscanf vai ler em dados formatados.
E então o que vai fazer é ler
em três strings separadas por espaços.
E então você vê a porcentagem como porcentagem de espaço como porcentagem de
espaço s porcentagem de espaço d.
Então estamos dizendo onde estamos vamos lê-los em nossa matriz de
três caracteres e, em seguida, nosso ano, e temos que especificar o operador
de endereço para o nosso ano.
Mas os dados são formatados em maneira específica quando está escrito.
E quando você lê algo que é formatado, você tem que entender o
formato do arquivo como ele está escrito.
Aqui sabemos que o arquivo está escrito separando strings por espaços em branco.
Então é assim que somos vou lê-lo em.
E para que possamos ler com uma chamada fscanf.
Podemos usar nosso formulário como especificadores como nosso segundo argumento e, em
seguida, número variável de argumentos para cada separe cada vírgula para especificar os
dados que queremos ler.
E então imprimimos isso dados, as três strings no ano e, em
seguida, novamente fechamos o arquivo.
E então essas são as três maneiras você pode ler os dados de um arquivo.
Você pode ler em caracteres, você pode ler strings ou pode
ler dados formatados.
E você notará a forma formatada de fazer isso é muito semelhante ao scanf.
Você usa especificadores de formato, variáveis para ler.
Teremos um desafio em leitura de dados que o deixará
mais familiarizado com isso.
É muito básico.
Você vai fazer a sua abertura chamadas, você
usará seus ponteiros de arquivo e para usar essas três funções.
Obrigada.