package pilhaA; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import dados.DataArea; import fundamentos.ContainerEmptyException; import fundamentos.ContainerFullException; public class PilhaArray { /* * O campo br é uma instância da classe BufferedReader que usa * is da classe InputStreamReader como argumento para seu construtor. * Serve para simular o getch do C. */ private static InputStreamReader is = new InputStreamReader( System.in ); private static BufferedReader br = new BufferedReader( is ); final static int maxStack = 50; // Limite da pilha. /* * Serve para informar as posições de início e * fim das substrings da linha lida no arquivo. */ final static int inicioNumero = 2; final static int finalNumero = 4; final static int inicioNome = 5; final static int finalNome = 16; final static int inicioSalario = 17; /* * O final da substring referente ao salário, * varia em funçao do fim da linha */ public static void main(String[] args) { DataArea currArea; String linha; // Capturar uma linha inteira do arquivo. char transacao; String sNome = ""; String sNumero = "0"; String sSalario = "0"; int offset = 0; try { StackAsArray s = new StackAsArray(maxStack); // Inicializa a pila. /* * Seleciona o stream de entrada. * Foi escolhida uma stream que possibilitasse a leitura de linha em linha. */ BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream ( new File("..\\" + "dados\\ARQ9502.DAT")))); while (in.ready()) { linha = in.readLine(); // Ler uma linha do texto (arquivo) de entrada. transacao = linha.charAt(0); //Obter o caractere da transação. /* * Processamento da transação contida na linha lida * Tratamento dos dados que se quer inserir. */ if(transacao == 'i') { currArea = new DataArea(0, null, 0f); sNumero = linha.substring( inicioNumero, finalNumero); sNome = linha.substring( inicioNome, finalNome); sSalario = linha.substring( inicioSalario); currArea.setNumero(Integer.decode(sNumero).intValue()); currArea.setNome(sNome); currArea.setSalario(Float.parseFloat(sSalario)); System.out.println("\tTransação: " + transacao); try { s.push(currArea); System.out.print("Registro incluido-> "); System.out.print(currArea); } catch (ContainerFullException e) { System.out.println(e.getMotivo()); } }// Fim do if(transacao == 'i') else if (transacao == 'e') { System.out.println("\tTransação: " + transacao); try { currArea = (DataArea) s.pop(); System.out.print("Registro excluido-> "); System.out.print(currArea); } catch (ContainerEmptyException e) { System.out.println(e.getMotivo()); } }// Fim do else if (transacao == 'e') else if(transacao != 'f') System.out.println( "transacao diferente de 'i', 'e' ou 'f'"); br.readLine(); // Simulação do getch do C. }// Fim do else if(transacao != 'f') in.close(); // Fechamento do stream (arquivo). System.out.print(s); // Imprimir o estado final da Pilha. br.readLine(); // Simulação do getch do C. }// Fim do while (in.ready()) catch (IOException e) { System.out.println("Arquivo não encontrado!"); } } }