Você está aqui: Cards de Cards de Hidrologia |
||
|
||
|
|
||
C++ ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em C++ usando a função rmdir()Quantidade de visualizações: 8845 vezes |
Em algumas situações nossos códigos C++ precisam excluir diretórios. Isso pode ser feito com o auxílio da função _rmdir() ou rmdir(), disponível no header direct.h (trazido da linguagem C). Veja a assinatura desta função:int _rmdir(const char *pathname); a) ENOTEMPTY - Directory not empty - O diretório não está vazio e portanto não pode ser excluído; b) ENOENT - No such file or directory - O caminho do diretório é inválido; c) EACCESS - Acesso negado - Algum outro programa está usando este diretório e mantém controle sobre o mesmo. Veja um trecho de código C++ no qual excluímos um diretório:
#include <iostream>
#include <direct.h>
using namespace std;
int main(int argc, char *argv[]){
// vamos excluir este diretório
char diretorio[] = "C:\\Dev-Cpp\\estudos";
// vamos testar se houve erro na exclusão do diretório
if(rmdir(diretorio) == -1){
cout << "Erro: " << strerror(errno) << endl;
}
else{
cout << "Diretório excluído com sucesso" << endl;
}
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
É possível usar a versão Unicode de _rmdir(), ou rmdir(). O método _wrmdir(), também presente em direct.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo:
#include <iostream>
#include <direct.h>
using namespace std;
int main(int argc, char *argv[]){
// vamos excluir este diretório
wchar_t diretorio[] = L"C:\\Dev-Cpp\\estudos";
// vamos testar se houve erro na exclusão do diretório
if(_wrmdir(diretorio) == -1){
cout << "Erro: " << strerror(errno) << endl;
}
else{
cout << "Diretório excluído com sucesso" << endl;
}
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
|
QGIS ::: PyQGIS API ::: Aplicações com código fonte completo |
Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completoQuantidade de visualizações: 659 vezes |
|
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS. Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer. Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios. Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio. Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression(). O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression(). Veja o código completo para o exemplo:
# uma classe para guardar cada um dos municípios
# do Estado de Goiás
class Municipio:
# método construtor
def __init__(self, codigo, nome, estado, area):
self.codigo = codigo
self.nome = nome
self.estado = estado
self.area = area
# para guardar os municípios
municipios = []
# vamos criar um novo objeto QgsVectorLayer com o local
# do nosso shapefile
camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp",
"Municípios do Estado de Goiás", "ogr")
# vamos testar se a camada é válida
if not camada.isValid():
print("Não foi possível carregar a camada %s" % camada.name())
else:
# vamos percorrer todas as feições da camada
# e obter os seus atributos
feicoes = camada.getFeatures()
for f in feicoes:
# vamos obter os atributos desta feição
atributos = f.attributes()
# e criamos um novo objeto da classe Municipio
municipio = Municipio(atributos[0], atributos[1],
atributos[2], atributos[3])
# adicionamos este município na lista
municipios.append(municipio)
# agora vamos ordenar a lista por área da maior para
# a menor
municipios = sorted(municipios,
key=lambda municipio:municipio.area, reverse=True)
# vamos adicionar a camada à relação de camadas
QgsProject.instance().addMapLayer(camada)
# vamos calcular a área ocupada pelos 5 maiores municípios
# do Estado de Goiás
area_5_maiores = 0
for i in range(5):
area_5_maiores = area_5_maiores + municipios[i].area
# agora vamos selecionar os 5 maiores municípios na
# camada do QGIS
codigos = ""
for i in range(5):
codigos = codigos + municipios[i].codigo + ", "
codigos = codigos[0:len(codigos) - 2]
camada.selectByExpression('"CD_MUN" IN (' + codigos + ')')
# e mostramos os resultados
print("Os 5 maiores municípios do Estado de Goiás são:\n")
for i in range(5):
print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome,
municipios[i].area))
print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format(
area_5_maiores))
# finalmente vamos exibir os nomes dos municípios. Essa foi
# a parte mais desafiadora do código, pois eu queria mostrar
# somente os rótulos dos cinco maiores municípios
settings = QgsPalLayerSettings()
settings.isExpression = True
settings.placement = QgsPalLayerSettings.Line
settings.placement = QgsPalLayerSettings.Horizontal
# mostra o nome do município
settings.fieldName = "NM_MUN"
format = QgsTextFormat()
format.setColor(QColor('Black'))
settings.setFormat(format)
settings.enabled = True
# cria e adiciona uma nova regra
root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
rule = QgsRuleBasedLabeling.Rule(settings)
rule.setDescription("5 Maiores Municípios do Estado de Goiás")
# define o campo que será usado no filtro. Note que somente
# serão listados os rótulos dos municípios com área maior ou
# igual ao quinto elemento da lista municípios
campo_area = "AREA_KM2"
rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}")
root.appendChild(rule)
# define as configurações do rótulo
camada.setLabelsEnabled(True)
rules = QgsRuleBasedLabeling(root)
camada.setLabeling(rules)
# redesenha a camada no canvas do QGIS
camada.triggerRepaint()
Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado: Os 5 maiores municípios do Estado de Goiás são: 1) Niquelândia - Área: 9846.293 km2 2) Mineiros - Área: 9042.844 km2 3) Caiapônia - Área: 8627.961 km2 4) Rio Verde - Área: 8374.255 km2 5) Nova Crixás - Área: 7308.681 km2 Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2 Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren. |
jQuery ::: Dicas & Truques ::: Manipulação e Conteúdo Dinâmico |
Como definir o conteúdo HTML de um elemento usando a função html() do jQueryQuantidade de visualizações: 8136 vezes |
O método html("conteúdo") permite definir o conteúdo (innerHTML) de todos os elementos encontrados em uma determinada condição. Considere os seguintes elementos P:<p>Sou o primeiro parágrafo</p> <p>Sou o segundo parágrafo</p> Veja agora o código JavaScript que define o conteúdo HTML destes dois parágrafos:
<script type="text/javascript">
<!--
function definirInnerHTML(){
var texto = "<b>Veja este texto</b>";
// define o conteúdo para os elementos P
$('p').html(texto);
}
//-->
</script>
Lembre, porém, que a prática mais comum é definir o conteúdo HTML de um elemento identificado por um id. O retorno deste método é um objeto jQuery, que pode ser usado para possíveis encadeamentos de chamadas de métodos. |
Python ::: Dicas & Truques ::: Arquivos e Diretórios |
Como usar a função exists() do módulo os.path para testar a existência de um arquivo ou diretório em PythonQuantidade de visualizações: 3581 vezes |
|
Antes de efetuarmos qualquer ação em um arquivo ou diretório, é sempre uma boa idéia testar primeiro se tal arquivo ou diretório existe no sistema. Isso pode ser feito por meio do método exists() do módulo os.path. Este método retorna True se o arquivo ou diretório existir, e False em caso contrário. Veja um exemplo no qual checamos a existência de um arquivo chamado "teste.txt":
from os import path
def main():
# vamos verificar se este arquivo existe, neste local
if path.exists("C:\\estudos_python\\teste.txt"):
print("Arquivo foi encontrado")
else:
print("Arquivo não foi encontrado")
if __name__== "__main__":
main()
Se o arquivo existir no caminho informado, o texto "Arquivo foi encontrado" será impresso na tela. Se o arquivo não puder ser encontrado, o texto "Arquivo não foi encontrado" será exibido. Veja agora como podemos verificar se um diretório existe ou não no sistema operacional:
from os import path
def main():
# vamos verificar se este diretório existe
if path.exists("C:\\estudos_python"):
print("Diretório existe.")
else:
print("Diretório não existe.")
if __name__== "__main__":
main()
Execute este código e veja o resultado. Se o diretório pesquisado existir, o texto "Diretório existe." será exibido. |
Java ::: Dicas & Truques ::: Formatação de datas, strings e números |
Java para iniciantes - Como formatar uma string no estilo printf da linguagem C usando a classe Formater do JavaQuantidade de visualizações: 12214 vezes |
|
Nesta dica eu mostro como é possível usar o método format() da classe Formater da linguagem Java para formatar strings ao bom e velho estilo da linguagem C, ou seja, com marcadores %d para inteiros, %f para decimais, por exemplo. Veja o exemplo completo:
package arquivodecodigos;
import java.util.*;
public class Estudos{
public static void main(String[] args){
int pessoas = 20;
StringBuilder string = new StringBuilder();
Formatter fm = new Formatter(string);
fm.format("Havia %d pessoas lá.", pessoas);
System.out.println(string);
}
}
Ao executar este código Java nós teremos o seguinte resultado: Havia 20 pessoas lá. |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
|
wxWidgets - Como usar a classe wxFrame para criar a janela principal de suas aplicações C++ wxWidgets |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





