“Sintaxe” Realce um flatfile

5

Eu pesquisei e procurei e explorei, mas parece que a maioria das definições de realce de sintaxe configuráveis dos editores são baseadas em palavras-chave e afins. Eu preciso de um que seja baseado em colunas e linhas, basicamente algo para destacar diferentes campos em um arquivo simples.

Ele precisa ser mais complicado do que uma linha para todos, no entanto, existem vários "tipos" diferentes de linhas.

Uma amostra é mostrada abaixo

A9999000055555 333333     55554444422222210102009000000333333
B44444555550000
B44444555550000
B44444555550000
B44444555550000
C9999        0004

Com exceção de "0004" (nº de registros B) e "10102009" (uma data), todos os outros números sequenciais seriam números alfa reais representando diferentes campos de entrada do usuário. A primeira letra é geralmente designada como um tipo de linha.

A intenção desta questão é permitir que os humanos verifiquem a "correção" do formato dos arquivos. Normalmente, esses arquivos são normalmente criados de maneira automatizada, mas as regras de negócios são alteradas e os programas de mainframe antigos precisam ser atualizados (e o que acaba acontecendo não é bonito). Portanto, a ideia é dar a quem cria esses arquivos uma maneira de verificar novamente se o arquivo atende ao formato. Eu não pretendo para qualquer verificação de regra de negócio aqui, puramente formato.

    
por hova 15.10.2009 / 21:54

9 respostas

3

Você pode olhar para o RecordEditor RecordEditor que não é um editor de texto (exibe os dados em uma tabela). Ele também possui exibição de registro único + outras visualizações disponíveis.

O padrão é selecionar o layout do registro, mas existe um "layout preferido" que exibirá cada registro usando o layout correto para o registro.

Ele permite que você verifique visualmente o arquivo

Com o RecordEditor você pode exibir o arquivo em uma tabela (seguindo com a opção preferida

vocêtambémpodeexibiremumaexibiçãodetextodestacada(Visualizar>>>>Exibiçãodetexto(realçarcampos))

você também pode misturar-combinar, aqui o registro atual também é exibido no formato de tabela no lado direito:

Comoalternativa,oRecordEditortemaopçãomacro.Vocêpoderia

  1. UseasmacrosincorporadasViewForEachRecordType.jsouHeaderDetailFooterTabs.js(ausentesdealgumasversões)paraexibircadatipoderegistroemumaguiaseparada
  2. Escrevaseupróprio(possivelmenteadaptadodeViewForEachRecordType.js)

ExecuçãodeViewForEachRecordType.js

Isso gerará uma guia separada para cada tipo de registro no arquivo:

Outrapossibilidadepoderiaser Textplorer , eu não tentei por mim mesmo, mas parece que vai destacar os campos

    
por 19.01.2013 / 09:20
1

Você pode escrever um script para adicionar tags HTML para fazer a coloração. sed (funciona em linhas) e awk (funciona em colunas) pode ajudar, especialmente no linux. Ou um script perl. Você pode usar expressões regulares para fazer correspondência de padrões.

Você também precisará adicionar o código HTML mínimo para convertê-lo em um arquivo HTML (tags de cabeçalho e corpo).

    
por 15.10.2009 / 23:43
1

Vim! Comece com as instruções para alterar o destaque da sintaxe e faça o seu caminho a partir daí. Aqui está o que eu acho que você está dizendo:

  • Se uma linha começar com "A", ela terá uma série de 12 caracteres; um espaço; seis chars; alguns espaços; muitos chars
  • Se uma linha começar com "B", ela terá uma série de 14 caracteres;
  • Se uma linha começar com "C", ela terá 4 caracteres; alguns espaços; 4 chars

Assim, você pode definir definitivamente suas regras de destaque com base nesses requisitos.

    
por 22.12.2009 / 15:27
1

Eu perguntei sobre qual seria o uso pretendido de tal utilitário e com base em algumas palavras-chave ("ver e verificar antes de enviar") você basicamente quer fazer o seguinte:

  1. Verifique se o arquivo está no formato padrão com o número correto de colunas (e linhas, talvez)
  2. Forneça algumas estatísticas, como o número total de registros, o número total de itens vendidos, o período representado no arquivo, etc. etc.
  3. Salve o arquivo em um servidor central ou em uma área de espera para envio posterior.

O jeito certo de fazer isso, na minha opinião, (especialmente porque, como você diz, muitos clientes ainda têm mainframes e ainda obtêm dados em formatos como esse) é usar um front-end personalizado para obter as informações sobre o dados para o seu cliente.

A maneira de fazer isso? Você tem essencialmente duas opções: a) escreve um analisador de arquivos você mesmo em Java, C # ou C ++ (shudder) para fornecer uma 'visualização' dos dados contidos nos arquivos. Ou b) contratar um membro ou recém-formado (verifique uma carteira primeiro!) De aulas de programação de computadores para codificar um analisador para você. Ou o sobrinho do chefe, ou o namorado nerd da sua irmã, etc. Eu não sei que experiência ou interesse você tem em tal coisa, nem nada sobre o seu passado, então, por favor, me perdoe se estou fazendo suposições indevidas. Tal como acontece com tantas outras coisas no mundo da tecnologia, você pode ter dois de rápido, barato e bom.

O custo mais baixo e a opção mais rápida dos que foram apresentados até agora, que abrangem o leque de possibilidades que eu conheço como profissional de tecnologia, seria aprender o vim (use o GVim para Windows) e use filtros de destaque de sintaxe lá. Segundo, seria fazer uma série de scripts em algo como sed ou awk .

Como a entrada para o seu problema é essencialmente um fluxo de texto cortado em intervalos (as quebras de linha), o processamento dos dados tem que manipular a entrada da mesma maneira, e muito poucos programas fazem isso agora, porque, como você digamos, esses dados são gerados por um antigo programa de mainframe.

O Excel também pode ser útil na importação, mas todas as linhas precisam ser formatadas da mesma maneira, portanto, isso ainda não fará o que você deseja. Uma coisa adicional que vem à mente é que você pode usar o Access para analisar esse arquivo e usar algum VBA para criar contagens de registros e compilar estatísticas, mas, no que diz respeito à sobreposição de realces, isso seria menos fácil. Se você conhece algum desenvolvedor COBOL, este seria um ótimo projeto de uma a duas noites para um deles. Pode até se transformar em um projeto de código aberto em sourceforge.net para liberar dados das garras do mainframe!

    
por 23.12.2009 / 21:14
1

Acho improvável que você encontre uma solução que não envolva programação.

Qualquer editor de texto com recursos de realce de sintaxe mais sofisticados que a simples correspondência de palavra-chave será necessariamente mais complicado, como no Vim e no Emacs.

Para o Vim, você pode definir um arquivo de destaque como este:

syntax clear A B C

syntax match A /^A\%(\a\|\d\)\{13\} \d\{6\} \{5\}\S\+$/
syntax match B /^B\%(\a\|\d\)\{14\}$/
syntax match C /^C\%(\a\|\d\)\{4\} \{8\}\d\{4\}$/

highlight A guifg=darkgreen
highlight B guifg=darkblue
highlight C guifg=royalblue

e carregue-o com :source myhighlight.vim

As linhas serão destacadas quando estiverem corretas ou deixadas sem destaque se não corresponderem à expressão regular.

Fica mais complicado se você quiser destacar campos específicos dentro dessas linhas.

Pessoalmente, eu estaria procurando maneiras de invocar algum script do editor, que poderia fazer toda a verificação para mim. Dessa forma, você pode usar qualquer editor e não ser forçado a usar um que tenha a flexibilidade de destaque que você precisa.

    
por 19.01.2010 / 14:09
0

Se eu não fosse codificar um front-end para o arquivo, provavelmente usaria o Notepad ++, pois ele tem uma maneira de definir seu próprio idioma, completo com destaque.

Download / site principal

Tudo sobre a seção de idiomas definida pelo usuário

Outro exemplo / caminhada

Espero que isso ajude você a começar.

    
por 19.12.2009 / 02:23
0

Parece que suas colunas são delimitadas por espaço?

Você tentou apenas importá-los para o Excel e, em seguida, apenas aplicar cores / realces às colunas?

Se isso não for possível, então, como os outros dizem, provavelmente você está olhando para programação. Você provavelmente poderia escrever um Perl ou VBScript razoavelmente simples que pegaria esse arquivo de texto e produziria uma sintaxe destacada em um arquivo HTML ou similar usando algo como regexes para corresponder aos padrões que você está procurando?

    
por 19.01.2010 / 15:25
0

Você pode tentar algo como Monarch

    
por 19.01.2010 / 16:41
0

Eu tinha um requisito semelhante e encontrei a solução usando uma das amostras fornecidas nas telas ": sytanx help".

Abaixo está o arquivo simples de amostra com 2 registros do mesmo tipo. Aqui o cabeçalho do registro é "01", que é a primeira coluna. Após o registro do cabeçalho, há 4 colunas com tamanhos fixos, dadas abaixo:

+-----+-----+-----+-----+-----------------+
| No. | Beg | End | Size| Description     |
+-----+-----+-----+-----+-----------------+
|    1|    1|    2|    2|HEADER           |
|    2|    3|    7|    5|Column 2         |
|    2|    8|   11|    4|Column 3         |
|    2|   12|   15|    4|Column 4         |
|    2|   16|   17|    2|Column 5         |
+-----------------------------------------+

Registros de amostra:

01AAAAABBBBCCCCDD
01PPPPPQQQQRRRRSS

" Syntax definition and highlighting for Record 01
:sy region rec1 matchgroup=rec1 start="^01" end="$" contains=r1col1,r1col2,r1col3,r1col4 keepend
:hi rec1 ctermbg=red guibg=red

" Syntax definition and highlighting for next 4 columns from Record 01
:sy region r1col1 matchgroup=r1col1 start="\%3v" end="\%8v" contained
:sy region r1col2 matchgroup=r1col2 start="\%8v" end="\%12v" contained
:sy region r1col3 matchgroup=r1col3 start="\%12v" end="\%16v" contained
:sy region r1col4 matchgroup=r1col4 start="\%16v" end="\%18v" contained

" Highlighted alternate columns with same color
:hi r1col1 ctermbg=green ctermfg=black
:hi r1col2 ctermbg=green guibg=green
:hi r1col3 ctermbg=darkblue ctermfg=white
:hi r1col4 ctermbg=green ctermfg=black

Dessa forma, podemos definir "regiões" para mais registros (digamos, Record começa com "02") com números e larguras diferentes de colunas que podem ser apresentados no mesmo flatfile, mas serão destacados com base no cabeçalho do registro.

    
por 08.01.2013 / 06:54