jq コマンドで CSV を JSON形式のデータに変換
簡単なサンプル
type in.csv | jq-win64.exe -R -f mapping.jq>out.json
mapping.jq
split(“,")|
{“KeyType":.[0],
“DisplayText":.[1],
“FontSize":.[2],
“Position": {
“X": .[3],
“Y": .[4],
“Width": .[5],
“Height": .[6]
},}
in.csv
PageUp,ページ↑,12,0,100,50,50
PageDown,ページ↓,12,0,150,50,50out.json
{ "KeyType": "PageUp", "DisplayText": "ページ↑", "FontSize": "12", "Position": { "X": "0", "Y": "100", "Width": "50", "Height": "50" } } { "KeyType": "PageDown", "DisplayText": "ページ↓", "FontSize": "12", "Position": { "X": "0", "Y": "150", "Width": "50", "Height": "50" } }CSV ファイルはUTF 8でBom なし保存。。。なぜか出力ファイルにカンマが入りません
「ちーたんタッチボード」の設定ファイルを作るサンプルです
「ちーたんタッチボード」
set outf=a.json
set mappingi=mappingi
set mappingt=mappingt
set mappingp=mappingp
set Width=50
set Height=300
echo { > %outf%
echo  "IdentityName": "171_tate_1_1_01", >> %outf%
echo  "Author": "eightban", >> %outf%
echo  "Version": 1, >> %outf%
echo  "KeyReleaseTimingWhenActiveWindowChange": "Window", >> %outf%
echo  "GeneratorIdentityName": "none", >> %outf%
echo  "GeneratorVersion": 1.0, >> %outf%
echo  "Boards": [ >> %outf%
echo   { >> %outf%
echo    "Keys": [ >> %outf%
type %mappingi%.csv|jq-win64.exe -R -c -f %mappingi%.jq>>%outf%
type %mappingt%.csv|jq-win64.exe -R -c -f %mappingt%.jq>>%outf%
type %mappingp%.csv|jq-win64.exe -R -c -f %mappingp%.jq>>%outf%
echo   {} >> %outf%
echo    ], >> %outf%
echo    "IdentityName": "tate_1", >> %outf%
echo    "Position": { >> %outf%
echo     "X": 0, >> %outf%
echo     "Y": 0, >> %outf%
echo     "Width": %Width%, >> %outf%
echo     "Height": %Height% >> %outf%
echo    }, >> %outf%
echo    "StartPositionType": "TopLeft", >> %outf%
echo    "PositionOffset": { >> %outf%
echo     "X": 0, >> %outf%
echo     "Y": 0 >> %outf%
echo    }, >> %outf%
echo    "CenterPosition": { >> %outf%
echo     "X": 0, >> %outf%
echo     "Y": 0 >> %outf%
echo    }, >> %outf%
echo    "FontSizeScale": 0.9, >> %outf%
echo    "BoardScale": 1 >> %outf%
echo   } >> %outf%
echo  ] >> %outf%
echo } >> %outf%
powershell -Command "(Get-Content -Path '%outf%' -Encoding utf8 ) -replace '}}','}},'   | Out-File '%outf%.wk' -Encoding utf8 "
powershell -Command "(Get-Content -Path '%outf%.wk' -Encoding utf8 ) -replace '}]}','}]},'   | Out-File '%outf%' -Encoding utf8 "
type %outf%|jq-win64.exe >%outf%.wk
type %outf%.wk>%outf%
del %outf%.wk
powershell でカンマを入れています。最後に見やすいように整形しています。mappingi.jq
split(“,")|
{“KeyType":.[0],
“ImageName":.[1],
“ImageStretchMode":.[2],
“Position": {
“X": .[3] | tonumber,
“Y": .[4] | tonumber,
“Width": .[5] | tonumber,
“Height": .[6] | tonumber
},
}
mappingi.csv
BoardMove,BoardMove,Uniform,0,0,50,50
ConfigMenu,Config,Uniform,0,50,50,50
mappingt.jq
split(“,")|
{“KeyType":.[0],
“DisplayText":.[1],
“FontSize":.[2],
“Position": {
“X": .[3],
“Y": .[4],
“Width": .[5],
“Height": .[6]
},
}
mappingt.csv
PageUp,ページ↑,12,0,100,50,50
PageDown,ページ↓,12,0,150,50,50
mappingp.jq
split(“,")|
{“KeyType":.[0],
“DisplayText":.[1],
“FontSize":.[2],
“Position": {
“X": .[3],
“Y": .[4],
“Width": .[5],
“Height": .[6]
},
“Processes": [
{
“KeyType": .[7]
},
{
“KeyType": .[8]
}
]
}
mappingp.csv
CtrlC,コピー,12,0,200,50,50,LeftCtrl,C
CtrlV,貼付,12,0,250,50,50,LeftCtrl,V
結果
{
  "IdentityName": "171_tate_1_1_01",
  "Author": "eightban",
  "Version": 1,
  "KeyReleaseTimingWhenActiveWindowChange": "Window",
  "GeneratorIdentityName": "none",
  "GeneratorVersion": 1,
  "Boards": [
    {
      "Keys": [
        {
          "KeyType": "BoardMove",
          "ImageName": "BoardMove",
          "ImageStretchMode": "UniformToFill",
          "Position": {
            "X": 0,
            "Y": 0,
            "Width": 50,
            "Height": 50
          }
        },
        {
          "KeyType": "ConfigMenu",
          "ImageName": "Config",
          "ImageStretchMode": "UniformToFill",
          "Position": {
            "X": 0,
            "Y": 50,
            "Width": 50,
            "Height": 50
          }
        },
        {
          "KeyType": "PageUp",
          "DisplayText": "ページ↑",
          "FontSize": "12",
          "Position": {
            "X": "0",
            "Y": "100",
            "Width": "50",
            "Height": "50"
          }
        },
        {
          "KeyType": "PageDown",
          "DisplayText": "ページ↓",
          "FontSize": "12",
          "Position": {
            "X": "0",
            "Y": "150",
            "Width": "50",
            "Height": "50"
          }
        },
        {
          "KeyType": "CtrlC",
          "DisplayText": "コピー",
          "FontSize": "12",
          "Position": {
            "X": "0",
            "Y": "200",
            "Width": "50",
            "Height": "50"
          },
          "Processes": [
            {
              "KeyType": "LeftCtrl"
            },
            {
              "KeyType": "C"
            }
          ]
        },
        {
          "KeyType": "CtrlV",
          "DisplayText": "貼付",
          "FontSize": "12",
          "Position": {
            "X": "0",
            "Y": "250",
            "Width": "50",
            "Height": "50"
          },
          "Processes": [
            {
              "KeyType": "LeftCtrl"
            },
            {
              "KeyType": "V"
            }
          ]
        },
        {}
      ],
      "IdentityName": "tate_1",
      "Position": {
        "X": 0,
        "Y": 0,
        "Width": 50,
        "Height": 300
      },
      "StartPositionType": "TopLeft",
      "PositionOffset": {
        "X": 0,
        "Y": 0
      },
      "CenterPosition": {
        "X": 0,
        "Y": 0
      },
      "FontSizeScale": 0.9,
      "BoardScale": 1
    }
  ]
}








ディスカッション
コメント一覧
まだ、コメントがありません