2016-03-29 24 views
0

C#でCSV形式のTXTファイルを変換しようとしています。私はC#の基本だけを知っています。私はこのテーマについて少しお読みになり、ここで私がFileHelpersでそれを行うことができるStack Overflowについて見つけました。私はこのようなクラス建て固定幅のテキストファイル

14863   0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120309 
14864   0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120310 
14865   0001 t0001991.jpg p0001991.jpg 0007 ALFA ROMEO Sprint (1985 - 1989) Sprint V14010120305 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using FileHelpers; 

namespace ConvertTXT 
{ 
    [FixedLengthRecord()] 

    public class ptMedia 
    { 
     [FieldFixedLength(5)] 
     //[FieldTrim(TrimMode.Both)] 
     public int id1; 

     [FieldFixedLength(4)] 
     [FieldTrim(TrimMode.Both)] 
     public String id2; 

     [FieldFixedLength(12)] 
     [FieldTrim(TrimMode.Both)] 
     public string file1; 

     [FieldFixedLength(12)] 
     [FieldTrim(TrimMode.Both)] 
     public string file2; 

     [FieldFixedLength(4)] 
     [FieldTrim(TrimMode.Both)] 
     public int id3; 

     [FieldFixedLength(40)] 
     [FieldTrim(TrimMode.Both)] 
     public string brand; 

     [FieldFixedLength(12)] 
     [FieldTrim(TrimMode.Both)] 
     public int id4; 



    } 
} 

をそして、私のメインクラスのために、私は、この持っている:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using FileHelpers; 

namespace ConvertTXT 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var engine = new FixedFileEngine<ptMedia>(); 
      ptMedia[] result = engine.ReadFile("h:\\PT-media.txt"); 

      foreach (var detail in result) 
       Console.WriteLine("ID1: {0}, ID2: {1}, File1: {2}, File2: {3}, ID3: {4}, Veiculo: {5}, ID4: {6}",detail.id1, detail.id2, detail.file1, detail.file2, detail.id3, detail.brand, detail.id4); 
       Console.ReadLine(); 

     } 
    } 
} 

マイソースtxtファイルは、この形式でありますコードを実行しようとするたびに、エラーが表示されます。

Additional information: Line: 1 Column: 37. Not value found for the value type field: 'id3' Class: 'ptMedia'. You must use the [FieldNullValue] attribute because this is a value type and can't be null or use a Nullable Type instead of the current type.

+0

あなたの情報は、テキストファイルの正しい長さですか? – Eminem

答えて

0

try public int? id3;このpublic int id3の代わりに;

+0

今私は他の分野で問題があります。スペースも数えているようです。追加情報:1行目の文字列 '1985 - 1989年のSprint V14010120309'(長さ34)は、最後のフィールドid4(12)で定義されたものより多くの文字を持ちます。[FixedLengthRecord(FixedMode.AllowMoreChars)]を使用すると、問題。 – user2263468

0

クラスフィールドの長さを追加したところ、89文字になりました。あなたのテキストファイルに長さを追加すると、私は109文字を取得します。だからあなたのテキストファイルによると、id3の空きスペースがあります。 Id3はあなたのクラスファイルに従って文字33にあります。これをあなたのテキストファイルに変換する。 "t0001991.jpg"の直後から文字33が始まる。基本的には、あなたのスペースを食べる必要があります。

1

私は空白を数えてFieldsのサイズを増やしただけで、今すぐ動作します。すべてのあなたの助けをいただきありがとうございます。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using FileHelpers; 

namespace ConvertTXT 
{ 
    [FixedLengthRecord()] 

    public class ptMedia 
    { 
     [FieldFixedLength(16)] 
     [FieldTrim(TrimMode.Right)] 
     public int id1; 

     [FieldFixedLength(5)] 
     [FieldTrim(TrimMode.Right)] 
     public String id2; 

     [FieldFixedLength(16)] 
     [FieldTrim(TrimMode.Right)] 
     public string file1; 

     [FieldFixedLength(16)] 
     [FieldTrim(TrimMode.Right)] 
     public string file2; 

     [FieldFixedLength(5)] 
     [FieldTrim(TrimMode.Right)] 
     public int? id3; 

     [FieldFixedLength(40)] 
     [FieldTrim(TrimMode.Right)] 
     public string brand; 

     [FieldFixedLength(13)] 
     [FieldTrim(TrimMode.Right)] 
     public string id4; 
関連する問題