2016-03-27 17 views
2

Bir DAT dosyasındaki verileri bir diziye yüklemeye çalışıyorum.Verilerden dosyaya veri yükleme ve ayrıştırma

Benim veri aşağıdaki biçimde birden çok satır oluşur

:

param_1::param_2::value

ben bu verileri okumak ve 2D-dizisi (veya diğer uygun formatta) dönüştürmek istiyorum, bu yüzden olacak

myData[param_1,param_2]=value

Şu anda StreamReader kullanırken dizeleri bir bir diziye dosyada okumaya çalışıyorum ama ihtiyacım biçime dizeleri verileri dönüştürmek için nasıl bilmiyorum: var.

Şu anda kullanıyorum oku bölümü budur. Verileri doğru bir şekilde ayrıştırmak için ne yapmam gerekiyor?

 StreamReader reader = new StreamReader("file.dat"); 
     string strAllFile = reader.ReadToEnd().Replace("\r\n", "\n").Replace("\n\r", "\n"); 
     string[] arrLines = strAllFile.Split(new char[] { '\n' }); 

Yardımlarınız için teşekkürler!

cevap

2

Böyle bir şey yapabilirdiniz, bu Linq deyimi, dosyadaki her satırdan param1, param2, value koleksiyonunun koleksiyonunu döndürür.

var dataList = File.ReadAllLines("file.dat") // Read lines 
     .Select(l=> l.Split(new string[] { "::" }, StringSplitOptions.None)) // split each line 
     .Select(l=> new 
       { 
        param1 = l[0], 
        param2 = l]1], 
        value = l[2] 
       }) 
     .ToList(); 

Şimdi

satır ve myData ait sütun sayısı biliniyorsa
foreach(var item in dataList) 
{ 
    // logic here. 
    myData[item.param1,item.param2]=item.value 

} 
+0

saniyedir. İlk .Select ifadesine eklenmesi gereken (...) öğesini seçin. Bir yerde eksik ')' ... – yarbaur

+0

Ahh ... haklısın, şimdi düzeltilmiş eksik bir parantez vardı. –

0

, sadece bu gibi işlev yazabilirsiniz kullanarak listeyi yineleyebilirsiniz:

public void parseString(string[] lines) 
{ 
    int[,] myData = new int[100, 100]; 
    foreach (string s in lines) 
    { 
     string[] data = s.Split("::"); 
     int x = Convert.ToInt32(data[0]); 
     int y = Convert.ToInt32(data[1]); 
     int value = Convert.ToInt32(data[2]); 

     myData[x, y] = value; 
    } 
} 
İlgili konular