Jump to content

İf, Then, Else Konusunda Yardım


yakupnun
 Share

Recommended Posts

arkadaşlar formu arattım if ile ilgili örnekleri inceledim videoları da izledim dün gece sabaha karşı 5 te uyudum deneye deneye bıktım ama bir türlü başaramadım ban bu if mevzunu tane tane anlatacak insana minnettar kalırım.ben hazır kod istemiyorum bu mevzuyu öğrenmek istiyorum
şuradaki basit bir şartı bile oluşturamadım 
saat = System.GetTime(TIME_FMT_HOUR);--saati aldık
dakika = System.GetTime(TIME_FMT_MIN);
saniye = System.GetTime(TIME_FMT_SEC);
Label.SetText("saat",""..saat..":"..dakika..":"..saniye.."")
Page.StartTimer(100, 10);
--.................................................................

sTarih = System.GetDate(DATE_FMT_EUROPE);
sGun = System.GetDate(DATE_FMT_DAYOFWEEK)
if sGun == "1" then sGun = "Pazar " end
if sGun == "2" then sGun = "Pazartesi" end
if sGun == "3" then sGun = "Salı" end
if sGun == "4" then sGun = "Çarşambaaa" end
if sGun == "5" then sGun = "Perşembe" end
if sGun == "6" then sGun = "Cuma" end
if sGun == "7" then sGun = "Cumartesi" end

Label.SetText("tarih", " "..Tarih);
Label.SetText("gun", " "..sGun);
Page.StartTimer(100, 10);

if sGun == "1"then Label.SetText("gerisay", "ne sayacan bakalım")
else Label.SetText("gerisay", "yokcanım");end
yukarıdaki kodda haftanın günü yani sGun eşit ise sTarih  teki 1. ve 7. güne(cumartesi, pazara) docks taki x.txt yi okutup ondaki saatlere sırasıyla geri sayım yaptırıp alarm çaldırmak istiyorum yok değilse(else) y.txt ti okuyupondaki saatlere sırasıyla geri sayım yaptırıp alarm çaldırmak istiyorum
formdan bir arkadaş bir örnek paylaştı ama örnek biraz karışık geldi biraz yaşlılık birazda kafa kalınlığından bu if mevzunu anlayamadım
bana hazır kod değil tanetane açıklayarak öğretecek arkadaşa minnettar kalırım
 
Edited by yakupnun
Link to comment
Share on other sites

Kodlar çalışıyor.

Sadece Tarih yazmışsın oraa sTarih yazıcan.

if sGun == "1"then Label.SetText

"1"ve "7" günü nasıl beraber yazmalıyım 

ayrıca hangi güne makinanın tarihini değiştirirsem değiştireyim label txe yokcanım dönüyor

Link to comment
Share on other sites

and, or gibi ifadeler küçük harfle yazılmalı.

onu buldum kücük harfle yazdım hata gitti ama if şartı oluşmadı

sTarih = System.GetDate(DATE_FMT_EUROPE);
sGun = System.GetDate(DATE_FMT_DAYOFWEEK)
if sGun == "1" then sGun = "Pazar " end
if sGun == "2" then sGun = "Pazartesi" end
if sGun == "3" then sGun = "Salı" end
if sGun == "4" then sGun = "Çarşambaaa" end
if sGun == "5" then sGun = "Perşembe" end
if sGun == "6" then sGun = "Cuma" end
if sGun == "7" then sGun = "Cumartesi" end

x =("1");
y =("7");

Label.SetText("tarih", " "..sTarih);
Label.SetText("gun", " "..sGun);
Page.StartTimer(100, 10);
if sTarih == x and sTarih == y then Label.SetText("gerisay", "ne sayacan bakalım");
else Label.SetText("gerisay", "yokcanım");end

burada yapmak istediğim 1.ve 7. günlerde ne sayacan bakalım yazması diğerlerinde ise yokcanım yazması yani hafta sonu "ne sayacan bakalım" hafta içi" yok canım" yazdırmak istiyorum ama hep yok canım yazıyor

 

nerede yanlış yapıyorum anlamıyorum

Edited by yakupnun
Link to comment
Share on other sites

  • Editor
saat = System.GetTime(TIME_FMT_HOUR);--saati aldık
dakika = System.GetTime(TIME_FMT_MIN);
saniye = System.GetTime(TIME_FMT_SEC);
Label.SetText("saat",""..saat..":"..dakika..":"..saniye.."")
Page.StartTimer(100, 10);
--.................................................................

sTarih = System.GetDate(DATE_FMT_EUROPE);
sGun = System.GetDate(DATE_FMT_DAYOFWEEK)

if sGun == "1" then sGun = "Pazar" end
if sGun == "2" then sGun = "Pazartesi" end
if sGun == "3" then sGun = "Salı" end
if sGun == "4" then sGun = "Çarşamba" end
if sGun == "5" then sGun = "Perşembe" end
if sGun == "6" then sGun = "Cuma" end
if sGun == "7" then sGun = "Cumartesi" end
 


Label.SetText("tarih", " "..sTarih);
Label.SetText("gun", " "..sGun);
Page.StartTimer(100, 10);
local nText = (sGun == "Pazar" or sGun == "Cumartesi") and "ne sayacan bakalım" or "yok canıms";
Label.SetText("gerisay", nText);

Stringlerde hata vardı 

Pazar kelimesinden sonra boşluk vardı mesela. sGun değişkeni geriye rakam döndürmüyor isim döndürüyor senin kod o yüzden çalışmıyyordu. 

Düzenledim.

Link to comment
Share on other sites

saat = System.GetTime(TIME_FMT_HOUR);--saati aldık
dakika = System.GetTime(TIME_FMT_MIN);
saniye = System.GetTime(TIME_FMT_SEC);
Label.SetText("saat",""..saat..":"..dakika..":"..saniye.."")
Page.StartTimer(100, 10);
--.................................................................

sTarih = System.GetDate(DATE_FMT_EUROPE);
sGun = System.GetDate(DATE_FMT_DAYOFWEEK)

if sGun == "1" then sGun = "Pazar" end
if sGun == "2" then sGun = "Pazartesi" end
if sGun == "3" then sGun = "Salı" end
if sGun == "4" then sGun = "Çarşamba" end
if sGun == "5" then sGun = "Perşembe" end
if sGun == "6" then sGun = "Cuma" end
if sGun == "7" then sGun = "Cumartesi" end
 


Label.SetText("tarih", " "..sTarih);
Label.SetText("gun", " "..sGun);
Page.StartTimer(100, 10);
local nText = (sGun == "Pazar" or sGun == "Cumartesi") and "ne sayacan bakalım" or "yok canıms";
Label.SetText("gerisay", nText);

Stringlerde hata vardı 

Pazar kelimesinden sonra boşluk vardı mesela. sGun değişkeni geriye rakam döndürmüyor isim döndürüyor senin kod o yüzden çalışmıyyordu. 

Düzenledim.

 

bir sorum daha var "ne sayacan bakalım"  veya "yok canıms" bunların yerinede kod çaılştırabilirmiyim

 

burada local argümanı ve parantez tırnak kullanma mantığı nasıldır 

Teşekkür ederim .

Edited by yakupnun
Link to comment
Share on other sites

  • Editor

orada label a yazdırdıgın için o şekilde yaptım. 

 

geriye çalışan koddan bir deger döndüreceksen oda yapılır ama tam olarka ne yapmak istiyorsun onu anlatırsan yardımcı olalım.

Link to comment
Share on other sites

orada label a yazdırdıgın için o şekilde yaptım. 

 

geriye çalışan koddan bir deger döndüreceksen oda yapılır ama tam olarka ne yapmak istiyorsun onu anlatırsan yardımcı olalım.

yapmak istediğim haftasonu.txt veya haftaiçi.txt deki saatleri okutup sırayla o saat gelene kadar geri saydırmak ve saat eşitlendiğinde  müzik çaldırmak bir nevi okul zili programı gibi mevcut zil programları beni isteğimi karşılamadığı için bu yolu tercih ettim

Link to comment
Share on other sites

sormak istediğim aslında şu. haftanın 1. ve 2. günleri arasında ne yapmak istiyorsunuz ko olarka.

haftanın 1. günü pazar 7. günü cumartesi bugünlerde hs_zil.txt deki dosyada yazan saatlerle karşılaştırmak istiyorum sırayla 

haftanın 2,3,4,5,,6 günleri ise hi_zil dosyasındaki saatlerle karşılaştırmak istiyorum 

haftanın cumartesi pazar günleri 

hs_zil.txt dosyasını okuyacak içeriği:

08:58
09:00
09:40
09:58
10:00
10:40
10:48
10:50
11:30
14:18
14:20
15:00
15:18
15:20
16:00
16:08
16:10
16:50
16:58
17:00

bu saatlerle sistem saati eşitlenince alam çalacak

 

hafta içi günlerindeise hi_zil.txt içeriğini okuyacak aynı şeyi yapacak


sormak istediğim aslında şu. haftanın 1. ve 2. günleri arasında ne yapmak istiyorsunuz ko olarka.

projenin apz si burada http://yadi.sk/d/iO9yEPlgk3bbH

Edited by yakupnun
Link to comment
Share on other sites

Merhaba Hocam
 
aslında bu işlem daha basit şekilde yapılabilir ,hemde hiç if else ler ile uğraşmadan
ayrıca , if else ler içinde stringleri karşılaştırmak hatalara sebep olur
string karşılaştırması sadece her iki string ingilizce karakterler içeriyorsa uygun olabilir ama buda kısa olanlar için
 
verdiğiniz kod örneğinde önemli olan bölümü sizin için tekrar düzenledim ,isterseniz bir butona ekleyip hemen deniyebilirsiniz
sonra uygun ise kendi projenizde kullanırsınız
 

local tblGunler = {"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"};
local nGun = String.ToNumber(System.GetDate(DATE_FMT_DAYOFWEEK));
if(nGun == 1 or nGun == 7) then
    -- hafta sonu yapılacak işlemi uygula
    Dialog.Message("Notice", "Şu anda hafta sonundayız ve günlerden "..tblGunler[nGun]);
else
    -- hafta içi yapılacak işlemi uygula
    Dialog.Message("Notice", "Şu anda hafta içindeyiz ve günlerden "..tblGunler[nGun]);
end
Link to comment
Share on other sites

 

Merhaba Hocam
 
aslında bu işlem daha basit şekilde yapılabilir ,hemde hiç if else ler ile uğraşmadan
ayrıca , if else ler içinde stringleri karşılaştırmak hatalara sebep olur
string karşılaştırması sadece her iki string ingilizce karakterler içeriyorsa uygun olabilir ama buda kısa olanlar için
 
verdiğiniz kod örneğinde önemli olan bölümü sizin için tekrar düzenledim ,isterseniz bir butona ekleyip hemen deniyebilirsiniz
sonra uygun ise kendi projenizde kullanırsınız
 

local tblGunler = {"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"};
local nGun = String.ToNumber(System.GetDate(DATE_FMT_DAYOFWEEK));
if(nGun == 1 or nGun == 7) then
    -- hafta sonu yapılacak işlemi uygula
    Dialog.Message("Notice", "Şu anda hafta sonundayız ve günlerden "..tblGunler[nGun]);
else
    -- hafta içi yapılacak işlemi uygula
    Dialog.Message("Notice", "Şu anda hafta içindeyiz ve günlerden "..tblGunler[nGun]);
end

evet kod bu şekilde çalışıyor yalnız ben sizin dün verdiğiniz apz deki kodları bununla birleştirince hata veriyor burada ki hatalar nelerdir nasıl düzeltebilirim

local tblGunler = {"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"};
local nGun = String.ToNumber(System.GetDate(DATE_FMT_DAYOFWEEK));
if(nGun == 1 or nGun == 7) then
    -- hafta sonu yapılacak işlemi uygula

 result = DateTimePicker.SetFormat("Plugin1", "HH.mm");

tblSavedAlarms = TextFile.ReadToTable("AutoPlay\\Docs\\alarms.txt");
if(tblSavedAlarms ~= nil) then
	for i=1 , #tblSavedAlarms do
		if(#tblSavedAlarms[i] > 0) then
			
			local h,m,_ = string.match(tblSavedAlarms[i],"(%d+):(%d+)");
			-- Değiştirmek için geçerli tarih / zaman almak
			-- get current date/time to modify
  			local tmAlarm = os.date("*t");
  	        
			-- Saat ve dakikayı ayarlamak için alarm saatini değiştirmek
  			-- modify alarm time to set hour and minute
  			tmAlarm.hour = h;
  			tmAlarm.min = m;
			tmAlarm.sec = 0;
			
	        -- Alarm zamanının zaman damgası olsun
			-- get the time-stamp of alarm time
			local nTimeStamp = os.time(tmAlarm);
	     
	     	-- Küresel tabloya bu zaman damgası ekleme
			-- add this time-stamp to global table
			table.insert(tblAlarmsTable,nTimeStamp);
	        
			
			-- Ve kullanıcıya alarm görsel göstermek için liste için kullanıcı - dostu sürüm eklemek
			-- and add a user-friendly version to listbox to show alarms to user visually
			ListBox.AddItem("ListBox1", string.format("Alarm : %02.f:%02.f",h,m), "");
		end
	end
	end
end
Page.StartTimer(1000, ID_ALARM_TIMER);

else
    -- hafta içi yapılacak işlemi uygula
    result = DateTimePicker.SetFormat("Plugin1", "HH.mm");

tblSavedAlarms = TextFile.ReadToTable("AutoPlay\\Docs\\alarms2.txt");
if(tblSavedAlarms ~= nil) then
	for i=1 , #tblSavedAlarms do
		if(#tblSavedAlarms[i] > 0) then
			
			local h,m,_ = string.match(tblSavedAlarms[i],"(%d+):(%d+)");
			-- Değiştirmek için geçerli tarih / zaman almak
			-- get current date/time to modify
  			local tmAlarm = os.date("*t");
  	        
			-- Saat ve dakikayı ayarlamak için alarm saatini değiştirmek
  			-- modify alarm time to set hour and minute
  			tmAlarm.hour = h;
  			tmAlarm.min = m;
			tmAlarm.sec = 0;
			
	        -- Alarm zamanının zaman damgası olsun
			-- get the time-stamp of alarm time
			local nTimeStamp = os.time(tmAlarm);
	     
	     	-- Küresel tabloya bu zaman damgası ekleme
			-- add this time-stamp to global table
			table.insert(tblAlarmsTable,nTimeStamp);
	        
			
			-- Ve kullanıcıya alarm görsel göstermek için liste için kullanıcı - dostu sürüm eklemek
			-- and add a user-friendly version to listbox to show alarms to user visually
			ListBox.AddItem("ListBox1", string.format("Alarm : %02.f:%02.f",h,m), "");
		end
	end
end
Page.StartTimer(1000, ID_ALARM_TIMER);
Edited by yakupnun
Link to comment
Share on other sites

  • Editor
if(#tblSavedAlarms[i] > 0) then

bu şekilde olmaz. Diyez işareti Count anlamına gelir. Yani bir rakam array olamaz. O yüzden. başındaki diyez işaretini kaldırıp

if(tblSavedAlarms[i] > 0) then

Bu şekilde kullanırsanız çalışacaktır.

Edited by pairs
Link to comment
Share on other sites

evet kod bu şekilde çalışıyor yalnız ben sizin dün verdiğiniz apz deki kodları bununla birleştirince hata veriyor burada ki hatalar nelerdir nasıl düzeltebilirim

 
Hocam ,bir önceki gönderdiğim örneği sizin yapmaya çalıştığınız yönde tekrar düzenledim
hafta içi ve hafta sonu ayrımı yapıp ,eğer hafta içi ise hafta içi listesini ,hafta sonu ise hafta sonu listesini yüklüyoruz
siz alarm ekleme yapmadığınız için alarm ekleme ve silme ile ilgili alanları sildim ,kafa karışıklığını önlemek için
 
hafta içi ve hafta sonu listesi için olan txt dosyalarının yollarını Global Functions bölümünden düzenliyebilirsiniz

PT_ALARMS_FILE_WEEKDAYS = _SourceFolder.."\\AutoPlay\\Docs\\weekdays.txt"
PT_ALARMS_FILE_WEEKEND = _SourceFolder.."\\AutoPlay\\Docs\\weekend.txt"

On Show bölümüne Türkçe açıklamalarda ekledim ,örnek proje şu haliyle çalışıyor
 
sizin yapmanız gereken ise ,sunucudan verileri çekip bu txt dosyalarına yazmak tır
proje ,program kapanmasa bile otomatik olarak bir sonraki güne alarmları ayarlar
 
ancak AMS uygulamalarının life-time ı çok uzun değil bu tabiki AMS nin bir kusuru normalde bir uygulama windows kapatılmadığı sürece çalışması lazım ama
malesef AMS uygulamaları 2-3 günde şişiyor ve runtime hatası veriyor , (bizzat denedik)
 
yeni projeyi buradan indirebilirsiniz

https://mega.nz/#!LVFBTLyR!MyAoynbcFdNlRpJbZuC9omZArlStvIKF-z8oSvGOpHE

herhangi bir sorun olursa ,yine yardımcı olurum :good:
 
 

if(#tblSavedAlarms[i] > 0) then
bu şekilde olmaz. Diyez işareti Count anlamına gelir. Yani bir rakam array olamaz. O yüzden. başındaki diyez işaretini kaldırıp
if(tblSavedAlarms[i] > 0) then
Bu şekilde kullanırsanız çalışacaktır.

 

tblSavedAlarms[i] bir string içeriyor ve # operatörüde uzunluk verdiğine göre buda o satırdaki string in uzunluğu anlamına geliyor
 

if(#tblSavedAlarms[i] > 0) then
-- Eğer tablonun i ile belirtilen indexindeki string in uzunluğu 0 dan büyük ise (boş değilse)  

Lua da stringlerin uzunluğu önceden sayılıdır , yani Lua her string in uzunluğunu string objesi içinde bir değişkende tutar
Ve bu değişkene ulaşmanın en kısa yolu bu operatördür
 
o kod bu şekildede olabilirdi , ama bu sefer bir string karşılaştırması yapıyoruz , # operatörüne göre biraz daha zaman alır

bunu bende çoğu zaman kullanıyorum ,ama optimizasyon için # operatörünü kullanmak en iyisi

if (tblSavedAlarms[i] ~= "") then

yada böylede yazılabilirdi , ama burada bir action kullanıyoruz ,ve buda extra iş yükü artı ,bu action stringi baştan sona sayıyor
basitçe anlatım ile strlen uyguluyor ve geriye bir uzunluk bildiriyor ve sonra biz bunu 0 ile karşılaştırıyoruz

if(String.Length(tblSavedAlarms[i]) > 0) then
Link to comment
Share on other sites


hafta içi ve hafta sonu listesi için olan txt dosyalarının yollarını Global Functions bölümünden düzenliyebilirsiniz

PT_ALARMS_FILE_WEEKDAYS = _SourceFolder.."\\AutoPlay\\Docs\\weekdays.txt"
PT_ALARMS_FILE_WEEKEND = _SourceFolder.."\\AutoPlay\\Docs\\weekend.txt"

On Show bölümüne Türkçe açıklamalarda ekledim ,örnek proje şu haliyle çalışıyor
 
sizin yapmanız gereken ise ,sunucudan verileri çekip bu txt dosyalarına yazmak tır
proje ,program kapanmasa bile otomatik olarak bir sonraki güne alarmları ayarlar
 

 

Çok teşekkür le türkçe açıklamalardan sonra anladım nasıl yapıldığını gunucudan veri çekmek demişsin ben veri çekmek istemiyorum bunun direk  ana makinadaki weekdays.txt  weekend.txt leri okuyup ordan çalışmasını istiyorum glo baldan dosya yolunu değiştirdim ama okuma di bir ağdan txt okutmak için farkli bir kod mu kullanıyoruz? 

ID_ALARM_TIMER = 100;
PT_ALARMS_FILE_WEEKDAYS = _SourceFolder.."AKASA-PC\\HG_Zil_3.32\\saatler\\weekdays.txt"
PT_ALARMS_FILE_WEEKEND = _SourceFolder.."AKASA-PC\\HG_Zil_3.32\\saatler\\weekend.txt"
tblAlarmsTable = {};


tblDays = {"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"};

globaldeki yolu böyle düzenledim 

Edited by yakupnun
Link to comment
Share on other sites

 
Çok teşekkür le türkçe açıklamalardan sonra anladım nasıl yapıldığını gunucudan veri çekmek demişsin ben veri çekmek istemiyorum bunun direk  ana makinadaki weekdays.txt  weekend.txt leri okuyup ordan çalışmasını istiyorum glo baldan dosya yolunu değiştirdim ama okuma di bir ağdan txt okutmak için farkli bir kod mu kullanıyoruz? 

ID_ALARM_TIMER = 100;
PT_ALARMS_FILE_WEEKDAYS = _SourceFolder.."AKASA-PC\\HG_Zil_3.32\\saatler\\weekdays.txt"
PT_ALARMS_FILE_WEEKEND = _SourceFolder.."AKASA-PC\\HG_Zil_3.32\\saatler\\weekend.txt"
tblAlarmsTable = {};


tblDays = {"Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"};
globaldeki yolu böyle düzenledim 


merhaba hocam
su anda teldeyim detayli cevap veremiyorum

en iyisi google ile 'UNC Path' kelimesini arayip buldugunuz sayfalardaki orneklere bakin

ulasmaya calistiginiz klasor agda paylasilmis olmali ,arti yetkilendirme gerekmemeli

son olarak _SourceFolder dehiskeni dosya yolunun basinda olmamali ,o dehisken uygulamanin o anda icinde oldugu klasoru belirtir ,,bu yuzden unc path in basinda olmamali
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...