2016-04-07 11 views
1

TimeClockCode adlı bir string özelliğim var. Hangi csv dosyasının dizinine (0) eşlenir. Böyle 11565. Ama dize TimeClockCode için haritalama sonrasında tamsayıları içeren (0) Endeksi, bu gibiCsv Yardımcısı Akıcı Sınıf Eşlemesi, string özelliğine eşlendiğinde int alanına bir başlangıç ​​sıfır ekler

: Map(p => p.TimeclockCode).Index(0);

veya böyle : dizede Map(p => p.TimeclockCode).ConvertUsing(row => row.GetField<string>(0));

hem sonuç 011565.

Bunu bir int olarak okuyarak ve üzerine String'i çağırarak çözdüm. Bana 11565.

istenen sonuçları verdi

Map(p => p.TimeclockCode).ConvertUsing(row => row.GetField<int>(0).ToString());

Ben akıcı eşleştirmeleri uygulanması konusunda bir şey eksik? Baştaki sıfır nereden geliyor?

+0

TimeclockCode sınıfta nasıl tanımlanır? Belgelere bakıyorum ve paylaştığınız şeyde yanlış bir şey göremiyorum. –

+0

'genel dize TimeclockCode {get; set;} '' –

+0

CSV hattının 011565 dizesini içermediğinden emin misiniz? Nasıl görünüyor? Bunu kod içinde yeniden oluşturmaya çalışacağım. –

cevap

0

Sorununuzu kopyalayamadım. Sadece CSV değeri 011.565 veya siz sorunun metinden açıkça olmayan başka sorunu olduğunu varsayabiliriz

static void Main(string[] args) 
{ 
    var s = "\"11565\",\"a\",\"012\",\"4.5\",\"01\",\"555\"\r\n"; 
    using (var sr = new StringReader(s)) 
    { 
     var csv = new CsvReader(sr); 
     csv.Configuration.HasHeaderRecord = false; 
     csv.Configuration.RegisterClassMap<MyClassMap>(); 
     while (csv.Read()) 
     { 
      var record = csv.GetRecord<MyClass>(); 

     } 
    } 
} 

public class MyClass 
{ 
    public string Test { get; set; } 
    public string TimeclockCode { get; set; } 
} 

public sealed class MyClassMap : CsvClassMap<MyClass> 
{ 
    public MyClassMap() 
    { 
     Map(p => p.TimeclockCode).Index(0); 
     Map(p => p.Test).Index(2); 
    } 
} 

: Bu kodu kullanılır.

+0

Bundan daha da garip olan şey, kodunuzu test sonucuna getiriyorsam, int ve string'e karşı test edersem true 'FakeReader r = new FakeReader(); var arr = r.ResultList.ToArray(); arr [0] .TimeclockCode.ShouldBeEquivalentTo (11565); arr [0] .TimeclockCode.ShouldBeEquivalentTo ("11565"); } 'her iki sınama yeşil –

+0

Ama ne hakkında değer? "011565" veya sadece "11565" mi? Kodum sizinkilerden nasıl farklı? –

+1

Dosyayı not defterinde açtım ve değerin aslında "011565" olduğunu gördü, excel sıfırları gizliyordu. Ancak, neden row.GetField (0) .ToString() 'niçin baştaki sıfırı düşürür? –

İlgili konular