問題タブ [filehelpers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
csv - FileHelpers で引用符を処理する
多くの csv ファイルをインポートするために優れた FileHelpers ライブラリを使用していますが、問題が発生します。これらの3つの例の行を含むcsvファイルがあります
そしてこの(例)クラス
問題QuoteMode.AlwaysQuoted
は、ID 122 がエラーで失敗することです。
フィールド 'TEXT' は、3 行目の QuotedChar で始まっていません。 FieldQuoted(QuoteMode.OptionalForRead) を使用して、オプションの引用フィールドを許可できます
への切り替えQuoteMode.OptionalForRead
は、ID 121 のエラーで失敗します:
フィールド TEXT は引用符で囲まれていますが、引用符で囲まれた char: " not は区切り記号の直前にあります ([FieldTrim] を使用してこのエラーを回避できます)
では、引用符のない空のフィールドと、テキストに余分な引用符がある引用テキスト フィールドを持つ csv を処理するにはどうすればよいでしょうか?
vb.net - FileHelpers ライブラリ - 変換時に複数のレコードを追加
FileHelpers ライブラリを使用して、VB.NET でいくつかの素晴らしいことを行います。テキスト ファイル テンプレートから構築された動的クラスを使用してファイルを解析します。見つけられないことが 1 つあります。単一のレコードを読み取り、その結果として 2 つのレコードが生成されると判断する方法です。
現在のコード:
Dim FromType As Type = Dynamic.ClassBuilder.ClassFromSourceFile(MyFilePath, MyDynamicTypeName, NetLanguage.VbNet)
Dim FromRecords() オブジェクトとして FromRecords = FileHelpers.CommonEngine.ReadString(FromType, MyStringBuilder.ToString)
'...おそらく、特定の値をチェックするためのコードがここにあります
Dim engine As New FileTransformEngine(Of ITransformable(Of MyDestinationClass), MyDestinationClass)
' 理想的には、この次の行で特定の条件を確認し、1 つのソース行から 2 つのレコードを生成できるようにしたいと考えています。Dim PayRecords() As Object = engine.TransformRecords(FromRecords)
あるいは、"ITransformable(Of ..." TransformTo() を実装して複数のレコードを返す方法があれば、動的クラス定義の TransformTo() メソッドにロジックを入れることができます。
考え?
ソース動的クラスのサンプルを次に示します。
FileHelpers をインポートします
_ パブリック NotInheritable クラス MyDynamicClass は ITransformable(Of MyDestinationClass) を実装します _ 文字列としてのパブリック名
Public Function TransformTo() As MyDestinationClass ITransformable(Of MyDestinationClass).TransformTo Dim res As New MyDestinationClass
終了関数終了クラス
.net - FileHelpers.dll はプライベート フィールドを無視していませんか?
過去にここで見つかった FileHelpers.dll ライブラリを使用して成功しました。この特定のケースでは、昨年の今ごろ、クラスにいくつかのフラット ファイルを生成させることができました。なんらかの理由で、1 年後、古いプロジェクトに戻っていくつかの変更を加えましたが、今では機能しません。FixedLengthRecord を使用してデータをファイルに書き込もうとしていますが、すべてのフィールドに FixedField 属性があるとは限りません。私はダブル、トリプル、クワドプルをチェックし、すべてのパブリック フィールドに必要な属性があります。すべてのメソッドとプロパティにコメントした後、クラスのプロパティの一部をサポートするために使用するプライベート フィールドについて不平を言っていることに気付きました。機能させるには、これらのプライベート フィールドに Ignore 属性を適用する必要がありました。
私の質問は、このように動作するために、今回は何ができたのでしょうか? 昨年、まったく同じクラス定義が魅力的に機能し、すべてのプライベート フィールドが無視されました。私は VS2008 と FileHelpers.dll バージョン 2.0.0.0 (昨年使用したものと同じバージョン) を使用しています。ドキュメントを検索してソースコードを読んでみましたが、これに関連するものは何も見つかりません。
.net - FileHelpersのCSVでの非標準の埋め込み引用
FileHelpersを使用してCSVファイルを解析しています。残念ながら、CSVファイルは埋め込まれた引用符をエスケープしないため、予期しない列にデータが読み込まれるという問題が発生しました。
いつものようにそれらを2倍にする代わりに:
CSVファイルの変更は自由ではありませんので、そのままご利用いただく必要があります。FileHelpersのストックビルドでこれを行うことは可能ですか?そうでない場合は、この形式をすぐにサポートする別の.NET CSVライブラリがありますか?
c# - 日付と時刻が 2 つのフィールドになっている CSV ファイルがあります。FileHelpers を使用して 2 つのフィールドを同じ DateTime データに集約するにはどうすればよいですか?
日付と時刻が 2 つのフィールドになっている CSV ファイルがあります。FileHelpers を使用して 2 つのフィールドを同じ DateTime データに集約するにはどうすればよいですか?
ありがとう、
c# - filehelpers ライブラリを使用して csv ファイルをインポートするときに ConvertException を修正するにはどうすればよいですか
ユーザー入力エラーが原因で int フィールドにテキストが含まれることがある csv ファイルを処理しています。これは最初の列であり、基本的には一意のレコード ID である必要があります。を使用してエラーをキャッチしていますengine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue;
私がやりたいことは、エラーを無視して、テキストを選択した数値に置き換えて、処理された結果にその行を含めることです。
ファイル定義クラスファイルで宣言したデフォルト値に固執するプロセスでも問題ありません。 [FieldNullValue(typeof(int), "0")]
もう1つのことは、実行時にどのファイルを解析するかを次のように決定していることです。
したがって、D.Lambertの提案を何に入れるかというコンテキストで実装する方法がわかりません。<CustomersFixedWithNumericId>
明確にするために、アップロード/処理される7つの異なるファイル定義(クラスファイル)がありますが、それらすべてに CustomerId フィールドがあります。
c# - 文字列引数を持つコンストラクターのジェネリック制約?
コンストラクターが1つの文字列引数を取り、ToStringを実装し、以下の2つの関数を実装する型を許可するジェネリッククラスを作成する方法。
注:ConvertBaseは、FileHelperscsvリーダーライブラリの抽象クラスです。すでにcsvのフィールドに対応するクラスがあり、FileHelpresライブラリで使用するためにConvertBaseを継承する個別のクラスを作成したくありませんでした。
c# - FileHelper.CSVEngine を BeforeWriteRecord イベントにバインドする方法
を使用してデータテーブルを CSV にエクスポートするときFileHelpers.CsvEngine.DataTableToCsv
。BeforeWriteRecord
のように " " イベントをフックできませんでしたFileHelperEngine
。CSVEngine クラスで操作をフックする可能性はありますか。
c# - FileHelpers を使用した CSV ファイルのインポートに関する問題
FileHelpers ライブラリを使用して、csv ファイルをデータベース テーブルにインポートしています。ファイル ヘッダーに数字 ('800NUMBER') で始まるフィールドがあるファイルのインポートで問題が発生しています。
インポートするコード:
DataTable data = CommonEngine.CsvToDataTable(file, ',');
例外:
FileHelpers.FileHelpersException: The string '800NUMBER' not is a valid .NET identifier. at FileHelpers.RunTime.FieldBuilder..ctor(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.CsvClassBuilder.AddField(String fieldName, String fieldType) at FileHelpers.RunTime.DelimitedClassBuilder.AddField(String fieldName) at FileHelpers.RunTime.CsvClassBuilder..ctor(CsvOptions options) at FileHelpers.CsvEngine.CsvToDataTable(String filename, String classname, Char delimiter, Boolean hasHeader) at FileHelpers.CommonEngine.CsvToDataTable(String filename, Char delimiter)
「[800NUMBER]」のような列名をエスケープする方法があるかどうかはわかりません。
列名は、クライアントから提供された方法であるため、変更できません。
「ヘッダー」行を「データ」行とは別に読み取ることで、この問題を解決しました。次に、「データ」の列名を変更し、SqlBulkCopy を使用してデータベースにインポートします。
.net - FileHelpersを使用した出力フォーマット
FileHelpersを使用して固定長のファイルを作成しています。私のモデルでは、0000.00形式で出力する必要があるdoubleがあります。とにかく、FileHelpers自体でこれを指定できますか、それともモデルを作成するときにモデルを文字列に変更して.ToString(my_format)を実行する必要がありますか?