Пакет Windows для чтения TXT и анализа строк в JSON

1921
Koen De Couck

Я добился значительных успехов в поиске на этом сайте и изучении нелепого языка - пакетного скриптинга Windows, но, честно говоря, я застрял. Пример ниже взят из старого модуля нашей лаборатории радиометра, который регулярно записывает свои данные в виде файлов TXT. Я пытаюсь разобрать их в правильный JSON. Идея состоит в том, чтобы иметь .bat-файл, который может периодически запускаться для изменения всех журналов TXT в определенной папке в формат JSON.

Некоторые из причин, по которым у меня возникают проблемы: длинный заголовок, нерелевантные «PRODUCES» или «MFRSR» в заголовке, нерелевантные единицы в заголовке, несогласованные разделители между значениями, странное значение «* 5» для нуля (который может быть просто нулем в этом случае) и тот факт, что данные содержат на 3 столбца больше, чем заголовок (первые 3 значения на самом деле являются старой нотацией электронной таблицы для времени).

*.текст:

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

Здесь есть кто-нибудь, кто знает партию и может начать меня?

1
Сделав небольшой анализ текста в пакетном режиме, я настоятельно рекомендую выбрать другой язык для вашего собственного здравомыслия. Кроме того, хотя этот пример является допустимым JavaScript, он не является допустимым JSON. grawity 9 лет назад 1
Я должен согласиться. Вы можете обмануть пакетную обработку текста, но это никогда не бывает весело. Я бы предложил AWK в качестве возможного инструмента для обработки этого. GuitarPicker 9 лет назад 0
Спасибо, парни. Ммм, я так же взволнован, чтобы посмотреть на AWK, как Бэтч. Как насчет упрощенной версии задачи, когда он просто удаляет весь заголовок, заменяет пробелы для вкладок, заменяет вкладки на запятые и, наконец, удаляет все двойные запятые? Могу ли я сделать что-то подобное в пакетном режиме? Koen De Couck 9 лет назад 0
Редактировать: открыл новый вопрос для (более простой?) Реализации CSV: http://superuser.com/questions/899834/windows-batch-to-read-txt-and-parse-lines-to-csv Koen De Couck 9 лет назад 0
Не используйте пакет для этого, ради здравомыслия. Journeyman Geek 9 лет назад 0

1 ответ на вопрос

0
STTR

powershell V4:

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

powershell V4,V3:

Using PowerShell for dynamic JSON parsing

ConvertTo-Json

powershell V2:

Read Json Object in Powershell 2.0

But in general, I think that you can get the data in xml with weather station ...