رفتن به مطلب
  • 0

گرفتن مقدار null در map


arastooms

سوال

با سلام به همه عزیزان
به مشکل عجیبی برخورد کردم در تشخیص مقدار null در یک map

یک مپ در برنامه دارم که 3 تا کلید داره و مقدار 
اسم=علی

فامیل=احمدی

تلفن =null

میخام سه مقدار رو بگیرم تو یه لیبل نمایش بدم
اگر تلفن یا اسم یا فامیل هر کدوم null بود بنویسه " معرفی نشده "

ولی نمیتونم این کار رو انجام بدم و تشخیص نمیده 

	Log("Key:Value ")
	For i = 0 To map.Size - 1
		Log( map.GetKeyAt(i)&"="&map.GetValueAt(i))
	Next

بعد اینها لوگ میشه

name=ali
family=ahmadi
tel=null

حالا باید بگم اگر مقدار برابر null بود فلان کار رو انجام بده !
 

If map.Get("tel")= Null Then
		log("مقداری وجود نداترددددددددددددددد")
		Else
		log("map.Get("tel"))
	End If

مشکل اینجاست که تشخیص نمیده و علتش رو هم نمیدونم

یه پست هم در سایت مرجع پیدا کردم ولی متوجه نشدم آخرش چی شده !!
Bug? - Testing string value to Null | B4X Community - Android, iOS, desktop, server and IoT programming tools

ممکنه راهنمایی بفرمایید مشکل کار کجاست؟
با تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

7 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

سلام

خب چرا دوباره تو حلقه for دنبالش نمی گردید؟

	For i = 0 To map.Size - 1
		If map.GetValueAt(i)=Null Then
			Log("مقداری وجود نداترددددددددددددددد")
		Else
			Log("map.Get("tel"))
		End If
	Next

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 5 ساعت قبل، Amir - B گفته است :

سلام

خب چرا دوباره تو حلقه for دنبالش نمی گردید؟


	For i = 0 To map.Size - 1
		If map.GetValueAt(i)=Null Then
			Log("مقداری وجود نداترددددددددددددددد")
		Else
			Log("map.Get("tel"))
		End If
	Next

 

سلام و تشکر 

به نظر میاد پیشنهاد شما روش استانداردی نیست دوست عزیز و اینکه من با این کد مشکل دارم
If map.GetValueAt(i)=Null Then
شما دوباره استفاده کردید
 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

چون (مقدار null )  یک متغییر string و رشته ای نیست! یک متغییر عددی هم نیست !

 لذا در شرط دهی ها : هیچ وقت برنامه null رو برابر متغیر رشته ای یا متغییر عددی نخواهد شناخت ! توضیح :  عدم و (هیچ چی) که برابر یه ( چیز وجودی)مثل عدد یا رشته متغییر نمیشه که ! (متغییر همیشه موجوده والا متغییرنمیشدکه!)

 

البته شرط رو اینطوری تغییرش بدهید ببینید درست میشه یا نه ! (توضیح : اگر متغییر tell غیر از null بود مقدارش نمایش داده بشه والا بگه مقداری وجودندارد)

If map.Get("tel")<> "Null" Then
		       log("map.Get("tel"))
		Else
			log("مقداری وجود ندارد")
		
	End If

 

ولی در هرصورت  پیشنهاد اینه که  : 

اگه مطالبو از دیتابیس میخونه : یه راه حل ساده اینه که در داخل دیتابیس بطور خودکار کاراکترهای null رو خود دیتابیس  مقدار دهی کنه

مثلا اگر شماره تلفنی ثبت و داده نشود مقدار tell رو خودکار برابر 0 قرار دهد ،

 

 سپس در برنامه بجای عبارت null  اون مقدار پیشفرض مثلا "0" رو قرار بدهید که اگر مقدار tell برابر صفربود فلان پیغامو قرار بدهد،

 

این خصوصیت دیتابیس رو جهت مقدار دهی خودکار فیلدهای null  رو برای چنین مواقعی گذاشته اند .از سایر خطاها و ارور های مزاحم مشابه هم این روش جلوگیری میکنه !

 

بنده هیچ وقت هیچ فیلد حاوی کاراکتر عددی از دیتابیس آفلاین یا آنلاینم رو  خالی و null نمیذارم وهمیشه در ابتدا یه مقدار پیش فرض بهش میدم .

 

البته اگر دیتابیس هم نباشه ، واسه حالتهای دیگه هم در اول کار میشه همین روش جایگزینی با یک کاراکتر پیش فرض رو میشه استفاده کرد .

 

null گذاشتن مقادیر عددی ، در خیلی جاها مشکل سازه ،تا ضرورتی بهش نباشه ازش استفاده نمیشه وکنارگذاشته میشه .

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 14 ساعت قبل، نورنما گفته است :

سلام

چون (مقدار null )  یک متغییر string و رشته ای نیست! یک متغییر عددی هم نیست !

 لذا در شرط دهی ها : هیچ وقت برنامه null رو برابر متغیر رشته ای یا متغییر عددی نخواهد شناخت ! توضیح :  عدم و (هیچ چی) که برابر یه ( چیز وجودی)مثل عدد یا رشته متغییر نمیشه که ! (متغییر همیشه موجوده والا متغییرنمیشدکه!)

 

البته شرط رو اینطوری تغییرش بدهید ببینید درست میشه یا نه ! (توضیح : اگر متغییر tell غیر از null بود مقدارش نمایش داده بشه والا بگه مقداری وجودندارد)


If map.Get("tel")<> "Null" Then
		       log("map.Get("tel"))
		Else
			log("مقداری وجود ندارد")
		
	End If

 

سلام و سپاس از توضیحات کامل شما
در واقع من دیتابیسی دارم که بیش از 25 ستون داره و داده های کاربران و تعداد کارباران بالای یک میلیون یوزر هست
خوب می بینید که حجم دیتابیس بسیار بسیار بالا هست 
برای اینکه حجم دیتابیس مقداری کم تر بشه گفتم وقتی کاربر فیلد رو پُر نکرده بود موقع ثبت داده ها اونها رو پیش فرض null قرار دادم تا حجم داده ها بیاد پایین 
و اگر قرار باشه یک یا صفر قرار بدم هر کدوم 8 بیت از حافظه رو میگیره و به نظرم استاندارد نیست
از طرفی اگر هم مثل الان null باشه وقتی تو برنامه دوباره داده ها رو میگیرم به مشکل می خورم 
به نظر شما هنوز هم پیشنهاد میکنید با این تفاسیر از مقار 1 یا 0 استفاده کنم ؟؟
با تشکر 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 ساعت قبل، arastooms گفته است :

سلام و سپاس از توضیحات کامل شما
در واقع من دیتابیسی دارم که بیش از 25 ستون داره و داده های کاربران و تعداد کارباران بالای یک میلیون یوزر هست
خوب می بینید که حجم دیتابیس بسیار بسیار بالا هست 
برای اینکه حجم دیتابیس مقداری کم تر بشه گفتم وقتی کاربر فیلد رو پُر نکرده بود موقع ثبت داده ها اونها رو پیش فرض null قرار دادم تا حجم داده ها بیاد پایین 
و اگر قرار باشه یک یا صفر قرار بدم هر کدوم 8 بیت از حافظه رو میگیره و به نظرم استاندارد نیست
از طرفی اگر هم مثل الان null باشه وقتی تو برنامه دوباره داده ها رو میگیرم به مشکل می خورم 
به نظر شما هنوز هم پیشنهاد میکنید با این تفاسیر از مقار 1 یا 0 استفاده کنم ؟؟
با تشکر 

با  bolean  بهتر نیس؟  true , false?

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/06/29, 17:16:04، mehran3d گفته است :

با  bolean  بهتر نیس؟  true , false?

 

نه دوست عزیز همون حجم 0 و 1 رو میگیره 
روش استانداردی نیست
شما یا تو دیتابیس هیچی نداری در ستون مورد نظر و یا یه اسم ذخیره شده
حالا چرا نمیتونم اون هیچی رو تو برنامه بیسیک تشخیص بدم شده مشکل!
ممنون میشم عزیزان اگر کسی مطلع هست من رو راهنمایی کنه 
مرسی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بله حجم دیتابیس  اگه با این تعداد یوزر باشه که زیاد میشه و به درد هاست دارای فضای محدود وبسیار کم نمیخوره !

کد زیر رو امتحان کردید ؟

 

If map.Get("tel")<> Null Then
		       log("map.Get("tel"))
		Else
			log("مقداری وجود ندارد")
		
	End If

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...