異なるレコード形式があるCSVファイルを読み込んでいます。行数が異なるcsvファイル
最初のレコードには常に3つの列があります。それはヘッダーです。
他のレコードは可変数の列を持ちます。
セパレータはパイプです。 列の長さは固定です(各列の種類は固定長です)。
私はFileHelpersでCSVファイルのこのタイプを解析しようとしている:
*|060318|4
1|Tom |2 |605212999|02|663790000|02|T3_1018_RM |0
2|Steve |2 |605212999|02|663790000|02|T3_1018_RM |0
3|Bob |1 |605212999|02|T3_1018_RM |0
CSVの列:
ID|Name|Telephones Count|TelephoneNumber|TypeTelephone...|IDType|ProductType
1号線と2持っ電話2台(数およびタイプ):
605212999|02
663790000|02
回線3には電話機1台(番号とタイプ):
605212999|02
FileHelpersまたは別の汎用コードを使用できますか?
私はこのような類似してみてください:
StreamReader sr = new StreamReader(filename);
var csvList = new List<string[]>();
while(!sr.EndOfStream)
{
String[] header = sr.ReadLine().Split('|');
csv.Add(header);
}
FileHelpersを使用してFixedLengthRecord
が適用されません。どちらも
[FixedLengthRecord()]
public class Customer
{
[FieldFixedLength(1)]
public int Id;
[FieldFixedLength(8)]
[FieldTrim(TrimMode.Both)]
public string Name;
[FieldFixedLength(2)]
[FieldTrim(TrimMode.Both)]
public int TelephoneCount;
....
public string Phone1;
public byte Phone1Type;
public string Phone2;
public byte Phone2Type;
...
public string Phone9;
public byte Phone9Type;
[FieldFixedLength(14)]
[FieldTrim(TrimMode.Both)]
public string IDType;
[FieldFixedLength(1)]
public int ProductType;
}
またはhttp://www.filehelpers.net/example/QuickStart/ReadWriteRecordByRecord/を使用してが可変長レコードで使用することができます
が多くoptionalcolumnsあります。サンプル: '必須列1、OptionalColumn1、OptionalColumn 2、...、OptionalColumn N、Required Column 2、Required Column 3' – Kiquenet
@Kiquenetオプション列のプロパティには、追加する限り任意の名前を付けることができますその前に '[FieldOptional]'属性があります。更新された回答を参照してください。 –
***電話番号***を含む列があります。たとえば、*** 2 ***の値は、次の列はテレフォン番号で、telephone_( '01、02 for mobile')と入力します。例: '| 2 | 605212115 | 02 | 663794042 | 02 |' – Kiquenet