private void btnCarregarCidades_Click(object sender, EventArgs e) { if (dlgAbrir.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(dlgAbrir.FileName, Encoding.Default); while (!sr.EndOfStream) { var registro = sr.ReadLine(); if (registro.TrimEnd().Length == 28) { cidades.Incluir(new Cidade(registro)); } } sr.Close(); btnCarregarCidades.Enabled = false; btnCarregarCaminhos.Enabled = true; lsbDestino.Items.Clear(); lsbOrigem.Items.Clear(); ColocarNasListboxes(cidades.Raiz); fonteCidades = new Font(fonteCidades.FontFamily, (float)Width / 130, FontStyle.Bold); pbMapa.Invalidate(); } }
/* * Constrói uma árvore com as cidades baseado em um arquivo recebido com parâmetro. * @params um StreamReader que contém o arquivo que será lido. */ private void ConstruirArvore(StreamReader arquivo) { while (!arquivo.EndOfStream) { arvore.Incluir(Cidade.LerRegistro(arquivo)); } arquivo.Close(); }
//ao iniciar o programa private void Form1_Load(object sender, EventArgs e) { //limpamos os itens existentes nos lsbs lsbOrigem.Items.Clear(); lsbDestino.Items.Clear(); //instanciamos variáveis caminho = new PilhaLista <int>(); cidades = new Arvore <Cidade>(); //leitura do arquivo de cidades de acordo com o método feito na classe Cidade //incluimos as cidades na árvore de cidades StreamReader arq = new StreamReader("CidadesMarte.txt"); while (!arq.EndOfStream) { Cidade cid = Cidade.LerArquivo(arq); cidades.Incluir(cid); } arq.Close(); //lemos o arquivo ordenado para inclusão das cidades nos lsbs de origem e destino arq = new StreamReader("CidadesMarteOrdenado.txt"); while (!arq.EndOfStream) { Cidade cid = Cidade.LerArquivo(arq); lsbOrigem.Items.Add(cid.IdCidade + "-" + cid.NomeCidade); lsbDestino.Items.Add(cid.IdCidade + "-" + cid.NomeCidade); } arq.Close(); //criamos uma matriz de cidades de acordo com a quantidade de cidades existentes adjacencias = new int[cidades.QuantosDados, cidades.QuantosDados]; //lemos o arquivo que nos passa os caminhos entre as cidades arq = new StreamReader("CaminhosEntreCidadesMarte.txt"); //cria-se uma variável que recebe o caminho entre as cidades //guarda-se a distância do caminho na matriz de acordo com a cidade de origem e cidade de destino //[idOrigem, idDestino] == [x,y] while (!arq.EndOfStream) { CaminhoEntreCidades caminho = CaminhoEntreCidades.LerArquivo(arq); adjacencias[caminho.IdCidadeOrigem, caminho.IdCidadeDestino] = caminho.Distancia; } arq.Close(); //pedimos para que o mapa seja redesenhado pbMapa.Invalidate(); }
public void lerCidades() { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Lê o arquivo de cidades e guarda as cidades na arvoreCidade arquivoCidades = new StreamReader("CidadesMarte.txt"); String linha; while (!arquivoCidades.EndOfStream) { linha = arquivoCidades.ReadLine(); int idCidade = int.Parse(linha.Substring(0, 3)); string nomeCidade = linha.Substring(3, 15); int coordenadaX = int.Parse(linha.Substring(18, 5)); int coordenadaY = int.Parse(linha.Substring(23, 5)); Cidade cidadeAux = new Cidade(idCidade, nomeCidade, coordenadaX, coordenadaY); arvoreCidade.Incluir(cidadeAux); } }
private void LerArquivo(PaintEventArgs e) //Método responsável por ler os arquivos e criar a árvore usada pelo programa, juntamente com matriz { int n = 0; // int qtdCidades = 1; //Variável local que guarda o número de cidades a serem lidas do arquivo StreamReader arq = new StreamReader("CidadesMarte.txt", Encoding.UTF7); //Criação do StreamReader responsável por ler o arquivo que contém as cidades, seus códigos, nomes e localização no mapa StreamReader aux = new StreamReader("CidadesMarteOrdenado.txt", Encoding.UTF7); //Criação do StreamReader responsável por ler o arquivo que contém os nomes cidades, que são exibidas ordenadamente de acordo com seus respectivos códigos string linha = arq.ReadLine(); //Variável tipo string que guarda todas as informações lidas no primeiro arquivo mencionado string linha2 = aux.ReadLine(); //Variável tipo string que guarda todas as informações lidas no segundo arquivo mencionado Cidade cid = new Cidade(linha); //Criação da primeira cidade que é lida no arquivo desordenado de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade Cidade cid2 = new Cidade(linha2); //Criação da primeira cidade que aparece no arquivo ordenado, de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade var qtdLinhas = File.ReadLines("CidadesMarteOrdenado.txt").Count(); //Variável que guarda a quantidade de linhas que tem o primeiro arquivo; essa quantidade de linhas corresponde ao número de cidades que serão registradas if (lsbOrigem.Items.Count < qtdLinhas) //Verificação: se o número de itens do listbox for menor que o número de cidades que esrão/foram registradas { //Caso seja, podemos adicionar nos dois listbox lsbDestino.Items.Add(n + "-" + cid2.Nome); //Adição do código e nome da cidade, respectivamente, no listbox de origens lsbOrigem.Items.Add(n + "-" + cid2.Nome); //Adição do código e nome da cidade, respectivamente, no listbox de destinos arvore.Raiz = new NoArvore <Cidade>(cid); //Como essa é a primeira cidade lida, esta deve ser tida como raiz da //árvore do programa; Como uma árvore criada a partir de um arquivo ordenado é "tombada" para a direita, por conta da contrução de esquerda(menores valores) e direita(maiores valores), a cidade passada como referência é a cid, adquirida pela leitura do arquivo desordenado }//Caso não seja, nada é adicionado ou alterado Graphics grafico = e.Graphics; //Atribuição do gráfico adquirido pelo parâmetro à variável grafico do tipo Graphics, responsável pela alteração do gráfico exibido ao usuário Point p = new Point(); //Instanciação de um Point, necessário na exibição dos pontos no gráficos, representantes das localizações das cidades p.X = cid.X * pbMapa.Width / 4096; //Atribuição da localização, no eixo X, do ponto p p.Y = cid.Y * pbMapa.Height / 2048; //Atribuição da localização, no eixo Y, do ponto p SolidBrush pincel = new SolidBrush(Color.Black); //Declaração de um SolidBrush, responsávl por escrever os nomes das cidades //Método que desenha no gráfico o nome da cidade criada grafico.DrawString(cid.Nome, new Font("Arial", 10, FontStyle.Bold), pincel, new Point(p.X, p.Y - 20)); //Método que desenha no gráfico o ponto representando a localização da cidade criada grafico.FillEllipse(pincel, new RectangleF(p.X, p.Y, 8, 8)); while (!arq.EndOfStream) //Loop: enquanto o arquivo não for totalmente lido; Como os dois arquivos tem necessariamente o mesmo tamanho, é possível verificar o término de qualquer um dois dois { n++; linha = arq.ReadLine(); //Atribuição à variável linha as informações lidas na linha atual do arquivo linha2 = aux.ReadLine(); //Atribuição à variável linha2 as informações lidas na linha atual do segundo arquivo cid = new Cidade(linha); //Criação da cidade que foi atualmente lida no arquivo desordenado de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade cid2 = new Cidade(linha2); //Criação da cidade que foi atualmente no arquivo ordenado, de acordo com as informações lidas na linha atual e por meio do construtor adaptado à esse tipo de construção, na classe Cidade if (lsbOrigem.Items.Count < qtdLinhas) //Verificação: se o número de itens do listbox for menor que o número de cidades que esrão/foram registradas { //Caso seja, podemos adicionar nos dois listbox lsbDestino.Items.Add(n + "-" + cid2.Nome); //Adição do código e nome da cidade, respectivamente, no listbox de origens lsbOrigem.Items.Add(n + "-" + cid2.Nome); //Adição do código e nome da cidade, respectivamente, no listbox de destinos arvore.Incluir(cid); //Inclusão da cidade (do arquivo desordenado, para a construção estrutural correta da árvore) lida à árvore }//Caso não seja, nada é adicionado ou alterado p = new Point(); //Instanciação de um novo Point, que irá representar a localização da cidade lida atualmente p.X = cid.X * pbMapa.Width / 4096; //Atribuição da localização, no eixo X, do ponto p p.Y = cid.Y * pbMapa.Height / 2048; //Atribuição da localização, no eixo Y, do ponto p pincel = new SolidBrush(Color.Black); //Declaração de um SolidBrush, responsávl por escrever os nomes das cidades //Método que desenha no gráfico o nome da cidade criada grafico.DrawString(cid.Nome, new Font("Arial", 10, FontStyle.Bold), pincel, new Point(p.X, p.Y - 20)); //Método que desenha no gráfico o ponto representando a localização da cidade criada grafico.FillEllipse(pincel, new RectangleF(p.X, p.Y, 8, 8)); qtdCidades++; //Adição de uma unidade à variável que guarda a quantidade de cidades lidas } arq.Close(); //Encerramento da leitura do arquivo, fechando-o aux.Close(); //Encerramento da leitura do arquivo, fechando-o CriarMatriz(); //Chamada do método responsável por instanciar e preencher a matriz, que é usada na verificação da existência de uma rota ou não entre duas cidades }
public void lerArquivos() { StreamReader leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CidadesMarte.txt", Encoding.UTF7, true); string linha = leitor.ReadLine(); cidades.Raiz = new NoArvore <Cidade>(new Cidade(linha)); while (!leitor.EndOfStream) { linha = leitor.ReadLine(); cidades.Incluir(new Cidade(linha)); } leitor.Close(); rotasMatriz = new int[cidades.QuantosDados + 1, cidades.QuantosDados + 1]; leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CidadesMarteOrdenado.txt", Encoding.UTF7, true); int indice = 1; rotasMatriz[0, 0] = -1; while (!leitor.EndOfStream) { linha = leitor.ReadLine(); Cidade nova = new Cidade(linha); cidades.Atual = new NoArvore <Cidade>(nova); rotasMatriz[indice, 0] = nova.Cod; rotasMatriz[0, indice] = nova.Cod; lsbOrigem.Items.Add(nova.Cod + " - " + nova.Nome); lsbDestino.Items.Add(nova.Cod + " - " + nova.Nome); indice++; } leitor.Close(); leitor = new StreamReader("F:\\ED2\\Projeto2_DirigiveisEmMarte\\CaminhosEntreCidadesMarte.txt", Encoding.UTF7, true); while (!leitor.EndOfStream) { linha = leitor.ReadLine(); Caminho novo = new Caminho(linha); caminhos.InserirAposFim(novo); for (int i = 1; i < cidades.QuantosDados + 1; i++) { if (i - 1 == novo.CodOrigem) { for (int a = 1; a < cidades.QuantosDados + 1; a++) { if (a - 1 == novo.CodDestino) { rotasMatriz[i, a] = novo.Distancia; } } } } } leitor.Close(); quantosdados = cidades.QuantosDados; cidades.OndeExibir = tpArvore; }
private void Form1_Load(object sender, EventArgs e) { arvoreCidades = new Arvore <CidadeMarte>(); matrizCaminhos = new int[23, 23]; dgvCaminhosEncontrados.RowCount = 0; //arquivo cidades try { // vai ler o arquivo e armazenar em uma árvore StreamReader arquivo; arquivo = new StreamReader(@"C:\Temp\CidadesMarte.txt", Encoding.Default); while (!arquivo.EndOfStream) { string linha = arquivo.ReadLine(); arvoreCidades.Incluir(new CidadeMarte(int.Parse(linha.Substring(1, 2)), // id linha.Substring(3, 16), // nome int.Parse(linha.Substring(19, 4)), // coordx int.Parse(linha.Substring(24, 4)))); // coordy } } catch { //caso não consiga achar o arquivo ele da um openfile StreamReader arquivo; MessageBox.Show("Selecione o arquivo das cidades (CidadesMarte.txt)"); if (dlgAbrir.ShowDialog() == DialogResult.OK) { arquivo = new StreamReader(dlgAbrir.FileName); } else { arquivo = new StreamReader(@"C:\Temp\CidadesMarte.txt", Encoding.Default); } while (!arquivo.EndOfStream) { string linha = arquivo.ReadLine(); arvoreCidades.Incluir(new CidadeMarte(int.Parse(linha.Substring(1, 2)), // id linha.Substring(3, 16), // nome int.Parse(linha.Substring(19, 4)), // coordx int.Parse(linha.Substring(24, 4)))); // coordy } } // arquivo caminhos try { StreamReader arquivo; arquivo = new StreamReader(@"C:\Temp\CaminhosEntreCidadesMarte.txt", Encoding.Default); while (!arquivo.EndOfStream) { string linha = arquivo.ReadLine(); matrizCaminhos[int.Parse(linha.Substring(1, 2)), int.Parse(linha.Substring(4, 2))] = int.Parse(linha.Substring(7, 4)); // id origem // id destino // distancia } } catch { StreamReader arquivo; MessageBox.Show("Selecione o arquivo dos caminhos (CaminhosEntreCidadesMarte.txt)"); if (dlgAbrir.ShowDialog() == DialogResult.OK) { arquivo = new StreamReader(dlgAbrir.FileName); } else { arquivo = new StreamReader(@"C:\Temp\CaminhosEntreCidadesMarte.txt", Encoding.Default); } while (!arquivo.EndOfStream) { string linha = arquivo.ReadLine(); matrizCaminhos[int.Parse(linha.Substring(1, 2)), int.Parse(linha.Substring(4, 2))] = int.Parse(linha.Substring(7, 4)); // id origem // id destino // distancia } } pnlArvore.Invalidate(); }