質問
「CSVやExcelデータの列数が読み取り設定より少なかった場合にエラーを返すことはできますか」の設定をベースとして、列数が固定でなく可変の場合でも、エラーが存在する行を特定する設定は可能ですか。
回答
CSVやExcelデータの列数が読み取り設定で指定した列数よりも少ない場合で、かつ列数が固定でなく可変の場合でも、エラーが存在する行を特定することは可能です。
以下にサポートにて検証済みのスクリプト実装例をご紹介いたします。
あくまで一例となりますので、お客様のご要件に合わせて適宜ご調整ください。
■スクリプトの実装イメージ
■処理概要
・読み取ったデータ件数分処理を繰り返す(foreach)
・読み取ったデータに存在するカンマの個数をもとに、列数分処理を繰り返す(loop)
・空文字が含まれていた場合はCSVファイルに書き出し、全てのデータのチェック処理が終了したら、コミットする
■設定手順
1.「スクリプトの実装イメージ」を参考に、以下コンポーネントを配置する
・[可変長ファイル読み取り処理]
・[トランザクション処理]
・[繰り返し(データ件数)処理]
・[変数代入処理]※2つ配置
・[繰り返し処理]
・[条件分岐処理]
・[マッピング]
・[CSVファイル書き込み処理]
2.処理で使用するスクリプト変数を3つ作成する
例:row_data(文字列型)
result(真偽値型)
count_row_items(整数型)
3.[可変長ファイル読み取り処理]にて、「必須設定」を以下のとおり設定する
ファイル :参照先のパスを指定
デリミタモード :「文字コード入力」を選択
デリミタ文字 :「0x00」を入力
ダブルクォートエスケープ:「無効」を選択
フォーマット :作成した可変長読み取りフォーマット定義を選択
※「可変長ウィザードの起動...」を選択し、以下のように構造定義を設定する
4.[繰り返し(データ件数)処理]にて、「必須設定」の「1ループでの処理件数」に「1」を入力する
5.[変数代入処理](setRow)にて、以下の図のとおりロジックを配置し、マッピングリンクでつなぐ
・[正規表現置換]ロジック ※置換前文字列(正規表現パターン)に[^,]+を入力し、置換後文字列には何も入力しない
・[文字数]ロジック
・[足し算]ロジック ※入力数は「2」を選択
・[数値定数]ロジック ※数値に「1」を入力
6.[繰り返し処理]にて、「必須設定」の「繰り返し回数」に「${count_row_items}」を入力する
7.[変数代入処理](setResult)にて、以下の図のとおりロジックを配置し、マッピングリンクでつなぐ
・[含む]ロジック ※判定文字列に「,」を入力
・[指定文字より前]ロジック ※区切り文字列に「,」を入力
・[空文字の変換]ロジック
・[nullチェック]ロジック
・[条件判定による出力の切り替え]ロジック
※以下のとおり設定する
「条件」タブ
判定対象:1.contain Comma
判定方法:指定した値との比較
判定基準:~と等しい
判定内容:true
「成立時」タブ
出力方法:変数を出力
出力内容:2.before Comma
「不成立時」タブ
出力方法:変数を出力
出力内容:2.row_data
8.[条件分岐処理]にて、「変数 result が true と等しい」の条件を追加する
9.[マッピング](setRowColumn)にて、以下の図のとおりロジックを配置し、マッピングリンクでつなぐ
・[足し算]ロジック ※入力数は「2」を選択
・[数値定数]ロジック ※数値に「1」を入力
10.[CSVファイル書き込み処理]にて、以下のとおり設定する
・「必須設定」タブ
ファイル :出力先のパスを指定
デリミタモード:「一覧から選択」を選択
デリミタ文字 :「半角カンマ」を選択
列一覧 :「row」と「column」の列名を追加
・「書き込み設定」タブ
「上書き」、「追加書き込み」、「1列目に列名を挿入」、「ファイルが存在する場合は列名を挿入しない」
上記すべてにチェックを入れる
11.[変数代入処理](dropLeftRow)にて、以下の図のとおりロジックを配置し、マッピングリンクでつなぐ
・[指定文字より後]ロジック ※区切り文字列に「,」を入力
コメント
0件のコメント
記事コメントは受け付けていません。