2016-03-29 11 views
0

Bir TXT dosyasını C# içinde bir CSV'ye dönüştürmeye çalışıyorum. Sadece C# nin temellerini biliyorum. Konuyu biraz okudum ve FileHelpers ile yapabildiğim Stack Overflow üzerinde buldum. Ben Bu gibi bir Class inşaSabit Genişliğe Sahip Metin Dosyası

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; 



    } 
} 

Ve benim ana sınıf için bu var:

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(); 

     } 
    } 
} 

Kaynağım txt dosyası bu biçimi ile olan ama her zaman kodumu çalıştırmaya çalıştığımda bir hata alıyorum:

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

Bilgileriniz metin dosyanızda doğru uzunlukta mı? – Eminem

cevap

0

public int? iD3; bu kamu int id3 yerine;

+0

Şimdi başka alanda bir sorunum var. Boşlukları da sayıyor gibi görünüyor. Ek bilgi: "1985 - 1989)" Sprint V14010120309 "dizesi (uzunluk 34) satır 1'de son alan kimliği için tanımlanandan daha fazla karaktere sahip (ID4) (12). Bunu önlemek için [FixedLengthRecord (FixedMode.AllowMoreChars)] kullanabilirsiniz. sorun. – user2263468

0

Sınıf alanları uzunluklarını eklediğimde 89 karakter elde ediyorum. Uzunluğunu metin dosyasına eklediğimde 109 karakter elde ediyorum. Yani metin dosyasına göre ID3 için boş bir alan olsun. Id3, sınıf dosyanızın karakterine göre 33'tür. Bunu metin dosya karakterinize çeviriniz 33 "t0001991.jpg" den hemen sonra başlar. Temel olarak alanlarınızı kullanmalısınız.

1

Boş alanları da hesaba katan Alanların boyutunu artırdım ve şimdi çalışıyor. Bütün yardımların için teşekkürler.

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;