4.13.8 CSVのデータ分割
機能
この部品は,CSV(Comma Separated Values)ファイルを,指定した行数のファイルに分割します。
また,列のフィルタ条件を指定することで,条件に一致する行だけを分割後のファイルへ出力することができます。
次の条件を満たすCSVファイルの分割をサポートします。
・1行目に列名が記載されていること。また,2行目以降が存在すること。分割後のそれぞれのファイルには1行目を列名としてコピーします。
・拡張子が"csv"のテキストファイルであること。
・改行コードはCR+LFまたはLFであること。
・文字コードはBOM (Byte Order Mark) 付きのUTF-8,またはShift-JISであること。なお,サポートされない文字コードを使用したCSVファイルを分割する場合は,あらかじめ文字コード変換部品を使用してください。
・CSVの区切り文字は「, (コンマ)」です。
・列名および2行目以降の各項目に「,」を含める場合,項目を「" (ダブルクォーテーション)」で囲ってください。なお,「,」を含んだ列名を指定してのフィルタはできません。列番号を指定してのフィルタは可能です。
この部品が前提とするサーバを次に示します。
・実行対象サーバ
この部品を実行する対象となるサーバです。
この部品内のスクリプトでは次に示す処理を行います。
この部品内のスクリプトではImport-CSVコマンドレットを使用して,次に示す処理を行います。
Import-CSVコマンドレットの詳細については,Microsoft のライブラリ内で記載している箇所を参照してください。
(1)ファイル名(common.fileNameプロパティ)に指定された入力ファイルから一時ファイル(通番0)※へコピーします。
(2)フィルタ処理する列のリスト(csv.filterColumnListプロパティ)が指定されている場合,列のリストごとに列データのフィルタ条件(csv.filterColumnString1〜10プロパティ)と比較して致する行だけ抽出します。抽出後,一時ファイル(通番0)※として上書き保存します。
(3)一時ファイル(通番0)※から分割後のファイル(通番1以降)※へ,分割する行数(common.divideLineCountプロパティ)に指定された行数ずつコピーして保存します。
※分割後のファイルは下記を連結した名称になります。
・ファイル出力先フォルダパス(common.outputFolderPathプロパティ)の値
・フォルダの区切り文字「¥」
・ファイルの接頭辞(common.filePrefixプロパティ)の値
・繰り返し実行部品用の文字列(分割後のファイル名の通番)(common.loopInputPropertiesプロパティ)の各数字
・「.csv」
分割後のCSVファイルフォーマットは次の通りです。
・出力されるCSVファイルは, 「, (コンマ) 」で区切られて出力されます。列名は「"(ダブルクォーテーション)」で囲われて出力され,2行目以降の各項目は,数値型データ整数または小数以外の場合,「"(ダブルクォーテーション)」で囲われて出力されます。
数値型データとは次の形式の文字列のことです。
符号付き整数値(10進数) 例:-12345
固定小数点数(10進数) 例:3.1415
浮動小数点数(10進数) 例:6.543E+10
・改行コードはCR+LFです。
・文字コードは,読み込み時に指定されたものが使用されます。
・CSVファイルの読み込み時にCSVファイルの構造が解析できないなどでエラーが発生した場合や,行数が1行以下CSVファイルであった場合,一時ファイル(通番0)は分割対象のファイルをコピーしたものとなります。
・ファイル出力先フォルダパス(common.outputFolderPathプロパティ)に指定したフォルダが存在しない場合はフォルダを作成し,その配下に分割後のファイルを出力します。なお,分割後のファイルと同名のファイルが既に存在する場合は上書きします。
利用場面
繰り返し実行部品を使用してCSVファイルの各行に入力された値を処理する際に,この部品を使ってCSVファイルを分割することで,繰り返し実行部品の繰り返し上限を超える行数を処理することができます。
また,任意の列のフィルタ条件を指定することによって,特定の条件に一致した行だけを抽出して処理することができます。
同等の機能を実現する部品として,CSV・Excelのデータ分割部品がありますが,Microsoft Excelを使用できない環境で使用できます。
読み書きしたいCSVファイルのエンコーディングが,CSVのデータ分割部品の想定するフォーマットに合致しない場合,文字コード変換部品でファイルのエンコーディングを変更することを検討してください。
前提条件
【実行対象サーバ内前提製品】/【実行対象サーバの稼働OS】の最新のサポート状況については,リリースノートを参照してください。
また、OSおよび製品について略称を用いています。対象とするOSおよび製品については「はじめに」を参照してください。
【実行対象サーバ内前提製品】
なし。
【実行対象サーバの稼働OS】
(1) Windows Server
【実行対象サーバの使用条件】
なし。
注意事項
(1)この部品のプロパティには「"(ダブルクォーテーション)」および「'(シングルクォーテーション)」を含む文字列は指定しないでください。また,この部品のフィルタ条件のプロパティには「,(コンマ)」および改行を含む文字列は指定しないでください。
(2)フィルタ条件に一致する行が存在しない場合,分割後のファイルは作成されません。
(3)フィルタ条件に一致する行が存在しないなどの理由によって分割後のファイルが作成されなかった場合,繰り返し実行部品用の文字列(分割後のファイル名の通番)(common.loopInputPropertiesプロパティ)は空白になります。そのため,このプロパティをそのまま繰り返し実行部品に渡した場合,繰り返し実行部品が異常終了します。
(4)ファイルの接頭辞(common.filePrefixプロパティ)には次の文字を使用できません。
「<」「>」「?」「[」「]」「:」「|」「*」
(5)分割する行数(common.divideLineCount プロパティ)には1から65535の整数値を指定してください。 0以下または65536 以上の値を指定した場合,この部品が異常終了します。
(6)ヘッダの指定種別(csv.isNumericHeader プロパティ)を指定しない場合は,「FALSE」を指定した場合と同じ動作になります。
(7)列名に「,,」や「,<スペースのみ>,」や「,"",」といったものがある場合,これらは任意の文字列に置き換えられます。この列名を指定してのフィルタ,および列番号を指定してのフィルタはいずれもできません。
(8)列名および2行目以降の各項目で、「"(ダブルクォーテーション)」が指定できるのは、先頭と末尾だけです。CSVファイルの行の先頭または末尾,および列名の各項目の先頭または末尾にタブは設定できません。
(9)この部品のプロパティに,隠しファイルを指定することはできません。
実行権限
Administrator権限
バージョン
03.60.01
部品のタグ
Control OS,File Operations,Windows
タスクログに表示される部品の名称
osDivideCSVFile
戻り値
戻り値 |
説明 |
---|---|
0 |
正常 |
12 |
異常(ユーザーミス) プロパティ不正 |
27 |
異常(エラー内容はタスクログで確認) |
41 |
異常(部品内でエラーを検知) プロパティ未入力(部品スクリプトでエラーを検知) |
プロパティ一覧
プロパティ一覧を次の表に示します。
プロパティキー |
プロパティ名 |
説明 |
デフォルト値 |
入出力種別 |
必須区分 |
---|---|---|---|---|---|
plugin.destinationHost |
実行対象サーバのホスト名 |
この部品を実行するサーバのホスト名またはIPアドレスを指定します。IPv6アドレスには対応していません。 |
− |
入力 |
○ |
common.fileName |
ファイル名 |
分割対象のCSVファイルをフルパスで指定します。 |
− |
入力 |
○ |
common.characterEncoding |
文字エンコード種別 |
分割対象のCSVファイルのエンコード種別を指定します。指定可能なエンコード種別はDEFAULT,または,UTF-8です。Shift-JISを使用する場合はDEFAULTを指定します。 |
DEFAULT |
入力 |
△ |
common.outputFolderPath |
ファイル出力先フォルダパス |
分割後のファイルを出力するフォルダをフルパスで指定します。 |
− |
入力 |
○ |
common.filePrefix |
ファイルの接頭辞 |
分割後のファイルの接頭辞を指定します。 |
− |
入力 |
○ |
common.divideLineCount |
分割する行数 |
分割後のファイルの行数(ヘッダを除く)を半角数字で指定します。 |
− |
入力 |
○ |
csv.isNumericHeader |
ヘッダの指定種別 |
フィルタ処理する列を番号で指定する場合,TRUEを指定します。列名(文字列)で指定する場合,FALSEを指定します。 |
True |
入力 |
△ |
csv.filterColumnList |
フィルタ処理する列のリスト |
フィルタ処理する列の番号,または列名(文字列)をコンマ区切りで指定します。列の番号(または列名)は10件まで指定できます。 |
− |
入力 |
△ |
csv.filterColumnString1 |
列データのフィルタ条件1 |
csv.filterColumnListに指定した1番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString2 |
列データのフィルタ条件2 |
csv.filterColumnListに指定した2番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString3 |
列データのフィルタ条件3 |
csv.filterColumnListに指定した3番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString4 |
列データのフィルタ条件4 |
csv.filterColumnListに指定した4番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString5 |
列データのフィルタ条件5 |
csv.filterColumnListに指定した5番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString6 |
列データのフィルタ条件6 |
csv.filterColumnListに指定した6番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString7 |
列データのフィルタ条件7 |
csv.filterColumnListに指定した7番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString8 |
列データのフィルタ条件8 |
csv.filterColumnListに指定した8番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString9 |
列データのフィルタ条件9 |
csv.filterColumnListに指定した9番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
csv.filterColumnString10 |
列データのフィルタ条件10 |
csv.filterColumnListに指定した10番目の列に適用するフィルタの正規表現を指定します。 |
− |
入力 |
△ |
common.loopInputProperties |
繰り返し実行部品用の文字列(分割後のファイル名の通番) |
分割後のファイル名の通番が,1以降のコンマ区切りの数字で格納されます。このプロパティを繰り返し実行部品に渡すことで,分割されたそれぞれのファイルを処理できます。 |
− |
出力 |
△ |
common.fileExtension |
ファイルの拡張子 |
分割後のファイルの拡張子(先頭に「.」を含む)が格納されます。 |
− |
出力 |
△ |
common.returnValue |
部品の戻り値 |
この部品の戻り値が格納されます。 |
− |
出力 |
△ |