none
Optik Değerlendirme Programı Yardımı RRS feed

  • Genel Tartışma

  • Program Örnek Resmi

    iyi günler

    1 - yukarıda ki gibi bir optik değerlendirme programı yapmak istiyorum fakat resimdeki gibi bir .txt dosyasını datagridlere nasıl aktaracam. yanı ismi sınıfı cevapları ayırma işlemini

    2- orada bulunan cevapları nasıl karşılaştırma yapabilirim 

    yardımcı olursanız çok sevinirim şimdiden teşekkürler

    12 Ekim 2016 Çarşamba 08:26

Tüm Yanıtlar

  • File ve Text kütüphanesini kullanarak. Text dosyası "fixed delimited" denilen türde. Text dosya olarak açıp okuyacaksınız, uzunluklardan parçalayıp bir veri saklama ortamına atacaksınız. (veritabanı olabilir, xml olabilir vb.) daha sonra da cevapları harf harf alıp değerlendireceksiniz.

    http://pgnchess.com
    http://dergikapaklari.com


    • Düzenleyen Halil TAŞ 12 Ekim 2016 Çarşamba 08:49
    12 Ekim 2016 Çarşamba 08:48
  • Merhaba,

    Merak ettiğim için soruyorum, 5-6-7 kolonlarındaki değerler neyi temsil ediyor ? 

    Ayrıca, ben şöyle birşey yapmıştım sana örnek olması için paylaşayım istersen.

    Bir Class yarattım ve kolonların isimlerini yazdım.

     class brillFormat
        {
            public string receteKodu { get; set; }
            public string receteAdi { get; set; }
            public DateTime receteTarihi { get; set; }
            public string hammaddeKodu { get; set; }
            public string hammaddeAdi { get; set; }
            public int tartimNoktasiId { get; set; }
            public decimal alinacakMiktar { get; set; }

    sonra format dosyası yaptım.

     class tb_brillDosyaFormati
        {
            public int satirReceteKodu { get; set; }
            public int satirReceteAdi { get; set; }
            public int satirTarih { get; set; }
            public int satirReceteSatirlari { get; set; }
            public string bitisParametresi { get; set; }
            public int kolonHammaddeKoduBaslangic { get; set; }
            public int kolonHammaddeKoduBitis { get; set; }
            public int kolonHammaddeAdiBaslangic { get; set; }
            public int kolonHammaddeAdiBitis { get; set; }
            public int kolonMiktarBaslangic { get; set; }
            public int kolonMiktarBitis { get; set; }
            public int birdenCokSiloParametresi { get; set; }
            public int ilkTartimNoktasinaYuzde { get; set; }
    
    
            public tb_brillDosyaFormati select()
            {
                Harmanlama.Source.db.veriTabani vt = new db.veriTabani();
                DataTable dt = vt.returnDataTable("select * from tb_brillDosyaFormati");
    
    
                tb_brillDosyaFormati bdf = new tb_brillDosyaFormati();
    
                bdf.satirReceteKodu = (int)dt.Rows[0]["satirReceteKodu"];
                bdf.satirReceteAdi = (int)dt.Rows[0]["satirReceteAdi"];
                bdf.satirTarih = (int)dt.Rows[0]["satirTarih"];
                bdf.satirReceteSatirlari = (int)dt.Rows[0]["satirReceteSatirlari"];
                bdf.bitisParametresi = dt.Rows[0]["bitisParametresi"].ToString().Trim();
    
                bdf.kolonHammaddeKoduBaslangic = (int)dt.Rows[0]["kolonHammaddeKoduBaslangic"];
                bdf.kolonHammaddeKoduBitis = (int)dt.Rows[0]["kolonHammaddeKoduBitis"];
    
                bdf.kolonHammaddeAdiBaslangic = (int)dt.Rows[0]["kolonHammaddeAdiBaslangic"];
                bdf.kolonHammaddeAdiBitis = (int)dt.Rows[0]["kolonHammaddeAdiBitis"];
    
                bdf.kolonMiktarBaslangic = (int)dt.Rows[0]["kolonMiktarBaslangic"];
                bdf.kolonMiktarBitis = (int)dt.Rows[0]["kolonMiktarBitis"];
    
                bdf.birdenCokSiloParametresi = (int)dt.Rows[0]["birdenCokSiloParametresi"];
    
                bdf.ilkTartimNoktasinaYuzde = (int)dt.Rows[0]["ilkTartimNoktasinaYuzde"];
    
                return bdf;
            }

    sonra dosyadan açıp satır satır okudum

    public List<brillFormat> dosyadanOku(string dosyaYolu)
            {
                StreamReader objReader = new StreamReader(dosyaYolu);
                string sLine = "";
                ArrayList arrText = new ArrayList();
    
                while (sLine != null)
                {
                    sLine = objReader.ReadLine();
                    if (sLine != null)
                        arrText.Add(sLine);
                }
                return dosyadanOkunaniFormatlandir(arrText);
            }


    sonra da satırları sutunlara çevirdim. Bursa senin 5-6-7 kolonlarındaki değerleri dönüştürmen gerek galiba.

    private List<brillFormat> dosyadanOkunaniFormatlandir(ArrayList satirSatirListe)
            {
                List<brillFormat> bList = new List<brillFormat>();
    
                Harmanlama.Source.Tables.tb_brillDosyaFormati d = new Tables.tb_brillDosyaFormati();
                d = d.select();
    
                if (satirSatirListe.Count == 0)
                  return null
    
                    for (int i = 0; satirSatirListe.Count > i; i++)
                    {
                        if (satirSatirListe[i].ToString() != d.bitisParametresi)
                        {
                            brillFormat b = new brillFormat();
    
                            if (i == d.satirReceteKodu) //Reçete kodu
                                b.receteKodu = satirSatirListe[i].ToString();
    
                            if (i == d.satirReceteAdi) //reçete Adı
                                b.receteAdi = satirSatirListe[i].ToString();
    
                            if (i == d.satirTarih) //Tarih
                                b.receteTarihi = Convert.ToDateTime(satirSatirListe[i]);
    
                            if (i > d.satirReceteSatirlari) //satırlar
                            {
                                        b.hammaddeKodu = satirSatirListe[i].ToString().Substring(d.kolonHammaddeKoduBaslangic, d.kolonHammaddeKoduBitis).Trim();
                                        b.tartimNoktasiId = Convert.ToInt32(dt.Rows[0][0].ToString());
                                        b.alinacakMiktar = Convert.ToDecimal(satirSatirListe[i].ToString().Substring(d.kolonMiktarBaslangic, d.kolonMiktarBitis));
                                        bList.Add(b);
                             }
                       }
                return bList;
            }
    

    sonra en güzel yer..

    private void btnBrillDosyaOku_Click(object sender, EventArgs e)
            {
                openFileDialog1.Title = "Open";
                openFileDialog1.Filter = "(*.txt)|*.txt";
                openFileDialog1.FileName = null;
                openFileDialog1.ShowDialog();
                Harmanlama.Source.import.brillFormat bf = new Source.import.brillFormat();
                List<Harmanlama.Source.import.brillFormat> bfList = new List<Source.import.brillFormat>();
                if (openFileDialog1.FileName != "")
                {
                    bfList = bf.dosyadanOku(openFileDialog1.FileName);
                    DataGridView1.DataSoruce = bfList;
                 }
            }

    Yani özetle,

    Dosyayı seçtik, satır satır okuduk, sonra satırları substring ile önceden girilen değerlere göre sütunlara dönüştürdük. Ben Datagrid kullanmamıştım ama senin için o kısmı değiştirdim. 

    İnşallah işine yarar. Yada anlamadığın yer varsa sorabilirsin.

    12 Ekim 2016 Çarşamba 10:25
  • teşekkür ederim Ahmet bey ben biraz inceleyim ona göre dönüş yaparım size tekrardan . 5. kolonda kitapçık turu var 6 ve 7 önemli değil orada . tekrardan Allah razı olsun. 
    12 Ekim 2016 Çarşamba 11:03
  • teşekkür ederim kardeşim incelememi yapacağım 
    12 Ekim 2016 Çarşamba 11:04
  • Bu son derece basit bir format ve 'Fixed Width Data' ya da 'System Data Format - SDF' olarak biliniyor. Resim yerine bir satirini verseydin daha iyiydi ya neyse, kendi uydurdugum 2 ornek satirla giris kismi soyle olabilir:

    (Ornek Satirlar)

    AHMET DENEME      1234 8A B ABCDABCDABCDABCDABCDABCDABCDAB ABCDABCDABCDABCDABCDABCDABCDAB ABCDABCDABCDABCDABCDABCDABCDAB
    MEHMET DENEME     1234 8A B AAABB  CC DD BAB AA BACD ACCA  ABCCABABACBBABBBAA      ABBBBA BBCA AABCBAA

    Simdi bu satirlarin uzerine gecici olarak bir 'cetvel' koyup, alan genisliklerini aliyoruz:

             1         2         3         4         5         6         7         8         9         0         1         2
    123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
    AHMET DENEME      1234 8A B ABCDABCDABCDABCDABCDABCDABCDAB ABCDABCDABCDABCDABCDABCDABCDAB ABCDABCDABCDABCDABCDABCDABCDAB
    MEHMET DENEME     1234 8A B AAABB  CC DD BAB AA BACD ACCA  ABCCABABACBBABBBAA      ABBBBA BBCA AABCBAA
    

    Genislikleri hesaplarsak 18,4,3,2,31,31,31 - son ucunden once bir bosluk var onun icin onlari 1+30 diye dusunuyoruz.

    "Sadece ornek olsun diye" soyle bir yapiya okuyabiliriz:

    void Main()
    {
    	var cevapDosyasi = @"c:\Dizin\sinav.txt";
    	var cevapAnahtari1 = "DDAADACBCADACBBADBBACBABDDBDAD";
    	var cevapAnahtari2 = "BCCBDAADDBBBBDAAADBBBBCDDBDDAA";
    	var cevapAnahtari3 = "CCACCABABAADCADBAAADCCCDBAACBC";
    	
            var ornek =	DosyaOku(cevapDosyasi,cevapAnahtari1, cevapAnahtari2, cevapAnahtari3);
            
    }
    
    public IEnumerable<Data> DosyaOku(string fileName, string anahtar1, string anahtar2, string anahtar3)
    {
    	return from l in File.ReadAllLines(fileName)
    			   where l.Trim().Length >= 27 && char.IsLetter(l[0])
    			   let c = l.PadRight(120)
    			   let t1 = c.Substring(28, 30)
    			   let t2 = c.Substring(59, 30)
    			   let t3 = c.Substring(90, 30)
    			   let s1 = TestSonuc(anahtar1, t1)
    			   let s2 = TestSonuc(anahtar2, t2)
    			   let s3 = TestSonuc(anahtar3, t3)
    			   select new Data
    			   {
    				   SoyadAd = c.Substring(0, 18).Trim(),
    				   OgrNo = c.Substring(18, 4).Trim(),
    				   GrupNo = c.Substring(22, 3).Trim(),
    				   Kit = c.Substring(25, 2).Trim(),
    				   Test1 = t1,
    				   Test2 = t2,
    				   Test3 = t3,
    				   Test1Sonuc = s1,
    				   Test2Sonuc = s2,
    				   Test3Sonuc = s3
    			   };
    }
    
    public Sonuc TestSonuc(string cevapAnahtari, string cevaplar)
    {
    	var sonuc = new Sonuc { SoruSayisi = cevapAnahtari.Length };
    	for (int i = 0; i < cevapAnahtari.Length; i++)
    	{
    		if (i >= cevaplar.Length || cevaplar[i] == 32) sonuc.Bos++;
    		else if (cevaplar[i] == cevapAnahtari[i]) sonuc.Dogru++;
    		else sonuc.Yanlis++;
    	}
    	return sonuc;
    }
    
    public struct Data
    { 
    	public string SoyadAd { get; set; }
    	public string OgrNo { get; set; }
    	public string GrupNo { get; set; }
    	public string Kit { get; set; }
    	public string Test1 { get; set; }
    	public string Test2 { get; set; }
    	public string Test3 { get; set; }
    	public Sonuc Test1Sonuc { get; set; }
    	public Sonuc Test2Sonuc { get; set; }
    	public Sonuc Test3Sonuc { get; set; }
    }
    
    public struct Sonuc
    {
    	public int SoruSayisi { get; set; }
    	public int Bos { get; set; }
    	public int Dogru { get; set; }
    	public int Yanlis { get; set; }
    }

    Bu kodu LinqPad'de deneyip sonuna:

    ornek.Dump();

    dersek, aldigimiz cikti:

    12 Ekim 2016 Çarşamba 13:08
    Yanıtlayıcı
  • hocam bu kodları hangi alanda yazdınız form application da yazınca bu kodları hata verıyorda . 
    12 Ekim 2016 Çarşamba 18:04
  • Ne hatasi veriyor? LinqPad'de yazdim ben ama farketmez.

    12 Ekim 2016 Çarşamba 19:23
    Yanıtlayıcı
  • linqpad'de void main de hata veriyor. c# a donusturmeye calısıyorum ama zorlanıyorum . 
    13 Ekim 2016 Perşembe 09:29
  • Kod zaten C#, LinqPad'de sadece yukaridaki combodan C# program secmen lazim (Ctrl+3).

    Ne hatasi veriyor? Neden hatayi soylemiyorsun?




    13 Ekim 2016 Perşembe 09:56
    Yanıtlayıcı