tucano
-
Total de itens
22 -
Registro em
-
Última visita
Posts postados por tucano
-
-
Olá,
Estou mexendo com web services para monitoramento de uma rede de sensores. A implementação já está pronta e é código aberto da iniciativa 52north. Estou apenas adaptando para as minhas necessidades. Já consigo fazer a requisição do serviço e consigo resposta do servidor. Acontece que o servidor retorna XML, e estou com uns problemas para tratar a resposta. Vou descrever o processo porque aí fica mais fácil entender o problema:
O usuário do serviço entra com dois valores. Eles são capturados e por AJAX (através de um script PHP), uma string XML (pedido descritivo do serviço) baseada nos dois valores é criada e mandada para o servidor, que trabalha em JSP. O servidor então interpreta a string e manda de volta outro XML, que é a resposta do pedido. Os dados da resposta estão corretos e tudo o mais. O problema é que quando o navegador recebe isso, já redireciona para uma página nova e simplesmente imprime o XML na tela, com todas as tags e sem formatação nenhuma...
Eu já brinquei com PHP mas nunca fiz nada dessa complexidade. Queria saber então o caminho para capturar esse XML sob forma de um objeto SimpleXML ou pode ser até como string mesmo, porque aí daria para tratar... Alguém sabe lidar com isso?
Obrigado!
-
Eu uso o Geany e ocasionalmente o NetBeans e acho ambos excelentes, com suas particularidades.
-
-
Compilei no prompt e também funcionou sem problema nenhum...
-
Olá,
Você tem que especificar o modo de abertura do arquivo, por exemplo:
f = open("arquivo.ext", "w") # abre arquivo em modo de escrita g = open("arquivo2.ext", "r") # abre o arquivo em modo de leitura
Isso deve ser bastante útil:
(VEJA O TÓPICO 7.2)
http://docs.python.org/tutorial/inputoutput.html
Abraços e boa sorte!
Edit: Para abrir arquivo, usar parênteses.
-
Tomaz Edson, tem um pacote chamado os que atende às suas necessidades. Para utilizá-lo, antes de chamar qualquer método dele você deve importá-lo:
import os
Particularmente, para limpar a tela e executar um .sh, tem um método desse pacote que dá conta. Ele passa comandos para o Sistema Operacional, é o os.system(<comando>):>>> os.system("clear") # Limpa a tela (Linux) >>> os.system("./script.sh") # Executa script.sh (Já com permissão de execução)
Sobre iniciar o programa numa tela com tamanho pré-definido, nunca tentei. É bem provável que esse mesmo pacote tenha algum método que faça isso...
Abraços
Edit: Pode ser que você já tenha lido, mas fica a dica de qualquer forma.
Este tutorial é extenso mas é muito bom para quem começa a programar em Python:
-
E aí, Tomaz Edson!
Cara, você tem razão. É que na realidade eu me arrisco em Python mas é de cara-de-pau mesmo. Foi um erro honesto!! heheh
Fui pesquisar agora e parece que no Python 3.x o print foi implementado como function e não mais como statement:
Vide: http://stackoverflow.com/questions/6239887...n-in-python-3-x
Daí agora os parênteses não são mais opcionais...
Abraços
-
Tem um tutorial neste link que explica isso bem certinho:
http://techandetcblog.wordpress.com/2011/0...utilizando-php/
Abs
-
Henzel,
na vdd void significa "vazio", "nada"... A presença dele é opcional.
Escrever void main (void) é a mesma coisa que escrever main(void), que é o mesmo que void main(), que é igual a main()... Dá tudo na mesma. A notação está lá mais por boa prática de programação. É a mesma linha de escrever apenas "return;" numa função que retorna void...
O void antes do nome de uma função significa que essa função não retorna nada. No caso da main que você viu com o void antes mas retornando 0, pode ser que esse código tenha sido escrito num ambiente que o processo precise retornar algo, Linux por exemplo (retorna 0 caso não haja erro e outro número caso haja).
Sobre os parâmetros da função main, ela só pode receber nenhum (main(void) ou simplesmente main()) ou 2 parâmetros. É padrão que esses argumentos, quando existem, sejam (int argc, char *argv[]). É que quando você chama o programa (mais comumente por linha de comando no Terminal do Linux ou no Prompt do DOS) você pode passar um ou mais argumentos para o programa. Por exemplo:
//codigo.c #include <stdio.h> int main (int argc, char *argv[]) { printf("Meu primeiro argumento foi: %s\n", argv[1]); return 0; }
Se você compilar esse código e chamá-lo através do terminal:
$./codigo argumento1
Ou ainda no windows:
>codigo.exe argumento1
Na tela aparecerá:
Meu primeiro argumento foi: argumento1
Os argumentos da main são os argumentos que você passa para o programa ao executá-lo.
Observações:
1 - argc contará sempre o total de argumentos que foram passados
2 - argv[0] é sempre o nome do programa; os argumentos começam a contar mesmo a partir de argv[1], argv[2], ..., argv[n]
-
Luiz_Junior,
põe um rewind(fp); depois do fprintf(fp,"%s",nome); que funciona. Não tenho nem ideia do que cause isso...
-
Acho que é isso, mesmo. Talvez isso ajude:
-
Guilherme Freire, quanto a valor moeda, não sei te ajudar... Na verdade não conheço esse tipo de dado em SQL, mas dá uma olhada nessa busca, porque com esse 'or' aí, a query vai retornar todos os resultados para os quais qualquer uma das condiçoes for verdadeira, por exemplo:
No intervalo de 1 a 10, selecione todos os números x que atendem (x >= 2 OU x <= 8) -> a seleção retorna o intervalo todo, porque:
x >= 2 é (2, 3, 4, 5, 6, 7, 8, 9, 10)
x <= 8 é (1, 2, 3, 4, 5, 6, 7, 8)
Como você mandou selecionar quem atende uma condição OU a outra, a query retorna todo o intervalo [1, 10].
O correto seria:
No intervalo de 1 a 10, selecione todos os números x que atendem (x >= 2 E x <= 8) -> agora sim ele vai retornar a intersecção dos conjuntos, isto é, quem atende às duas condições simultaneamente: somente [2, 8], ou seja:
... $busca .= "AND valor_imovel >= 'x' and valor_imovel <= 'y'"; ...
-
-
Guilherme Becker, você tem razão. Deve ser a versão do mysql que está dando problema. Criei um banco, fiz a query e não ocorreu nada anormal... Pode ser que a sua versão não suporte MyISAM. Talvez isto possa ajudar: http://dev.mysql.com/doc/refman/5.0/en/myi...age-engine.html
Se você trocar o 'TYPE=MyISAM' por 'TYPE=ISAM' ou então não especificar o tipo, a query funciona?
-
-
Amigo, segue o código corrigido e uma lista com os erros.
ERROS:
1 - ao tentar fazer comparação, você estava mandando fazer atribuição (trocou "==" por "="): diferente de C/C++, atribuições em condicionais não são permitidas, daí o script nem roda (C/C++ compilaria e daria erro ao rodar o programa).
2 - raw_input retorna uma string, mas você quer um número, então você precisa fazer um cast, isto é: int(raw_input('whatever...')) no lugar de raw_input('whatever...') apenas. Senão, se você mandar somar 2 e 2, por exemplo, o Python retorna '2' + '2', isto é, '22'. Já se você mandar somar 2 + 2, ele retorna 4.
3 - a indentação em Python é o que define o escopo de um bloco de código, em outras palavras, indentação é muito importante em Python (não sei se você indentou, pareceu que não).
4 - não é bem um erro, mas ao imprimir, diferente do printf() do C, quando você chama um print em Python, não precisa dos parênteses.
CÓDIGO CORRIGIDO:
#!/urs/bin/env python #-*- coding: UTF-8 -*- print ("Bem vindo!") escolha = (raw_input("Digite a conta que deseja fazer: ")) if escolha == 'adição': numero = int(raw_input("Digite o primeiro número a ser somado:")) numero2 = int(raw_input("Digite o segundo numero a ser somado:")) resposta = numero + numero2 print (resposta) elif escolha == 'subtração': minuendo = int(raw_input("Digite o minuendo:")) minuando = int(raw_input("Digite o minuando:")) resposta = minuendo - minuando print (resposta) elif escolha == 'divisão': dividendo = int(raw_input("Digite o dividendo:")) divisor = int(raw_input("Digite o divisor:")) resposta = dividendo / divisor print (resposta) elif escolha == 'multiplicação': multiplicando = int(raw_input("Digite o multiplicando:")) multiplicador = int(raw_input("Digite o multiplicador:")) resposta = multiplicando * multiplicador print (resposta) else: print("Revise o número colocado!")
-
Cara, é porque toda vez que você passa pelo laço você manda fazer uma query...
while ($arr = mysql_fetch_array(mysql_query('select * from alunos'))) { ... }
Isso não dá certo. O laço não acaba nunca, porque toda vez o php vai resolver a query como se fosse uma coisa nova, ele vai interpretar que você quer selecionar todo mundo da tabela outra vez, e não é isso que você quer. Põe a query numa variável:$resultado = mysql_query('select * from alunos'); while ($arr = mysql_fetch_array($resultado)) { ... }
Aí sim ele vai saber que se trata da mesma query, porque a variável é a mesma. (Não testei!! Mas certeza que é bem por aí...)
-
LacosTTe, também achei meio esquisito esse modo que ele passou, mas parece que não está errado... Pelo menos aqui, compila (no gcc 4.4.5-8 Debian) e funciona.
O que está faltando é um ponto-e-vírgula na declaração do arqAgenda e realmente o fwrite está errado (vide http://www.cplusplus.com/reference/clibrary/cstdio/fwrite).
-
Amigo, eu tenho um código muito parecido com o que você precisa.
Se quiser pode reaproveitar. É utilizando uma tabela hashing (vide http://pt.wikipedia.org/wiki/Hashing).
Basicamente você teria que copiar o conteúdo do arquivo para uma estrutura intermediária (tabela de dispersão) e, dada a entrada do usuário, você faria a consulta por aquela entrada na tabela. A complexidade da pesquisa, idealmente, é de ordem constante, independente do número de produtos no estoque.
Fica bem mais rápido do que fazer uma busca em laço. Segue o código para uma estrutura definida por uma string e um inteiro (produto e qte em estoque).
/** * @file dicionario.c * @author Eduardo Vasconcelos * @brief Tabela de dispersao aberta * @date 28 Nov 2011 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM_PALAVRA 30 #define TAM_TABELA 13 typedef struct bloco { char palavra[TAM_PALAVRA]; int valor; struct bloco *prox; }no; typedef struct { no *ini, *fim; }lista; lista dicionario[TAM_TABELA]; int hash(char *p_hash) { int i = 0, r = 0; for (; i < strlen(p_hash); i++) r += p_hash[i]; return (r % TAM_TABELA); } inicializa () { int i = 0; for (; i < TAM_TABELA; i++) { dicionario[i].ini = NULL; dicionario[i].fim = NULL; } } inserir(char *p_inserir, int v_inserir) { int h = hash(p_inserir); no *aux = (no*) malloc (sizeof(no)); strcpy(aux->palavra, p_inserir); aux->valor = v_inserir; aux->prox = NULL; if (dicionario[h].ini == NULL) { dicionario[h].ini = aux; dicionario[h].fim = aux; } else { dicionario[h].fim->prox = aux; dicionario[h].fim = aux; } } int pesquisar(char *p_pesquisar) { int h = hash(p_pesquisar); if (dicionario[h].ini == NULL) return -1; else { no *aux = dicionario[h].ini; while (aux != NULL) { if (strcmp(aux->palavra, p_pesquisar) == 0) return aux->valor; else aux = aux->prox; } } return -1; } int main (int argc, char *argv[]) { int t, n, v; char c[3], *p = (char*) malloc (TAM_PALAVRA * sizeof(char)); scanf("%d", &t); for (; t > 0; t--) { inicializa(); scanf("%d", &n); for (; n > 0; n--) { fflush(stdin); scanf("%s", c); if (strcmp(c, "I") == 0) { scanf("%s %d", p, &v); inserir(p, v); } else { scanf("%s", p); printf("%d\n", pesquisar(p)); } } } return 0; }
Dicas:
-> Defina TAM_TABELA com um número primo próximo do número de elementos que você espera guardar no dicionario, para otimizar a pesquisa.
-> A pesquisa retorna -1 se o elemento não está na tabela e a qte relacionada a ele se o elemento está lá.
-
Olá Clau Gueno,
acontece que a função fscanf recebe (neste caso) 3 parâmetros:
1 - o ponteiro para o arquivo;
2 - o que será lido e
3 - "para onde" será lido
o correto seria:
fscanf(arqAgenda, "%s", contato.(algo, não sei como você definiu a estrutura));
Mas não vai dar certo. Observe que: -> O arquivo deve estar aberto e ser válido, isto é, o ponteiro (arqAgenda) não pode ser nulo. Parece que você não chegou a abrir nada no arqAgenda. Antes de ler do arquivo, você deve abrí-lo. -> Leitura de string não tem & (E Comercial) na frente do nome da string e quando lendo de arquivo, o primeiro argumento é o arquivo. A construção:fscanf(contato, "%s", &arqAgenda);
vai apresentar erro (contato é a sua estrutura e não o arquivo).
Dá uma olhada neste site aqui: http://www.cplusplus.com/
Nele você sempre acha os protótipos das funções que precisa!!
Editado: Erro na tag
-
Olá,
Tem como fazer isso sim.
A única restrição é que você só vai poder sobrescrever o mesmo número bytes, por exemplo:
Se no arquivo a ser reescrito consta (sem aspas):
"15\npessoa003"
Você poderá reescrever a partir do início do arquivo (sem prejudicar o 'pessoa003'):
"16\npessoa003",
pois o que foi escrito (16) tem o mesmo número de bytes do que estava lá (15).
Entretanto, se você tentar escrever algo com número de bytes maior do que aquilo que estava lá, o 15, o resto do arquivo será prejudicado, isto é, o 'pessoa003' vai ser, pelo menos em parte, sobrescrito também.
Segue o código:
#include <stdio.h> int main (int argc, char *argv[]) { int p = 16; FILE *arquivo = fopen("arquivo.txt", "r+"); fprintf(arquivo, "%d", p); fclose(arquivo); return 0; }
Nota: arquivo.txt tem o seguinte conteúdo:
15pessoa003
Python lista
em Python
Postado · Editado por tucano
Olá Kay,
Acho que com a formatação correta até rola isso que você tá querendo (Mas nunca me aprofundei em formatação, é só um chute!! Uso Python mais para cálculos/plotagem...).
Dá uma olhada nessa documentação que pode ser que ajude, é um tutorial sobre formatação de saída:
http://docs.python.org/tutorial/inputoutput.html
Mas acho que não faz sentido deixar de usar um laço para fazer isso, até porque a solução fica bem mais simples:
Abraços