Lista de Exercícios Resolvidos: Java | Python | VisuAlg | Portugol | C | C# | VB.NET | C++
Você está aqui: Java ::: Dicas & Truques ::: Arquivos e Diretórios

Escrevendo e lendo tipos primitivos em um arquivo usando a classe RandomAccessFile

Quantidade de visualizações: 8643 vezes
A classe RandomAccessFile fornece muitos métodos para escrever e ler tipos primitivos em um arquivo. Esta dica detalha os principais e fornece alguns exemplos.

Vamos começar com os métodos de escrita: writeBoolean(boolean v), writeChar(int v), writeDouble(double v), writeFloat(float v), writeInt(int v), writeLong(long v), writeShort(int v) e writeUTF(String str). Todos estes métodos são void e a maioria escreve seus valores como grupos de bytes. Algumas diferenças entre eles estão documentadas na API Java.

Agora os métodos de leitura:

1) readBoolean() - retorna um boolean;
2) readChar() - retorna um caractere Unicode;
3) readDouble() - retorna um double;
4) readFloat() - retorna um float;
5) readInt() - retorna um inteiro de 32 bits com sinal;
6) readLong() - retorna um inteiro de 64 bits com sinal;
7) readShort() - retorna um inteiro de 16 bits com sinal;
8) readUnsignedShort() - retorna um inteiro de 16 bits sem sinal.

Veja um trecho de código no qual usamos os métodos writeInt() e readInt() para escrever e ler inteiros em um arquivo:

import java.io.*;

public class Estudos{
  public static void main(String[] args){
    // uma instância de RandomAccessFile para leitura e escrita
    // se o arquivo não existir ele será criado
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "rw");

      // vamos escrever inteiros no arquivo
      arquivo.writeInt(38);
      arquivo.writeInt(7273);
      arquivo.writeInt(1200);      
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }

    // vamos fazer a leitura dos escritos gravados anteriormente
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "r");

      int tam = (int)(arquivo.length() / 4); // grupo de 4 bytes
      for(int i = 0; i < tam; i++){
        System.out.println(arquivo.readInt());
      }     
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }    

    System.exit(0);
  }
}

É possível misturar os métodos de escrita e leitura dos tipos primitivos, mas, temos que ficar atentos para não tentarmos ler um int a partir de um arquivo que só contém booleans, por exemplo. Veja:

import java.io.*;

public class Estudos{
  public static void main(String[] args){
    // uma instância de RandomAccessFile para leitura e escrita
    // se o arquivo não existir ele será criado
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "rw");

      // vamos escrever um float
      arquivo.writeFloat(15.79f);
      // vamos escrever um boolean
      arquivo.writeBoolean(true);
      // vamos escrever um short
      arquivo.writeShort(132);      
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }

    // vamos fazer a leitura dos primitivos escritos 
    // anteriormente
    try{
      RandomAccessFile arquivo = 
        new RandomAccessFile("C:\\java\\valores.dat", "r");

      // vamos ler o float
      System.out.println(arquivo.readFloat());
      // vamos ler o boolean
      System.out.println(arquivo.readBoolean());
      // vamos ler o short
      System.out.println(arquivo.readShort());    
 
      arquivo.close();    
    }
    catch(FileNotFoundException fnfe){
      System.out.println(fnfe.getMessage());
    }
    catch(IOException ioe){
      System.out.println(ioe.getMessage());
    }    

    System.exit(0);
  }
}

Não se esqueça que o ponteiro de arquivo é adiantado a cada leitura efetuada em um arquivo encapsulado por um objeto da classe RandomAccessFile.

Link para compartilhar na Internet ou com seus amigos:

Delphi ::: Dicas & Truques ::: Data e Hora

Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr()

Quantidade de visualizações: 18346 vezes
Como retornar a hora atual em Delphi usando as funções Time(), GetTime() e TimeToStr()

Em algumas situações precisamos obter a hora atual (apenas a hora, desconsiderando a data) do sistema. Em Delphi isso pode ser feito com o auxílio da função Time(), presente na unit SysUtils. Esta função não requer nenhum argumento e retorna a hora atual como um TDateTime. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  hora: TDateTime;
begin
  // vamos obter a hora atual
  hora := Time();

  // podemos também usar a função GetTime()
  //hora := GetTime();

  // vamos exibir o resultado
  ShowMessage(TimeToStr(hora));
end;

Ao executar este código Delphi nós teremos o seguinte resultado:

15:17:17

Note que podemos também obter a hora atual (sem a data) usando a função GetTime(), também na unit SysUtils.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


C++ ::: Dicas & Truques ::: Programação Orientada a Objetos

Programação Orientada a Objetos em C++ - Como criar e usar métodos estáticos em suas classes C++

Quantidade de visualizações: 14204 vezes
Como já vimos em outras dicas desta seção, uma classe C++ possui propriedades (variáveis) e métodos (funções). Veja a seguinte declaração de uma classe Produto:

// definição da classe Produto
class Produto{
  public:
    void setNome(string);
    string getNome();
    void setPreco(double);
    double getPreco();
  
  private:
    string nome;
    double preco;
};

Aqui cada instância da classe Produto terá suas próprias variáveis nome e preco e os métodos que permitem acesso e alteração destas variáveis também estão disponíveis a cada instância.

Há, porém, situações nas quais gostaríamos que um determinado método estivesse atrelado à classe e não à cada instância individual. Desta forma, é possível chamar um método de uma classe sem a necessidade da criação de instâncias da mesma.

Métodos estáticos em C++ podem ser criados por meio do uso da palavra-chave static. É comum tais métodos serem declarados com o modificador public, o que os torna acessíveis fora da classe na qual estes foram declarados. Veja um exemplo:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

// classe Pessoa com duas variáveis privadas e 
// um método estático
class Pessoa{
  public:  
    // um método estático que permite verificar a validade
    // de um número de CPF
    static bool isCPFValido(string);
  
  private:
    string nome;
    int idade;
};

// implementação da classe Pessoa
bool Pessoa::isCPFValido(string cpf){
  // alguns cálculos aqui
  return true;
}

int main(int argc, char *argv[]){
  // vamos efetuar uma chamada ao método isCPFValido() sem
  // criar uma instância da classe Pessoa
  if(Pessoa::isCPFValido("12345")){
    cout << "CPF Válido" << endl;
  }
  else{
    cout << "CPF inVálido" << endl;
  }
    
  system("PAUSE");
  return EXIT_SUCCESS;
}

Aqui nós temos os códigos da definição e implementação da classe Pessoa em apenas um arquivo (main.cpp). Em uma aplicação real é interessante colocar estas partes em arquivos separados (.h e .cpp). Note que o método estático isCPFValido() foi declarado assim:

static bool isCPFValido(string);

Desta forma, podemos chamá-la a partir de código externo à classe sem a necessidade de criar uma nova instância da mesma. Veja:

if(Pessoa::isCPFValido("12345")){}

É importante notar que métodos estáticos não possuem acesso a variáveis e métodos não estáticos da classe, tampouco ao ponteiro this (que só existe quando criamos instâncias da classe). Assim, o trecho de código abaixo:

bool Pessoa::isCPFValido(string cpf){
  // alguns cálculos aqui
  
  // vamos acessar a variável não estática nome
  nome = "Osmar J. Silva";
  
  return true;
}

vai gerar o seguinte erro de compilação:

invalid use of member `Pessoa::nome' in static member function.

Se usarmos this->nome a mensagem de erro de compilação será:

`this' is unavailable for static member functions.

Métodos estáticos são úteis quando precisamos criar classes que atuarão como suporte, nas quais poderemos chamar funções (métodos) auxiliares sem a necessidade de criar novas instâncias a cada vez que estas funções forem necessárias.


JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como remover o primeiro elemento de um array em JavaScript - Como usar a função shift() do objeto Array do JavaScript

Quantidade de visualizações: 8217 vezes
Neste dica mostrarei como usar o método shift() do objeto Array da linguagem JavaScript para remover e retornar o primeiro elemento de um vetor. A ação de remover o primeiro elemento, ou seja, o elemento do topo do vetor é muito usada na construção da estrutura de dados pilha.

Veja o código completo, incluindo a página HTML que permite executar o exemplo:

<html>
<head>
  <meta charset="utf-8">
  <title>Estudos JavaScript</title>
</head>
<body>

<script language="javascript">
  // vamos declarar e instanciar um vetor com 5 elementos
  var valores = new Array(1, 2, 3, 4, 5);
  document.write("Valores no vetor: " + valores + "<br>");
  
  // vamos remover o primeiro elemento
  var primeiro = valores.shift();
  document.write("Removendo o primeiro elemento: " +
     primeiro + "<br>");
  document.write("Valores no vetor: " + valores);
</script>

</body>
</html>

Ao abrir esta página HTML nós teremos o seguinte resultado:

Valores no vetor: 1,2,3,4,5
Removendo o primeiro elemento: 1
Valores no vetor: 2,3,4,5


C++ ::: Dicas & Truques ::: Recursão (Recursividade)

Como calcular potência em C++ usando uma função recursiva

Quantidade de visualizações: 18846 vezes
Nesta dica mostrarei como podemos efetuar cálculo de potência em C++ usando recursividade, ou seja, uma função que chama a si mesma repetidamente, até que o caso base (condição de parada) seja alcançado. Veja que informaremos a base e o expoente e a função nos retornará a potência da base informada.

Veja o código C++ completo para o exemplo:

#include <iostream>

using namespace std;

// função recursiva que calcula a potência de
// um inteiro
int potencia(int base, int expoente){
  // caso base
  if(expoente == 0){
    return 1;
  }
  // efetua mais uma chamada recursiva
  else{
    return base * potencia(base, expoente - 1);
  }
} 

// função principal do programa
int main(int argc, char *argv[]){
  int base = 3;
  int expoente = 4;

  cout << base << " elevado a " << expoente << " = " <<
    potencia(base, expoente) << endl;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

3 elevado a 4 = 81


Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet

Como usar o método FindField para pesquisar um campo no TClientDataSet do Delphi e retornar um objeto da classe TField

Quantidade de visualizações: 13391 vezes
O método FindField pode ser usado quando queremos pesquisar um campo no TClientDataSet e retornar um objeto da classe TField. Este método possui a seguinte assinatura:

function FindField(const FieldName: string): TField;
Se o campo for encontrado, um objeto da classe TField é retornado. Em caso contrário, o valor nil é retornado.

Veja um trecho de código no qual eu mostro como encontrar um campo chamado "autor" em um ClientDataSet e retornar seu valor no registro atual:

procedure TForm3.Button3Click(Sender: TObject);
var
  campo: TField;
begin
  // vamos obter o campo com o nome "autor" no ClientDataSet
  campo := ClientDataSet1.FindField('autor');

  // este campo existe no dataset?
  if campo <> nil then
    ShowMessage('O campo existe e seu valor no registro atual é: ' +
      campo.AsString)
  else // o campo não existe no dataset
    ShowMessage('O campo não existe no dataset');
end;

Se o campo existir no dataset, veremos uma mensagem parecida com:

"O campo existe e seu valor no registro atual é: M. D. Deitel".

Em geral usamos o método FindField para determinar se um determinado componente field existe no dataset. O argumento para o método é o nome do campo que queremos pesquisar. Este nome pode ser o nome de um campo simples, o nome de um sub-campo de um objeto field que tenha sido qualificado pelo nome do campo pai ou o nome de um campo agregado.

O comportamento do método FindField é o mesmo do método FieldByName. A diferença é que FindField retorna o valor nil se o campo não existir, enquanto FieldByName lança uma exceção do tipo EDatabaseError com a mensagem "Field not found".

Esta dica foi escrita e testada no Delphi 2009.


Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: Delphi
6º lugar: C
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby

Anúncio Patrocinado
Chat de Sexo - Site para adultso - Maiores de 18 anos. Converse com pessoas de todo o Brasil, de forma discreta e anônima


© 2024 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 8 usuários muito felizes estudando em nosso site.