Carregando o conteúdo de um arquivo numa página com AJAX

Depois de um grande dia sendo mesário nas eleições para presidente, vamos a mais um interessante post sobre jQuery!

Neste tutorial simples, vamos carregar um conteúdo qualquer de um arquivo de texto dentro de uma div numa página html.

Para começar, crie uma página html básica com mais ou menos essa cara:

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script type="text/javascript">
// a programação vai aqui
</script>
</head>

<body>
<div id="ajax">
<!--O conteúdo da div vai ser carregado aqui -->
</div>
</body>

</html>

 
Na div com o id ajax, será carregado o conteúdo do arquivo de texto assim que a página carregar. Então vamos à programação!

Para carregarmos o conteúdo do arquivo usaremos o método load() fornecido pela nossa inestimável biblioteca jQuery. A assinatura do método é essa:

$(seletor).load(url,dados,funcao_callback);

 
Parâmetros:

  • url: Obrigatório. Endereço para o qual será enviada a requisição
  • dados: Opcional. Dados adicionais que podem ser enviados ao servidor
  • funcao_callback: Opcional. Função que será chamada automaticamente quando a requisição for completada

Como faremos a requisição mais básica possível, só vamos especificar a url do arquivo de texto. Veja como fica a programação jQuery:

$(document).ready(function(){
    $("ajax").load("arquivo.txt");
});

 

Feito isso, assim que o conteúdo html da página for carregado, será chamada a função load(), que fará a requisição do conteúdo do arquivo arquivo.txt e o exibirá na div com o id ajax.

Bom, esse tutorial foi fácil, mas é só o início da jornada pelas entranhas do nosso AJAX.
Até mais!

Publicado em jQuery | Deixe um comentário

Operadores ternários

É, eu sei, faz um tempão que eu não posto aqui e peço desculpas por isso. Véspera de TCC é uma época um tanto tensa.

Nesse post vou falar um pouco sobre operadores ternários.

Os tipos de operadores podem ser classificados quanto ao número de valores que manipulam por vez. Por exemplo, um operador not (!) usado para negações, é chamado de unário, pois ele precisa de apenas um único valor. Já um operador binário, precisa de dois valores. É o caso dos já conhecidos operadores comparativos maior que (>), igual (==), etc.

O operador ternário, seguindo o raciocínio óbvio, manipula três valores. De início, até mesmo a sintaxe pode parecer um tanto esdrúxula, mas pense no operador ternário como uma espécie de “if reduzido”. O exemplo abaixo ilustra o uso de um operador ternário e sua equivalência usando um if

Veja:

// usando operador ternário
int y=13;
int x = y > 10 ? 1 : 0; 
 
// usando if
if(y > 10)
    x = 1;
else
    x = 0;

Note que existem três valores sendo manipulados na linha em negrito: o retorno da expressão condicional e dois valores inteiros para atribuição ao x.

Por enquanto é só isso, até a próxima.

Publicado em Java | Deixe um comentário

Aprendendo Python – 8 – Manipulando arquivos

Muitas vezes a sua aplicação precisa que os dados por ela processados sejam armazenados para consulta futura. Para isso existem duas soluções: banco de dados e arquivos. Hoje veremos um pouco sobre a segunda opção.

Os arquivos são usados hoje principalmente para registrar as atividades importantes que aconteceram no sistema (log do sistema), e o Python torna essa tarefa bem simples.

Antes de irmos aos códigos, devemos fazer algumas considerações:

  1. Podem ocorrer erros durante o processo de abertura de um arquivo dependendo das permissões aplicadas ao diretório ou mesmo ao arquivo. Por exemplo, criar um arquivo em um diretório com permissão somente-leitura.
  2. Existem modos de abrir um arquivo. Você pode abrir um arquivo para inserir dados, para ler, ou para ambos

Vejamos um código simples que abre um arquivo, escreve algo nele, e o fecha:

>>> try:
...  arq = open('clientes.txt','w')
...  arq.write('Danilo L. Amorim')
...  arq.close()
... except Exception as ex:
...  print 'Erro: ', ex

 
O método open possui dois argumentos: caminho do arquivo e modo de abertura. No exemplo, abrimos (e criamos, se não existir) o arquivo clientes.txt usando o modo de abertura para escrita – w (write).

obs: devemos tomar cuidado com esse modo de abertura. Se você abrir um arquivo que já possua um conteúdo e mandar escrever nele, todo o conteúdo ou parte dele será sobrescrito.

No exemplo a seguir queremos ler o todo o conteúdo do mesmo arquivo:

>>> try:
...  arq = open('clientes.txt','r')
...  conteudo = arq.readlines()
...  arq.close()
... except Exception as ex:
...  print 'Erro: ' , ex
...
>>> conteudo
['Danilo L. Amorim']

 
O método readlines() lê todas as linhas do arquivo a partir do byte em que você estiver e retorna uma lista na qual cada elemento é uma linha do arquivo. Você ainda pode ler somente uma linha usando o método readline().
Também existe o método read() que a partir do byte onde você estiver, ele traz todo o conteúdo do arquivo em uma única string.

Um problema! Como podemos nos localizar e mover-nos dentro de um arquivo?
Existem dois métodos interessantes: o método tell() e o método seek(inteiro).
O método tell() retorna em qual byte você está e o método seek(inteiro) move você para um byte especificado em seu argumento.

Suponhamos que eu tenha usado o método readlines() e tenha chegado ao fim do arquivo. Quero saber em qual byte estou e quero mover-me novamente para o início do arquivo:

>>> arq.readlines()
['Danilo L. Amorim']
>>> arq.tell()
16L
>>> arq.seek(0)
>>> arq.tell()
0L

 
O método tell() me diz que estou novamente no início do arquivo.

Mais um problema! O modo de abertura está nos limitando a somente escrever ou ler, isto é, uma coisa por vez. Será que não tem um jeito de fazer os dois?
Claro que sim. Podemos abrir um arquivo no modo ‘r+‘ que nos permite abrir para ler e escrever. Veja:

>>> arq = open('clientes.txt','r+')
>>> arq.readlines()
['Danilo L. Amorim\n', 'Ciclopentano\n', 'Jorge\n']
>>> arq.write('Brooke Fraser\n')
>>> arq.seek(0)
>>> arq.readlines()
['Danilo L. Amorim\n', 'Ciclopentano\n', 'Jorge\n', 'Brooke Fraser\n']

 
Uma consideração importante sobre sistemas operacionais: Se você estiver usando um Mac ou um Windows, talvez sejá necessário abrir alguns arquivos em modo binário, seja para escrita, leitura, ou ambos. Para abrir em modo binário, simplesmente adicione um ‘b‘ depois do ‘w‘ ou ‘r‘. Exemplos: ‘wb‘, ‘rb‘, ‘rb+‘, etc.

Com isso concluímos outro tutorial de Python.
Até a próxima

Publicado em Python | Deixe um comentário

Aprendendo Python – 7 – Tratamento de Exceções

As exceções não são nada mais que erros que acontecem em tempo de execução do programa. Podemos prevê-las e lidar com elas caso aconteçam.

>>> a = int(raw_input("Digite um número de 0 a 9: "))
Digite um número de 0 a 9: d
Traceback (most recent call last):
  File "", line 1, in
ValueError: invalid literal for int() with base 10: 'd'

 
Para lidar com erros usamos o comando try...except:

>>> try:
...    a = int(raw_input("Digite um número de 0 a 9: "))
... except:
...    print "Aconteceu um erro!"
...
Digite um número de 0 a 9: d
Aconteceu um erro!

 
Você pode especificar qual tipo de erro deseja tratar caso aconteça:

>>> try:
...    a = int(raw_input("Digite um número de 0 a 9: "))
... except ValueError as ex:
...    print 'Erro: ' , ex
...
Digite um número de 0 a 9: d
Erro: invalid literal for int() with base 10: 'd'

 
No exemplo anterior estamos tratando uma exceção da classe ValueError que acontece quando tentamos converter um valor string que não corresponde a um número.

Pra quem já está familiarizado com Orientação a Objeto logo vai entender o que ocorre na linha do except. Caso você ainda não entenda muito bem, não se preocupe, veremos uma introdução básica adiante. Mas voltando ao que interessa agora, criamos issa instância ex da classe ValueError para que possamos exibir uma mensagem de erro precisa correspondente ao erro ocorrido.

Se mais de um erro puder ocorrer, você pode colocar mais excepts para lidar com eles. No nosso exemplo, pelo menos 2 erros podem ocorrer: o já citado ValueError e também um KeyboardInterrupt, causado quando cancelamos a execução de um código (Ctrl+c). Veja:

>>> try:
...    a = int(raw_input("Digite um número de 0 a 9: "))
... except ValueError as ex:
...    print 'Erro: O valor digitado não é um número'
... except KeyboardInterrupt as kex:
...    print 'Erro: O usuário cancelou a operação'
...
Digite um número de 0 a 9: [apertei Ctrl+c agora] Erro: O usuário cancelou a operação

 
É importante salientar que existe uma hierarquia de exceções a qual você deve respeitar. A regra é: sempre pegue as exceções da mais específica para a mais genérica. Isto é, se você estiver tratando de várias exceções especificamente, mas quiser que algum dos excepts pegue todo e qualquer tipo de exceção, por exemplo, coloque este como o último except a ser escrito.
No exemplo a seguir, além de pegar as exceções já descritas, quero que toda e qualquer exceção que ocorra diferente delas, seja tratada:

>>> try:
...    a = int(raw_input("Digite um número de 0 a 9: "))
... except ValueError as ex:
...    print 'Erro: O valor digitado não é um número'
... except KeyboardInterrupt as kex:
...    print 'Erro: O usuário cancelou a operação'
... except BaseException as bex:
...    print 'Erro: ' , bex
...

 
Além disso, podemos criar nossas próprias exceções. Suponhamos que eu queira emitir uma mensagem de erro se o número digitado for menor que 0 ou maior que 9:

>>> try:
...    a = int(raw_input("Digite um número entre 0 e 9: "))
...    if a>9 or a<0:
...        raise Exception("O número digitado é inválido")
... except Exception as ex:
...    print 'Erro: ', ex
...
Digite um número entre 0 e 9: 34
Erro: O número digitado é inválido

 
Essa foi uma breve introdução ao tratamento de exceções que podem eventualmente ocorrer durante a execução de um programa. Ainda existe muito a falar, como a criação de classes de exceções, mas podemos deixar esse assunto para outro post.

Até a próxima!

Publicado em Python | 1 Comentário

Aprendendo Python – 6 – Funções

Funções são pequenos trechos de código que podem ser reutilizados várias vezes.
Quando estudarmos Orientação a Objeto com Python, veremos que dentro de uma classe as funções serão chamadas de “métodos”, mas a sintaxe não irá mudar.

Vamos criar uma função que faça a soma de dois números quaisquer:

>>> a=3
>>> b=4
>>> def soma():
...    print a+b
...
>>> soma()
7

 
Tudo começa com a palavra chave def, seguida do nome da função e parênteses.
Como você já deve suspeitar, dentros dos parênteses podemos passar argumentos para a função:

>>> def soma(x,y):
...    print x+y
...
>>> soma(7,8)
15
>>> a=3
>>> b=4
>>> soma(a,b)
7

 
Também é possível passar uma lista de argumentos como parâmetro da função. O interpretador entende que cada ítem da lista é um argumento da função, veja:

>>> argumentos = [3,4]
>>> soma(*argumentos)
7

 
Você também pode definir valores padrão para os argumentos da função. Eles serão utilizados caso nenhum valor seja passado por parâmetro quando a função for chamada:

>>> def soma(a=3,b=4):
...    print a+b
...
>>> soma()
7
>>> soma(5)
9
>>> soma(b=5)
8
>>> soma(b=5,a=7)
12

 
Você deve ter notado que não é preciso passar os argumentos da função necessariamente na mesma ordem em que foram declarados, entretanto, você deve indicar qual parâmetro irá receber qual valor.
As funções em Python também podem dar um valor de retorno:

>>> def soma(a=3,b=4):
...    return a+b
...
>>> soma()
7
>>> soma() * 7
49
>>> soma(10) * 10
140

 

Isso encerra o post de hoje, até a próxima

Publicado em Python | Deixe um comentário

Aprendendo Python – 5 – Laços de Repetição

Como prometido, nesse post vamos ver um pouco sobre laços de repetição.

Muitas vezes quando estamos programando, queremos que um determinado bloco de comandos ou procedimento seja repetido diversas vezes antes de dar continuação ao programa. Para não termos que copiar e colar n vezes um mesmo bloco de código (o que pode também não atender à sua necessidade) existem os laços de repetição, que executam um bloco de código um determinado número de vezes enquanto uma dada condição é verdadeira.

Laços que existem no Python:

  • while: usado quando não sabemos de antemão quantas vezes o bloco de código deve ser repetido
  • for: só é usado quando sabemos quantas vezes o bloco de código deve ser repetido.

Obs: não existe a variação do...while do laço while em Python.

Laço while

Sintaxe:

while <condição>:
    <bloco de código edentado>

 

Exemplo:

>>> while True:
...  a=int(raw_input('1o. valor: '))
...  b=int(raw_input('2o. valor: '))
...  print a+b
...  resp=raw_input('Deseja continuar? [s/n]: ')
...  if resp not in('s'):
...    break
...

 
Note que nesse exemplo, a condição do laço sempre é verdadeira, o que nos leva a um laço infinito, entretanto, se a resposta do usuário for diferente de ‘s’, o laço é finalizado. Perceba que não sabemos quantas vezes exatamente o usuário vai querer repetir o procedimento de soma, apenas mandamos repetir o procedimento até que a resposta seja diferente de ‘s’.

Laço for

Sintaxe:

for <var> in <lista>:
  <bloco de código edentado>

 
O laço for sempre percorre listas, seja uma lista de valores numéricos, ou uma lista com vários objetos distintos. A variável declarada na linha do laço for se comporta como cada item da lista.

Exemplos:

>>> for i in range(11):
...  print i,
...
0 1 2 3 4 5 6 7 8 9 10

 
Nesse caso, i se comporta como cada número da lista, já no exemplo a seguir….

>>> lista=[30,4.69,complex(4,8),"string!"]
>>> for i in lista:
... print i,
...
30 4.69 (4+8j) string!

 
Agora a variável i se comporta como todos os elementos da lista, não importando o tipo do elemento.

Mais um tutorial entregue!
Adios amigos

Publicado em Python | Deixe um comentário

3 – Estruturas de Decisão

As estruturas de decisão servem para desviar o fluxo do programa baseado em condições estabelecidas pelo programador.

São elas:

  • SE
  • SE…SENÃO
  • SE…SENÃO SE…SENÃO
  • ESCOLHA…CASO…SENÃO

SE

Executa um bloco de código somente se uma condição for verdadeira.

Exemplo:

PROGRAMA se
 
VAR
  numero: inteiro
 
INÍCIO
  numero=5
  SE numero > 2 ENTÃO
    Escreva "O número é maior que 2"
  FIM SE
FIM

 
Fluxograma:

 
SE…SENÃO
Executa um bloco de código se a condição for verdadeira e executa outro bloco caso ela seja falsa.

Exemplo:

PROGRAMA se_senao
 
VAR
  numero: inteiro
 
INÍCIO
  numero=5
  SE numero > 2 ENTÃO
    Escreva "O número é maior que 2"
  SENÃO
    Escreva "O número é ", numero
  FIM SE
FIM

 
Fluxograma:

SE…SENÃO SE…SENÃO

Serve para selecionarmos entre vários blocos de códigos a serem executados. Também conhecido como “ninho de ifs“.

Exemplo:

PROGRAMA se_senaose_senao
 
VAR
  numero: inteiro
 
INÍCIO
  numero=5
  SE numero > 2 ENTÃO
    Escreva "O número é maior que 2"
  SENÃO SE numero == 0 ENTÃO
    Escreva "Zero!"
  SENÃO
    Escreva "O número é ", numero
  FIM SE
FIM

 
Fluxograma:

ESCOLHA…CASO…SENÃO

Também serve para escolher um entre vários blocos de código, porém é mais organizada que a estrutura anterior.

Exemplo:

PROGRAMA se_senaose_senao
 
VAR
  numero: inteiro
 
INÍCIO
  numero=5
  ESCOLHA numero
    CASO numero > 2:
      Escreva "O número é maior que 2"
    CASO numero == 0:
      Escreva "Zero!"
    SENÃO
      Escreva "O número é ",numero
  FIM ESCOLHA
FIM

 
Fluxograma:

Isso encerra esse post, até o próximo tutorial.

Publicado em Lógica de programação e Algoritmos | Deixe um comentário