- ヘッダー レコード用とデータ レコード用など、さまざまな定義に対してさまざまな行を検証できますか。
はい。通常、getHeader()
CellProcessors を使用しない でヘッダーを読み取りますが、CellProcessors を使用してヘッダーを通常の行として読み取ることを妨げるものは何もありませんread()
。への呼び出しごとread()
に CellProcessors を渡すことができるため、3 つの異なる CellProcessor 配列を使用して、ヘッダー、データ行、およびチェックサムを異なる方法で処理/検証できます。
- 区切り文字 (この場合はパイプ '|') を行末に追加する必要があることを検証できますか?
区切り文字として使用|
しているため、最後の列は空の列 ( ) として扱われますnull
。これは、ヘッダーを読み取るための CellProcessor 配列に 4 つの要素 (またはデータ行の場合は 6 つ) が必要であることを意味します。そうしないと、列の数がセル プロセッサの数と一致しないという例外が発生します。プロセッサnew Equals(null)
を最後に配置することで、行が . で終わっていることを本質的に検証できます|
。
- 16 進値を検証する CellProcessor はありますか、または誰かが書いていますか?
既存のセル プロセッサnew StrRegex("[0-9A-F]+")
を使用して、正規表現を使用して検証できます。StrRegex.registerMessage()を使用して、検証エラー (「有効な 16 進値ではありません」など) に対して人間が判読できるメッセージを登録することもできます。
16 進数を数値として解析する場合 (おそらくそうではありませんが、念のため)、ParseHex
Super CSV には既存の CellProcessor がありません。パッチを作成して提出していただければ、次のリリースに含めます。数値の大きさによっては、ParseLongを更新して、基数 (この場合は 16) を受け入れる別のコンストラクターを使用するのが最善でしょうか?
物事をシンプルに保ち、次のようにCsvListReaderを使用することをお勧めします (他のリーダーを使用することもできますが、nameMapping 配列を定義して、ヘッダー、データ、およびチェックサム行の列名を提供する必要があります)。
「ヘッダー」CellProcessor配列を使用して、最初の行を読み取ります(2番目の列は次のデータ行の数だと思いますか?)。
'data' CellProcessor 配列を使用して、データ行をn回 ( nは 2 番目のヘッダー列で指定) 読み取ります。
'checksum' CellProcessor 配列 (おそらく単一のParseChecksum()
) を使用してチェックサムを読み取ります。