2016-04-13 22 views
1

Satırlardaki dördüncü dizelerle xls satırlarını sıralamaya çalışıyorum.Bu dizelerin bir parçası tarafından dizelerin dizisini sırala

string[] list_lines = System.IO.File.ReadAllLines(@"E:\VS\WriteLines.xls"); 



     // Display the file contents by using a foreach loop. 
     System.Console.WriteLine("Contents of Your Database = "); 

     foreach (var line in list_lines) 
     { 

      // Use a tab to indent each line of the file. 
      Console.WriteLine("\t" + line); 
     } 

Ben alfabetik her satır ve liste içeriğinin dördüncü elemanını belirleyecektir algoritması oluşturmayla ilgili sorun yaşıyorum. Her satırdaki kelimeler '' ile ayrılır.

Herkes beni doğru yola koyabilir mi lütfen?

DÜZENLEME -------------------------- Tamam ,

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 

sorunu sıralanmış. Hatlar ihtiyacım olduğu gibi sıralanıyor. Excel, '' ile boşlukları '' değiştirir. Bu yüzden derlendiğinde hata veriyordu.

Şimdi, sanırım, dizenin her bir parçasını int'ye ayırmam gerekiyor çünkü bir sayı ile değil, ilk basamağa göre sıralanıyor.

+0

@Patrick Hofman'ın yanıtında olduğu gibi bir dizenin 4. maddesi bulunmadığında ne yapmak istiyorsunuz? – Draken

+0

garip. Xls dosyasının 5 sütunta doldurulduğundan eminim – paddy

+0

Muhtemelen boşluktan başka bir sembolle ayrılıyorlar. Hata ayıklarken satırları kontrol ettiniz mi? – Draken

cevap

1
Sen hatları bölmek ve daha sonra bir OrderBy üçüncü öğeyi kullanabilirsiniz

:

foreach (var line in list_lines.OrderBy(line => line.Split(' ')[3])) 
{ 
} 
+0

Tavsiyeniz için teşekkürler. Kodunuz hataya neden olmaz, ancak derlendiğimde garip bir hata alıyorum ve kod çalışmıyor. – paddy

+1

O zaman her satırın dördüncü maddesi yok. –

+0

yapıyorlar, dosyada 5 sütun var. Tüm sayılarla doldurulur. – paddy

1

Well sadece sıralama dizi:

string[] list_lines = ...; 

// General case: not all strings have 4 parts 
Array.Sort(list_lines, (left, right) => { 
    String[] partsLeft = left.Split(' '); 
    String[] partsRight = right.Split(' '); 

    if (partsLeft.Length < 4) 
    if (partsRight.Length < 4) 
     return String.Compare(left, right, StringComparison.OrdinalIgnoreCase) 
    else 
     return -1; 
    else if (partsRight.Length < 4) 
    return 1; 

    return String.Compare(partsLeft[3], partsRight[3], StringComparison.OrdinalIgnoreCase); 
}); 

Eğer için garantili tüm hatlar En az 4 öğe var,

Array.Sort(list_lines, (left, right) => 
    String.Compare(left.Split(' ')[3], 
       right.Split(' ')[3], 
       StringComparison.OrdinalIgnoreCase)); 
'e basitleştirilebilir
İlgili konular