3

SuperCSV を使用して、受信したファイルの内容を確認しようとしています。ファイルの形式は、ヘッダー レコードの後に​​データ レコードが続き、その後に CRC32 チェックサム値が続きます。

例えば

ABC|2|20130115150327|
1|1234567890123456|1234|20130109204710|21130109204710|
2|6543210987654321|1234|20130110043658|21130110043658|
1A345C7D

この状況での SuperCSV の機能についていくつか質問があります。

  • ヘッダー レコード用とデータ レコード用など、さまざまな定義に対してさまざまな行を検証できますか。
  • 区切り文字 (この場合はパイプ '|') を行末に追加する必要があることを検証できますか?
  • 16 進値を検証する CellProcessor はありますか、または誰かが書いていますか?
4

1 に答える 1

5
  • ヘッダー レコード用とデータ レコード用など、さまざまな定義に対してさまざまな行を検証できますか。

はい。通常、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 進数を数値として解析する場合 (おそらくそうではありませんが、念のため)、ParseHexSuper CSV には既存の CellProcessor がありません。パッチを作成して提出していただければ、次のリリースに含めます。数値の大きさによっては、ParseLongを更新して、基数 (この場合は 16) を受け入れる別のコンストラクターを使用するのが最善でしょうか?

物事をシンプルに保ち、次のようにCsvListReaderを使用することをお勧めします (他のリーダーを使用することもできますが、nameMapping 配列を定義して、ヘッダー、データ、およびチェックサム行の列名を提供する必要があります)。

  1. 「ヘッダー」CellProcessor配列を使用して、最初の行を読み取ります(2番目の列は次のデータ行の数だと思いますか?)。

  2. 'data' CellProcessor 配列を使用して、データ行をn回 ( nは 2 番目のヘッダー列で指定) 読み取ります。

  3. 'checksum' CellProcessor 配列 (おそらく単一のParseChecksum()) を使用してチェックサムを読み取ります。

于 2013-01-15T03:12:25.893 に答える