4

現在、FileHelpersライブラリ(v2.0.0.0)を使用してCSVファイルを解析しています。CSVファイルは、いくつかのパブリックプロパティを持つクラスにマップされます。たとえば、Nがあります。問題は、デフォルトでは、ユーザーがN-1を超えるコンマを含むCSVファイルを指定した場合にFileHelpersが正しく処理されないように見えることです。残りのコンマは、最後のプロパティ値に追加されるだけです。

これはFileHelpersの属性を介して構成可能である必要があると考えましたが、レコードに一致するプロパティがないフィールドを無視するものは見当たりませんでした。

RecordConditionを調べましたが、ExcludeIfEnds( "、")のようなものを使用すると、コンマで終わる行は完全にスキップされるように見えますが、それらを削除したいだけです。

私の唯一の手段は、ファイルを前処理し、末尾のコンマを削除することである可能性がありますが、これはまったく問題ありませんが、FileHelpersでもこれを実行できるかどうかを知りたかったので、ドキュメントに表示されていない可能性があります。

4

3 に答える 3

4

ハック/回避策のアイデア:「ExtraCommas」というプロパティを作成してクラスに追加すると、オブジェクトの実際のプロパティではなく、そこで余分なコンマがシリアル化されます...

于 2012-07-06T13:14:39.997 に答える
0

コンマの数が異なる場合は、運が悪く、後処理を行う必要があると思います。ただし、固定額がある場合は、クラスに空白のフィールドを設定できます。

[FieldOrder(5)] 
public string Blank1;

[FieldOrder(6)]
public string Blank2;

FileHelpers クラスをビジネス クラスとして使用するのではなく、ビジネス クラスを構築するためのオブジェクトとして使用するため、これが私を悩ませることはありません。監査用に保管しています。ある時点で、Blanks のフィールドを非公開にして遊んでいたと思いますが、それがどうなったかはわかりません。

于 2012-07-06T13:09:17.830 に答える
0

使用できるカスタム メソッドを次に示します。最適なソリューションではないかもしれませんが、最後のコンマの問題は解決します。コードは確実に最適化される可能性があります。これは、この種の問題を回避する方法のアイデアを提供するためのものです。

  int main(){
    StreamReader sr = new StreamReader(@"C:\Users\musab.shaheed\Desktop\csv.csv");
     var lineCount=File.ReadLines(@"C:\Users\musab.shaheed\Desktop\csv.csv").Count();
            for (int i = 0; i < lineCount;i++ ) {

            String fileText = sr.ReadLine();

            fileText=fileText.Substring(0, fileText.Length - 1);


            //store your data in here
            Console.WriteLine(fileText);


            };

            sr.Close();

}
于 2015-10-22T08:59:06.620 に答える