20 Haziran 2017 Salı

C# Dosya seçme ve içeriğini sıralama


Merhabalar arkadaşlar.

Bir uygulama da kullandığım  kod parçasını sizlerle de paylaşmak istedim. İçerisinde ki satır sayısı ve toplam sayı adedi bilinmeyen bir txt belge seçip , belgede  yer alan sayıları büyükten küçüğe sıralan bir kod. Kod verimsiz gelebilir veya bir takım iyileştirmeler gerekebilir.Ama mantığını anlamanız daha önemli. Satır sayısı ve içerisindeki sayı adedi bilinmeyen belge de , satır ve sayı adedini nasıl bulduğumu anlamanız için gerekli açıklamaları yazdım.

Not:Belge de her bir sayı arası boşluk bir space kadardır.


Örnek olarak kullandığım number.txt belgesinini içeriği

8 7 6 -5 4 9 1
10 45 27 -9 14 15
17
17,5

KOD:



OpenFileDialog dialog = new OpenFileDialog();   //dosya seçim ekranı için hazırlık
StreamReader reader;                            // dosya okuma işlemi için hazırlık

string line;                          //dosyada okunan satır kontrolu
string[] ReadText;                   //dosyadaki tüm satırların indexler ile tutulacağı dizi
int count = 0;                       // okunan dosyadaki satır sayısını bulmak için
int count2 = 0;                      // dosyada ki toplam sayı adetini bulmak için
int ValueCount = 0;                 //Value dizisi için index değerleri olacaktır.
float[] Value;                       //dosyadaki tüm sayıların tutulacağı dizi

         


  //dosya seçim ekranı

   if (dialog.ShowDialog() == DialogResult.OK)
     {
        FileInfo dosyabilgisi = new FileInfo(dialog.FileName);
        dialog.Filter = "Text|*.txt";
        lblDosya.Text =dosyabilgisi.FullName.ToString();   // dosya yolunun tutulması
       filePath = lblDosya.Text;                    //dosya yolunun global değişkene atılması
      }  //end if

      reader = File.OpenText(filePath);                      //seçilen dosyanın yüklenmesi

        try
         {

             // satır satır okuma işlemi yapılarak , dosyadaki satır sayısının bulunması
            while ((line = reader.ReadLine()) != null)
             {
               count++;   //satır sayısının belirlenmesi

              } //end while

           reader.Close();



   //satır sayısını bulmaktaki amacım , her bir satırdaki değerlere ulaşıp bir diziye atmak.

   //bu metod index ile istenilen satıra ulaşmama sağlıyor.filepath  seçtiğimiz
dosyanın yolunu atamıştık
   ReadText = System.IO.File.ReadAllLines(filePath, System.Text.Encoding.Default);

                for (int i = 0; i < count; i++)
                {
                    string[] temp;  //burada tanımlamamın nedeni her döngü başında yeniden oluşturulması  , bu sayede üzerine yeniden verilerin yazılabilmesi

                    temp = ReadText[i].Split(' '); // ulaştığım satırı boşluk karakterine göre parcalara ayırıyorum. bu sayede satırda ki her bir değere ulaşmayı planlıyorum

                    for (int a = 0; a < temp.Length; a++)  // tüm satırlardaki toplam sayı adetini bulmaya çalışıyorum.
                    {
                        count2++;          //dosyadaki toplam sayı adedi

                    } //end for a

                } //end for i


  //Yukarıda ki kod blogundan amacım  dosyada yer alan toplam sayı adetine ulaşıp, value dizisine boyut ataması yapabilmekti.

                Value = new float[count2];



 //aynı kod blogunu tekar yazmak her ne kadar kötü ve verimsiz bir kod oluştursa da  şimdilik bu yola başvuracağım.


                // bu döngüdeki amacım , dosyadaki tüm sayıları bir dizi içerisine atabilmek.

                for (int i = 0; i < count; i++)
                {
                    string[] temp2;  //burada tanımlamamın nedeni her döngü başında yeniden oluşturup , bu sayede üzerine yeniden verilerin yazılabilmesi

                    temp2 = ReadText[i].Split(' '); // ulaştığım satırı boşluk karakterine göre parcalara ayırıyorum.
                                                    // bu sayede satırda ki her bir değere ulaşmayı planlıyorum.

                    for (int a = 0; a < temp2.Length; a++)  // satırdaki sayı adetini bulmaya çalışıyorum.
                    {

                        Value[ValueCount] = float.Parse(temp2[a]);

                        ValueCount++;

                    } //end for a
                } //end for i





                Array.Sort(Value);   // diziyi küçükten büyüpe sıralama
                Array.Reverse(Value); // diziyi tersine çevirme,  yani büyükten küçüğe sıralanır.

             
               // bulduğum diziyi listview e atıyorum.
                for (int i = 0; i < ValueCount; i++)
                {
                    lstFileValue.Items.Add(Value[i].ToString());

                }

            } //end try
            catch
            {
                 // Eğer dosya seçimi/yükleme/okuma işlemlerinde bir hata olursa programın çökmemesi için buraya düşecek.
                MessageBox.Show("Error");
            }


           


 Ekran Görüntüsü:
 





 Umarım faydalı olur. Herhangi bir sorunda bana ulaşabilirsiniz. Kolay gelsin..








 

DataTable To List Object - C#

Merhaba Arkadaşlar , Daha önce kullandığım kısa bir kod parçasını sizinlede paylaşmak istedim.  Elimizde bulunan bir Datatable ı nasıl ...

Popüler Yayınlar