Ajuda para abrir arquivo RTF

4 respostas
FBovo

:?:Pessoal, alguém pode me ajudar? Preciso abrir um arquivo RTF (documento) via código, e substituir constantes que criei neste documento: por exemplo, #TABELA_DISTRIBUICAO_SEXO# ou #NOME_DO_MEDICAMENTO# (Digitei estas constantes exatamente desta forma, começando e terminando com o sinal #). Bom preciso substituir essas constantes por resultados de queries (selects) que criei no SQL 2000, ou seja, além de abrir o arquivo, tenho de trocar cada constante criada pelo valor correspondente da query do SQL. Meu chefe me passou algumas funções para auxiliar, que posto logo abaixo, mas não consigo entender como encaixá-la no meu caso. Alguém pode me ajudar a analisar estas funções ou então mostrar para mim alguma mais “clara” ?

String texto = readFile(new File(“PSUR Luxfacta1.rtf”));

private String readFile(File file) throws Exception {

FileInputStream fis = null;
 byte[] buf = new byte[4 * 1024];
 StringBuffer bf = new StringBuffer();

         try {

      fis = new FileInputStream(file);

      while (fis.read(buf) >= 0) {

        String arquivo = new String(buf);

        bf.append(arquivo);

      }

    } finally {

      if (fis != null)

        fis.close();

    }

    return bf.toString();

  }

  
      public String replace (

          final String aInput, // texto
          final String aOldPattern, // de
          final String aNewPattern  // para

        ){

           if ( aOldPattern.equals("") ) {

              throw new IllegalArgumentException("Old pattern must have content.");

           }

 

           final StringBuffer result = new StringBuffer();

           //startIdx and idxOld delimit various chunks of aInput; these

           //chunks always end where aOldPattern begins

           int startIdx = 0;

           int idxOld = 0;

           while ((idxOld = aInput.indexOf(aOldPattern, startIdx)) >= 0) {

             //grab a part of aInput which does not include aOldPattern

             result.append( aInput.substring(startIdx, idxOld) );

             //add aNewPattern to take place of aOldPattern

             result.append( aNewPattern );

 

             //reset the startIdx to just after the current match, to see

             //if there are any further matches

             startIdx = idxOld + aOldPattern.length();

           }

           //the final chunk will go to the end of aInput

           result.append( aInput.substring(startIdx) );

           return result.toString();

        }

4 Respostas

andre_udi

ola amigo,

replace( textoArquivo, constante, novoValor )

ai, no seu texto, onde ele encontrar a constante ele substituira pelo novoValor.

espero ter ajudado.

abraços

FBovo

:wink:

André obrigado pela sugestão, mas ainda não resolveu o problema.

lrgalego

eh só vc usar o método replace da classe StringBuffer
voce obtém quais são os indices de ínicio e fim dos deus # e passa para o método de acordo com o texto que estiver entre os dois a string minerada do banco de dados
Muito simples =)
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/StringBuffer.html

Outro exemplo é usando os metodos replaceAll ou replaceFirst da classe Stirng

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

andre_udi

ola amigo,

olha, tem q funcionar.

System.out.println( replace( "meu nome é #nome.", "#nome", "andre" ) );

imprime: “meu nome é andre.”

abraços

Criado 17 de setembro de 2007
Ultima resposta 17 de set. de 2007
Respostas 4
Participantes 3