PDA

View Full Version : مبتدی: مشکل با مقایسه دو text



abbasalifix
یک شنبه 09 آذر 1393, 14:38 عصر
سلام
من میخوام وقتی محتوای داخل text1 برابر کد 92900638B1 حالا یک مسیج باکس ok رو به من نشون بده
برای همینم اون کد رو داخل یک تکست قرار دادم و با محتوای تکست دیگه مقایسه کردم اما فرمان نشون داده نمیشه
یعنی کد ها مثل هم میشن اما فرمان if تشخیصش نمیده که بعدش بتونه مسیج ok رو نشونش بده

مشکل کارم کجاست

Private Sub Timer1_Timer()
Text1.Text = Text1.Text + MSComm1.Input
If Text1.Text + MSComm1.Input = Text2.Text Then
MsgBox "ok"
End If

End Sub

126163

mojtabamalaekeh
یک شنبه 09 آذر 1393, 17:31 عصر
اگه text1 «کد» باشه و mscom1 «نویسی» باشه
توی تایمر، مقدار text1 میشه «کدنویسی»
بعد توی if اومدین چک کردین آیا «کدنویسینویسی» برابر text2 هست یا نه؟
منظورم اینه که مقدار مورد بررسیتون «نویسی» 2 بار آخرش اومده!

شما Breakpoint بذار روی خط اول کد توی تایمر، بعد ماوس رو ببر روی مقادیر ببین چه چیزایی تو حافظه دارن زندگی میکنن.
برای دیدن مقادیر چندتایی هم ماوس رو بکش روشون که Select بشن بعد ماوس رو نگه دار رو مقدار سلکت شده تا حاصل رو ببینی.

البته اونقدر ساده است که شاید تا الان جواب گرفته باشی ولی کدنویسی بدون Breakpoint و اجرای خط به خط ستمه!

abbasalifix
یک شنبه 09 آذر 1393, 19:34 عصر
من همه جوره رو امتحان کردم حتی با متغییر

اینم این مدلی که شما میگین با عکس ها نشون دادم اما جای تعجب داره !!!
http://s5.picofile.com/file/8154548084/1.png
http://s5.picofile.com/file/8154548126/2.png
http://s5.picofile.com/file/8154548150/3.png
http://s5.picofile.com/file/8154548200/4.png

abbasalifix
یک شنبه 09 آذر 1393, 20:34 عصر
اگه بتونم یک بار مقدار رو بخونم و داخل یک متغییر ذخیره کنم هم درست میشه اما مشکل اینجاست که مقدار رو میتونم بخونم اما بعد از استوپ کردن برنامه مقدار پاک میشه باید چیکارش کنم که این مقدار داخل یک محیطی باقی بمونه

mojtabamalaekeh
یک شنبه 09 آذر 1393, 20:42 عصر
با این عکسایی که گذاشتی فقط یه احتمال میتونم بدم. اینکه MSCom1.Input یه کاراکتر خاصی توش باشه که نه توی TextBox ها قابل نمایشه نه توی Tooltipهای VB موقع Trace کردن!
شما یه Len از دوتا مقداری که داری با عملگر = مقایسه شون میکنی بگیر. اگر طول متنشون هم برابر بود من دیگه حرفی ندارم؛ خود بیل گیتس باید جوابگو باشه :لبخند:

باید چیکارش کنم که این مقدار داخل یک محیطی باقی بمونه
گمونم تنها راهش ذخیره توی فایل روی هارده.

abbasalifix
یک شنبه 09 آذر 1393, 22:00 عصر
طول رشته هام باهم یکی نیست !
چطور میتونم یکی کنمش ؟

mojtabamalaekeh
یک شنبه 09 آذر 1393, 22:11 عصر
پروژه کارش چیه؟

اگه طوری هست که فقط کاراکترهای الفبا (a..z A..Z) و عددی (0..9) رو لازم دارین به حلقه بذارین از اول تا آخر MSComm1.Input و کاراکترهای مورد نیاز رو توی یک متغیر رشته ای بذارین و اضافی ها رو نادیده بگیرین.

یا با داده های مختلف سعی و خطا کنید ببینید شاید همیشه یکی دو کاراکتر ثابت هستن که اول یا آخر Input اضافه میشن. اگه اینجوری بود با Mid$ درستش کن.

abbasalifix
یک شنبه 09 آذر 1393, 22:15 عصر
ببینید این کد ها کد های کارت های rfid هستن و هر کارتی یک کد خاص خودش رو داره و باید این کد ها ثبت و مقایسه بشن
الان کدی که من از دستگاه توی کامپیوتر از طریق سریال میگیرم داخل برنامه 10 کاراکتر هست اما برنامه میگه 12 تا هست !
قضیه چطوریه که 10 تای اون فقط نشون داده میشه ؟ چیکارش کنم که طول رشته رو 2تا کم کنم که عددش هم بهم نریزه

mojtabamalaekeh
یک شنبه 09 آذر 1393, 22:23 عصر
ببینید این دوتا کاراکتر اضافی چی هستن؟
اولشن؟
آخرشن؟


Dim MyInput As String
MyInput = CStr(MSComm1.Input)
For i = 1 To Len(MyInput)
MsgBox CStr(Asc(Mid(MyInput, i, 1))) + " : " + Mid(MyInput, i, 1)
Next

abbasalifix
یک شنبه 09 آذر 1393, 22:57 عصر
مدار و برد و برنامه دستگاه رو عوض کردم جواب میده - الان سه تا کارت رو بهش تعریف کردم درست میشناسه اما اول و آخر کد گرفته شده چند تا کد اضافی دارم چطور میتونم حذفشون کنم ؟

abbasalifix
دوشنبه 10 آذر 1393, 03:33 صبح
سلام
ممنونم مهندس که کمک کردین :تشویق:
پروژه رو راه انداختم
همه قسمت ها درست شد و درست کار می کنن فقط همین یه تیکه مونده بود که اونم راه افتاد
الان کارت میزنی عکس هم نشون میده :لبخند:

mojtabamalaekeh
دوشنبه 10 آذر 1393, 07:07 صبح
خواهش می کنم.
تبریک میگم :لبخندساده:

ایلیا آخوندزاده
دوشنبه 10 آذر 1393, 11:51 صبح
سلام
من میخوام وقتی محتوای داخل text1 برابر کد 92900638B1 حالا یک مسیج باکس ok رو به من نشون بده
برای همینم اون کد رو داخل یک تکست قرار دادم و با محتوای تکست دیگه مقایسه کردم اما فرمان نشون داده نمیشه
یعنی کد ها مثل هم میشن اما فرمان if تشخیصش نمیده که بعدش بتونه مسیج ok رو نشونش بده

مشکل کارم کجاست

Private Sub Timer1_Timer()
Text1.Text = Text1.Text + MSComm1.Input
If Text1.Text + MSComm1.Input = Text2.Text Then
MsgBox "ok"
End If

End Sub

126163

باسلام
خوشحالم که کارتون راه افتاد
اینم یه نمونه ساده تر :

vbhamed
سه شنبه 11 آذر 1393, 06:34 صبح
سلام

از جهت اينكه براي بعدا به مشكلي برنخوريد موارد زير رو در نظر بگيريد

1 - با دستور text1 = text1 & MSComm1.input يك رشته از بافر دستگاه خونده ميشه و در تكست باكس ذخيره ميشه دفعه بعد نميشه اين دستور رو فراخواني كرد و انتظار داشت همون رشته قبلي رو بده، يكبار كه خونده شد از بافر پاك ميشه حتي اگر خوندنش اينطوري باشه كه با ماوس روش بريد

2 - معمولا آخر رشته خونده شده شامل كاراكترهاي vbCr و vbLf يا به اختصار vbCrLf (همون كاراكتر Enter و سطر بعد خودمون) هستن كه آخر رشته مياد ولي در ظاهر چيزي ديده نميشه، اما اگر شما محتويات تكست باكس رو نگاه مي‌كنيد مي‌بينيد به صورت خطوط جداگانه ظاهر شده و اين يعني آخر هر خط Enter خورده كه رفته سطر بعد البته اگر چند خط نداريد دليل مي‌تونه اين باشه كه خاصيت MultiLine تكست باكس شما True نيست، ضمنا دليل اينكه ظاهرا 10 كاراكتره اما تعداد رو 12 تا ميده هم همينه

3 با دستور زير مي‌تونيد vbCrLf رو حذف كنيد و مقايسه رو انجام بديد، عمل حذف در دو مرحله انجام شده چون بعضي مواقع فقط يكي از كاراكترهاي vbCr يا vbLf وجود داره.
Dim s$
s = MSComm1.input
s = Replace(s, vbCr, "")
s = Replace(s, vbLf, "")
If s = text2 Then
'.
'.
End If