# 操作説明
## 機能一覧
本ツールは、MANUFCIAで読み込めるフォーマットに変換するという機能に加え、以下のような、入力データそのものを加工する機能も備えています。
| 機能 | 概要 |
|:-------------------------------------------|:-----------------------------------|
| [ツール情報表示](#show-version) | ツールのバージョンを表示します。 |
| [フォーマットチェック](#format-check) | CSVファイルのフォーマットをチェックし、結果をログに出力します。 |
| [フォーマット修正](#correct-format) | フォーマットチェックでのエラー情報を元に、読込できるフォーマットに修正します。
エラー内容のみログに出力します。 |
| データ加工:[ファイル分割](#divide-file) | 一つのファイルを指定行サイズに分割します。 |
| データ加工:[行データ抽出](#extract-rows) | 指定した行数でファイルを切り取ります。 |
| データ加工:[列データ抽出](#extract-columns) | 指定した列数でファイルを切り取ります。 |
| データ加工:[データ間引き](#thin-out-data) | 指定した間隔でデータを間引きます。 |
| データ加工:[行列入替](#swap-rows-columns) | 行と列の要素を入れ替えます。 |
| データ加工:[ヘッダー行書き換え](#replace-header-line) | CSVファイルのヘッダー行を書き換えます。 |
以下は、単独では使えませんが上記の機能と組み合わせて使用するオプションです。
| 追加機能 | 概要 |
|:---------------------------------------|:--------------------------------------------|
| [入力データパス指定](#input-data-path) | 入力データのあるパスを指定します。 |
| [時間データの再構築](#rebuild-time-data) | データ加工の際に時間データを1から付け直します。|
| [データ加工の強制](#force-process) | エラーを無視してデータ加工を行います。 |
```{important}
1. データ加工は正しいフォーマットのCSVファイルに対してのみ行われますので、まずはフォーマット変換を行った後でデータ加工を行ってください。
2. ログファイルやフォーマット変換データ加工済みCSV データは、オリジナルのCSVファイルと同じディレクトリに出力されます。
3. データ加工は一度に実行できるのは一つだけです。複数の機能が指定されている場合には、最初に指定した加工のみを実行します。
```
## 機能詳細
(show-version)=
### ツール情報表示
```
csv_checker -i
```
本ツールに関する以下の情報を表示します。
- バージョン
- 初期設定値
(format-check)=
### フォーマットチェック
```
csv_checker
```
カレントディレクトリの入力ファイルをチェックします。パスを指定したい場合は、[```-p```オプション](#input-data-path)を使ってください。
フォーマットの判定結果は以下のようにログ出力されます。
```{list-table} フォーマットチェック判定一覧
:header-rows: 1
:widths: 1 5
* - 判定
- 詳細
* - OK(正常)
- ・データの1行目のみにヘッダーコメントが入っていること
・値がカンマ(",")で区切られていること
・ファイルのエンコードはUTF-8であること
* - Error1
- 複数行にコメントがある
* - Error2
- 複数ファイルでコメントが異なる
* - Error3
- データの区切り文字がセミコロン(";")
* - Error4
- データの区切り文字がスペースまたはタブ
* - Error5
- データがダブルクオート(“”)やシングルクオート(‘’)でくくられている
* - Error6
- 値の前後にスペースがある
* - Error7
- 値に全角文字が使用されている
* - Error8
- 数字以外の文字が使われている
* - Error9
- 値がNULLまたはスペース
* - Error10
- BOM(EF,BB,BF)が付与されている
* - Error11
- ファイルがUTF-8以外のエンコード
* - Error12
- スラッシュが使用されている
* - undefined
- 上記以外のエラー(ヘッダー行なし、データ行に全角文字、データ行が存在しないなど)
```
(correct-format)=
### フォーマット修正
```
csv_checker -c
```
フォーマットチェックの判定結果でエラーと認識されたデータを、MANUFACIAが読込できるものに修正します。変換内容は以下の表に示す通りです。
```{list-table} フォーマット変換によるデータ修正内容
:header-rows: 1
:widths: 1 5
* - エラー番号
- 変更内容
* - Error1
- 最終行のコメントのみを残して後は削除する
* - Error2
- 変換しない
* - Error3
- 区切り文字をカンマ(",")に変更する (ヘッダー行のみ)
* - Error4
- 区切り文字をカンマ(",")に変更する (ヘッダー行のみ)
* - Error5
- ダブルクオート、シングルクオートを削除する
* - Error6
- スペースを削除する
* - Error7
- 半角に変換する
* - Error8
- 変換なし
* - Error9
- 0を挿入する
* - Error10
- BOM(3バイト)を削除する
* - Error11
- エンコードをUTF-8に変更する(入力ファイルがSHIFT-JISエンコードの時のみ)
* - Error12
- スラッシュを削除する
* - undefined
- 変更なし
```
### データ加工
以下のデータ加工は、CSVチェッカーの起動時にオプションを与えて実行します。同時に複数のデータ加工の指示はできません。行番号、列番号はそれぞれ1から始まります。
(divide-file)=
#### ファイル分割
```
csv_checker -d
```
<num>で指定した行数の単位で、コメント行を除くデータ行を分割します。コメント行は全てのファイルの1行目にコピーされます。
(extract-rows)=
#### 行データ抽出
```
csv_checker -e
```
<start>でデータの抽出開始行、<end>で抽出終了行を指定し、元のCSVファイルから指定領域のデータを抽出します。オプションで指定する開始行番号<start>にコメント行を指定することはできません。抽出終了行<end>が指定されない場合にはファイルの最終行までを抽出します。
コメント行は全てのファイルの1行目にコピーされます。
(extract-columns)=
#### 列データ抽出
```
csv_checker -r
```
<start>でデータの抽出開始列、<end>で抽出終了列を指定し、元のCSVファイルから指定領域のデータを抽出します。CSVファイルに存在する列よりも大きな列が指定された場合には、ログにエラーを出力します。
(thin-out-data)=
#### データ間引き
```
csv_checker -t
```
データ開始行の先頭(2行目)からファイルの終わりまで、<interval>で指定した行を間引きます。
```{admonition} データ間引き(-tオプション)例
intervalが3の時には()内の行が間引かれます。{ヘッダー行, 1, 2, (3), 4, 5, (6), 7, 8, (9), ...}
```
(swap-rows-columns)=
#### 行列入替
```
csv_checker -s
```
データの行と列の入れ替えを行います。入れ替えはコメント行も含みます。
(replace-header-line)=
#### ヘッダー行書き換え
```
csv_checker -h
```
同じディレクトリ内にheader.txtがある場合に、入力CSVファイルのコメントを、header.txt内で指定されたヘッダー行を置き換えます。header.txtに記載するコメントの列数はデータ領域の列数と同じでなければなりません。header.txt内に複数行が定義されていても1行目のみ使用されます。
以下の場合は、ヘッダー行の書き換えは実施されません。
- header.txtがカレントディレクトリに存在しない。
- ヘッダー行が一行目に定義されていない。(ファイルの一行目が空行の場合)
- header.txtにヘッダー行が定義されていない。
### 追加オプション
追加オプションは、単体では使用せず、他の加工オプションと組み合わせて使用します。
(input-data-path)=
#### 入力データパス指定
```
csv_checker ........ -p
```
<path>に、相対パス、もしくは絶対パスを指定します。パス名が空白を含む場合には、パス全体を””で括ってください。
(rebuild-time-data)=
#### 時間データの再構築
```
csv_checker ........ -o
```
このオプションは、データ加工オプションのファイル分割(-d)、行データ抽出(-t)、データ間引き(-e)と組み合わせて使用します。
出力データの時間データを、元のファイルの時間データではなく、データ行の先頭から1より始まる時間に置き換えます。
1列目のデータが時間データであることを想定していますので、そうでない場合には正しく変換が行われません。
(force-process)=
#### データ加工の強制
```
csv_checker ........ -f
```
フォーマットチェックでエラー(Error2,Error8,undefinedなど)を検出した場合、通常はフォーマット変換で正しいフォーマットに変換しない限りデータ加工を行うことはできませんが、それを強制するためのオプションです。その場合、エラーがある部分は内容に変更を加えずに処理を実行します。