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..
merhaba bana bu ödev hakında yardım edrmisiniz
YanıtlaSilProgram çalıştırıldığında önce ekrana çalıştırıldığı dizini yazacak ve ardından aşağıdaki gibi bir menü çıkartacak :
1- Ekle
2- Göster
3- Çıkış
Seçiminiz :
merhaba filepath kısmında sorun oluyor neden acaba?
YanıtlaSilformun üzerine lblDosya isminde bir label etiket koyman gerekir
Sil