Programa externo no "FileFormat"

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • ccmancio
    Old Hand
    • May 2005
    • 235

    Programa externo no "FileFormat"

    Preciso reformatar dois arquivos antes de comparar, então criei uma nova regra no "fileformat" passando como parâmetros /s=%s e /t=%t.
    Na primeira chamada (lado esquerdo) somente grava os parâmetros.
    Na segunda chamada (lado direito) vou fazer a comparação dos dois arquivos criados (*.tmp)

    O problema é que só posso reformatar os arquivos apos obter o segundo arquivo, pois tenho que comparar os dois, mas quando da segunda chamada do programa externo criado, o primeiro arquivo temporário esta indisponível para leitura (access denied).
    Acredito que não seria possível reformata-lo também ....

    Tem como resolver este problema ?
  • Aaron
    Team Scooter
    • Oct 2007
    • 16009

    #2
    Hello,

    The external conversion is triggered twice. It will be used on the left and also on the right.
    If your external conversion is:
    convert.exe %s %t

    When it is called on the left side it will be:
    convert.exe originalLeftFile.txt OutputFromConvertExe.txt

    When it is called on the right side, it will be:
    convert.exe originalRightFile.txt OutputFromConvertExe.txt

    In both cases, the Output is what is displayed in the Text Compare. Is this the type of conversion you are attempting to do? Google Translate is not handling the subtly of your 2nd paragraph.

    If you are trying to build a temp file, and then compare the temp file to the original, you may want to use an Open With instead. Tools menu -> Options dialog, Open With. The Open With can call any command line. It could be a bat file that generates the temp file, then calls another instance of Beyond Compare:
    YourOpenWith.bat:

    convert.exe originalFile.txt temp.txt
    bcompare.exe originalFile.txt temp.txt

    translate.google.com:
    Olá,

    A conversão externa é acionado duas vezes. Ele será usado na esquerda e também à direita.
    Se a sua conversão externa é:
    convert.exe% s% t

    Quando é chamado no lado esquerdo, será:
    convert.exe originalLeftFile.txt OutputFromConvertExe.txt

    Quando é chamado no lado direito, será:
    convert.exe originalRightFile.txt OutputFromConvertExe.txt

    Em ambos os casos, a saída é o que é exibido no Texto Compare. É este o tipo de conversão que você está tentando fazer? Traduz Google não está a lidar com a sutileza de seu parágrafo 2.

    Se você está tentando construir um arquivo temporário, e, em seguida, compare o arquivo temporário para o original, você pode querer usar um Open With vez. Menu Ferramentas -> Opções de diálogo, Open With. O Open With pode ligar para qualquer linha de comando. Poderia ser um bat que gera o arquivo temp, então chama outra instância do Beyond Compare:
    YourOpenWith.bat:

    convert.exe originalFile.txt temp.txt
    bcompare.exe originalFile.txt temp.txt
    Last edited by Aaron; 11-Jan-2012, 10:19 AM. Reason: adding translation.
    Aaron P Scooter Software

    Comment

    • ccmancio
      Old Hand
      • May 2005
      • 235

      #3
      Acho que você não entendeu...

      Eu preciso reformatar os dois arquivos antes da comparação, mas somente posso reformatar os dois arquivos quando eu conhecer quais os dois arquivos que foram selecionados, porque a reformatação depende dos dois arquivos.
      Mas quando tento reformatar(abrir) o primeiro arquivo, na segunda chamada o Beyond Compare retorna "Access Denied". (acredito que ele ja tenha deixado o arquivo aberto na primeira chamada)

      Como exemplo:
      Arquivo1 : Arquivo2:
      Sub Rotina1() Sub Rotina1()
      End Sub End Sub
      Sub Rotina3() Sub Rotina2()
      End Sub End Sub
      Sub Rotina4() Sub Rotina4()
      End Sub End Sub

      Eu desejo que fique desta maneira na comparação:
      Sub Rotina1() Sub Rotina1()
      End Sub End Sub
      Sub Rotina2()
      End Sub
      Sub Rotina3()
      End Sub
      Sub Rotina4() Sub Rotina4()
      End Sub End Sub

      mas o Beyond Compare não alinha as rotinas pelos nomes, devido a alguns texto no conteudo interno das rotinas.
      Então pensei em reformatar os arquivos antes da comparação criando as rotinas vazias que não existam no outro arquivo.

      Comment

      • Aaron
        Team Scooter
        • Oct 2007
        • 16009

        #4
        Hello,

        If I understand the translation, you would like to use both sides of the comparison, or a common file, in both external conversions?

        If so, this is not supported. An external conversion is only designed to use the file of one side, then convert it and display the conversion.

        You could setup an Open With. An Open With can run a bat file, which can perform any types of conversions or temporary file generation you would like. The final line of the script could then open two generated temp files in a new instance of Beyond Compare, which would act as opening a new tab or window with the comparison open.

        translate.google.com
        Olá,

        Se eu entendi a tradução, você gostaria de usar ambos os lados da comparação, ou um arquivo comum, em ambas as conversões externas?

        Se assim for, este não é suportado. Uma conversão externa é projetado apenas para usar o arquivo de um lado, então convertê-lo e exibir a conversão.

        Você poderia configurar um Open With. Abrir com um possível executar um arquivo bat, que pode executar qualquer tipo de conversões ou geração de arquivo temporário que você gostaria. A linha final do script poderia então abrir dois arquivos temporários gerados em uma nova instância do Beyond Compare, que atuaria como abrir uma nova aba ou janela aberta com a comparação.
        Aaron P Scooter Software

        Comment

        • ccmancio
          Old Hand
          • May 2005
          • 235

          #5
          Obrigado, vou tentar este solução com um arquivo Bat via "open width"

          Comment

          • ccmancio
            Old Hand
            • May 2005
            • 235

            #6
            Criei um programa em VB para o "Open Width"
            Seleciono o arquivo da esquerda e o da direita e clico no "Open Width".
            Na primeira chamada o meu programa obtem o nome do primeiro arquivo guarda o valor para a segunda chamada.
            Na segunda chamada faz as comparações, como eu queria e cria dois arquivos temporarios : esquerda.vbtmp e direita.vbtmp e chama o Beyond Compare. Aqui esta tudo OK agora.

            Criei tambem um programa para ser executado na opção Salvar do FileFormat quando quando a extensão form vbtmp.

            Faço as alterações necessárias nestes arquivos e quando salvo o meu programa recebe como parametros do Beyond Compare dois nomes temporarios, e não os nomes esquerda.vbtmp ou direita.vbtmp (o que eu salvar)
            O %s retorna C:\Temp\BCxxxxx.tmp e o %t retorna o meu diretorio, mas o arquivo é BCxxxxx.tmp, não deveria retornar o meu diretório e o arquivo esquerda.vbtmp ou direita.vbtmp ?

            Onde eu estou errando ?

            Comment

            • Zoë
              Team Scooter
              • Oct 2007
              • 2666

              #7
              You need to use the %n variable to read the original file name. When loading Beyond Compare will use the original file name for %s. When saving Beyond Compare writes the data to a temporary file and then replaces the original file after the save is successful. That keeps errors from losing data, but means that %s and %t will never be the original filename.

              translate.google.com
              Você precisa usar a variável %n para ler o nome do arquivo original. Ao carregar Beyond Compare usará o nome do arquivo original para %s. Ao salvar Beyond Compare grava os dados em um arquivo temporário e, em seguida, substitui o arquivo original após a salvar é bem sucedido. Que mantém erros de perda de dados, mas significa que %s %t e nunca será o nome do arquivo original.
              Zoë P Scooter Software

              Comment

              • ccmancio
                Old Hand
                • May 2005
                • 235

                #8
                ok, obrigado

                Comment

                • ccmancio
                  Old Hand
                  • May 2005
                  • 235

                  #9
                  Alinhamento

                  Tenho dois programas em Visual Basic, veja anexo os arquivos (estão com extensão .txt porque o fórum não permite upload de extensão .bas, mas o nome correto é sem extensao .text , somente .bas

                  Estou tentando comparar cada uma das rotinas internas, mas não estou conseguindo alinhar as rotinas para comparar.
                  Pelo Beyond a Rotina3 da Esquerda esta alinhada com a Rotina2 da direita e não com a Rotina 3 da Direita.

                  Este é só um exemplo. o original tem mais de 50 rotinas em cada um dos arquivos, e nem todas existem nos dois lados.
                  A unica garantia é que o nome das rotinas esta classificado em ordem ascendente de nome.

                  O "Private" ou "Public" que aparece no inicio de cada rotina deve ser ignorado.

                  Tem como fazer este alinhamento funcionar no File Compare ?

                  Comment

                  • Zoë
                    Team Scooter
                    • Oct 2007
                    • 2666

                    #10
                    Sorry, it isn't possible to make those files align automatically. Since the parameters for each routine can change the "Line Weights" support won't work.

                    translate.google.com
                    Desculpe, não é possível fazer esses arquivos alinhar automaticamente. Uma vez que os parâmetros para cada rotina pode mudar a "Pesos Line" apoio não vai funcionar.
                    Zoë P Scooter Software

                    Comment

                    • ccmancio
                      Old Hand
                      • May 2005
                      • 235

                      #11
                      Não tem como desconsiderar os parametros de cada rotina, assim como Private/Public e Function/Sub que antecedem o nome da rotina ?

                      Meu interesse é alinhar apelas pelos nomes das rotinas :
                      ...Rotina1(...) ...Rotina1(...)
                      ...Rotina2(...)
                      ...Rotina3(...)
                      ...Rotina4(...) ...Rotina4(...)

                      Comment

                      • Zoë
                        Team Scooter
                        • Oct 2007
                        • 2666

                        #12
                        I understand what you want to do, but Beyond Compare can not do it. You can ignore "public", "private", and "sub", but you can't ignore the parameters between ( and ). The only way to do that is to ignore everything on that line, which means ignoring the routine name too. We want to support that eventually, but right now we don't.

                        translate.google.com
                        Eu entendo o que você quer fazer, mas Beyond Compare não pode fazê-lo. Você pode ignorar "public", "private" e "sub", mas você não pode ignorar os parâmetros entre (e). A única maneira de fazer isso é ignorar tudo nessa linha, o que significa ignorar o nome da rotina também. Queremos apoiar que, eventualmente, mas agora não.
                        Zoë P Scooter Software

                        Comment

                        • ccmancio
                          Old Hand
                          • May 2005
                          • 235

                          #13
                          Ok
                          Novamente, obrigado pela atenção !!

                          Continuo a ser um fã incondicional do BC e aguardarei...

                          Comment

                          Working...