Windows Batch para ler TXT e analisar linhas no JSON

1

Eu fiz bastante progresso pesquisando neste site e aprendendo a linguagem ridícula que é o script em lote do Windows, mas francamente estou preso. A amostra abaixo é do antigo módulo de radiômetro do nosso laboratório que registra regularmente seus dados como arquivos TXT. Eu estou tentando analisá-los em JSON adequado. A idéia é ter um arquivo .bat que possa ser executado periodicamente para alterar todos os registros TXT em uma determinada pasta para o formato JSON.

Algumas das razões pelas quais estou tendo problemas são: o cabeçalho longo, o irrelevante 'PRODUCES' ou 'MFRSR' no cabeçalho, as unidades irrelevantes no cabeçalho, os separadores inconsistentes entre valores, o estranho '* 5' valor para null (que pode ser zero neste caso) e o fato de que os dados contém mais 3 colunas que o cabeçalho (os 3 primeiros valores são de fato uma notação antiga de planilha para o tempo).

*. txt:

PRODUCES
    MFRSR Detector Temp ,  degC
    HTR V ,  V
    MFRSR Thermopile Total ,  W/m^2
    MFRSR 414.0nm Total ,  (W/m^2)/nm
    MFRSR 496.6nm Total ,  (W/m^2)/nm
    MFRSR 613.0nm Total ,  (W/m^2)/nm
    MFRSR 670.9nm Total ,  (W/m^2)/nm
    MFRSR 869.3nm Total ,  (W/m^2)/nm
    MFRSR 937.6nm Total ,  (W/m^2)/nm
    MFRSR Thermopile Diffuse ,  W/m^2
    MFRSR 414.0nm Diffuse ,  (W/m^2)/nm
    MFRSR 496.6nm Diffuse ,  (W/m^2)/nm
    MFRSR 613.0nm Diffuse ,  (W/m^2)/nm
    MFRSR 670.9nm Diffuse ,  (W/m^2)/nm
    MFRSR 869.3nm Diffuse ,  (W/m^2)/nm
    MFRSR 937.6nm Diffuse ,  (W/m^2)/nm
    MFRSR Thermopile DirNorm ,  W/m^2
    MFRSR 414.0nm DirNorm ,  (W/m^2)/nm
    MFRSR 496.6nm DirNorm ,  (W/m^2)/nm
    MFRSR 613.0nm DirNorm ,  (W/m^2)/nm
    MFRSR 670.9nm DirNorm ,  (W/m^2)/nm
    MFRSR 869.3nm DirNorm ,  (W/m^2)/nm
    MFRSR 937.6nm DirNorm ,  (W/m^2)/nm

    42099   0.29236 -0.55603     45.20     7.4819          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5          *5
    42099   0.57222 0.01180  45.20     7.8285      0.9378      0.0086      0.0086      0.0032      0.0040      0.0018      0.0005      0.9473      0.0093      0.0086      0.0032      0.0040      0.0018      0.0005     -0.8090      0.0000      0.0000      0.0000      0.0000      0.0000      0.0000
    42099   0.57291 0.01415  45.20     7.8382      1.3587      0.0093      0.0086      0.0032      0.0040      0.0018      0.0005      1.3725      0.0093      0.0086      0.0032      0.0040      0.0023      0.0005     -0.9770      0.0000      0.0000      0.0000      0.0000      0.0000      0.0000
    42099   0.57361 0.01656  45.20     7.8998      2.6372      0.0099      0.0100      0.0032      0.0040      0.0023      0.0005      2.6641      0.0099      0.0100      0.0032      0.0040      0.0023      0.0005     -1.6210      0.0000      0.0000      0.0000      0.0000      0.0000      0.0000

*. json:

PRODUCES1 = {
        Id: 42099029236
        X: -0.55603        
        DetectorTemp: 45.20,
        HTRV: 7.4819,
        ThermopileTotal: 0.0000,
        414Total: 0.0000,
        496Total: 0.0000,
        613Total: 0.0000,
        670Total: 0.0000,
        869Total: 0.0000,
        937Total: 0.0000,
        ThermopileDiffuse: 0.0000,
        414Diffuse: 0.0000,
        496Diffuse: 0.0000,
        613Diffuse: 0.0000,
        670Diffuse: 0.0000,
        869Diffuse: 0.0000,
        937Diffuse: 0.0000,
        ThermopileDirNorm: 0.0000,
        414DirNorm: 0.0000,
        496DirNorm: 0.0000,
        613DirNorm: 0.0000,
        670DirNorm: 0.0000,
        869DirNorm: 0.0000,
        937DirNorm: 0.0000
};
PRODUCES2 = {
        Id: 42099057222 
        X: -0.55603        
        DetectorTemp: 45.20,
        HTRV: 7.8285,
        ThermopileTotal: 0.9378,
        414Total: 0.0086,
        496Total: 0.0086,
        613Total: 0.0032,
        670Total: 0.0040,
        869Total: 0.0018,
        937Total: 0.0005,
        ThermopileDiffuse: 0.9473,
        414Diffuse: 0.0093,
        496Diffuse: 0.0086,
        613Diffuse: 0.0032,
        670Diffuse: 0.0040,
        869Diffuse: 0.0018,
        937Diffuse: 0.0005,
        ThermopileDirNorm: -0.8090,
        414DirNorm: 0.0000,
        496DirNorm: 0.0000,
        613DirNorm: 0.0000,
        670DirNorm: 0.0000,
        869DirNorm: 0.0000,
        937DirNorm: 0.0000
};

Existe alguém aqui que sabe lote e pode me começar?

    
por Koen De Couck 09.04.2015 / 23:15

1 resposta

0

PowerShell V4:

gc .\data.csv | ConvertTo-Json | sc .\data.json

powershell V4, V3:

Usando o PowerShell para análise dinâmica de JSON

ConvertTo-Json

PowerShell V2:

Leia o Json Object no Powershell 2.0

Mas, em geral, acho que você pode obter os dados em xml com a estação meteorológica ...

    
por 10.04.2015 / 04:17