Windows Batch để đọc các dòng văn bản và phân tích cú pháp thành JSON


1

Tôi đã thực hiện rất nhiều bước đầu bằng cách tìm kiếm trang web này và học ngôn ngữ lố bịch đó là kịch bản hàng loạt Windows, nhưng thật lòng mà nói tôi bị mắc kẹt. Mẫu dưới đây là từ mô-đun đo phóng xạ cũ của phòng thí nghiệm của chúng tôi, thường xuyên ghi dữ liệu của nó dưới dạng tệp TXT. Tôi đang cố phân tích chúng thành JSON thích hợp. Ý tưởng là để có một tệp .bat có thể chạy định kỳ để thay đổi tất cả các bản ghi TXT trong một thư mục nhất định sang định dạng JSON.

Một số lý do tôi gặp sự cố là: tiêu đề dài, 'SẢN PHẨM' hoặc 'MFRSR' không liên quan trong tiêu đề, các đơn vị không liên quan trong tiêu đề, phân tách không nhất quán giữa các giá trị, giá trị lạ '* 5' cho null (có thể chỉ bằng 0 trong trường hợp này) và thực tế là dữ liệu chứa thêm 3 cột sau đó là tiêu đề (3 giá trị đầu tiên trên thực tế là một ký hiệu bảng tính cũ theo thời gian).

* .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
};

Có ai ở đây biết lô và có thể giúp tôi bắt đầu không?


1
Sau khi thực hiện một chút phân tích cú pháp văn bản, tôi thực sự khuyên bạn nên chọn một ngôn ngữ khác cho sự tỉnh táo của riêng bạn. Ngoài ra, trong khi ví dụ đó là JavaScript hợp lệ, nó không phải là JSON hợp lệ.
grawity

Tôi phải đồng ý. Bạn có thể lừa hàng loạt để thực hiện một số xử lý văn bản, nhưng nó không bao giờ vui. Tôi sẽ đề nghị AWK như một công cụ có thể để xử lý việc này.
GuitarPicker

Cảm ơn các bạn. Mm, tôi rất vui mừng khi nhìn vào AWK như Batch. Làm thế nào về một phiên bản đơn giản hóa của vấn đề khi nó chỉ xóa toàn bộ tiêu đề, thay thế khoảng trắng cho các tab, thay thế các tab cho dấu phẩy và cuối cùng xóa tất cả dấu phẩy kép? Tôi có thể làm điều gì đó như thế trong Batch không?
Koen De Couck

Chỉnh sửa: Đã mở ra một câu hỏi mới cho việc triển khai csv (đơn giản hơn?): superuser.com/questions/899834/
Koen De Couck

Đừng sử dụng hàng loạt cho việc này, vì lợi ích của sự tỉnh táo.
Journeyman Geek

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.