PDA

View Full Version : حرفه ای: پیدا کردن طول یک رشته و جداکردن کارکترها



M.KH-SH
جمعه 13 آبان 1390, 13:09 عصر
سلام خسته نباشین
امیدوارم که کسی بلد باشه جواب بده:

مثال:::

update tb_tst set x1=@x1 , mohammad=@mohammad , reza=@reza , tell=@tell , .... where tell=''

حالا خط بالا رو تصور کنین
تو این خط 4تا متغیر تعریف شده با نام های:::

@x1
@mohammad
@reza
@tell
و ....

این شرایط ثابت نیست امکان داره 12 متغیر باشه یا امکان داره 2 تا باشه و طول کارکتر ها هم معلوم نیست

حالا من میخوام این کار رو به جای اینکه خودم انجام بدم و تک تک رو با دست در بیارم میخوام با حلقه این کار رو انجام بدم

که::::
Dim f As Integer = -1
Dim i, x As Integer
Dim txt, n(10) As String
txt = RichTextBox1.Text
Dim b(900) As String
Dim c As Boolean
ListBox1.Items.Clear()
For i = 1 To Len(txt)
n(0) = Mid(txt, i, 2)

If n(0) = "=@" Then
Dim h As Integer = ((Len(txt)) - i)
n(1) = Mid(txt, h)
Me.Text = n(1)
For x = 1 To Len(n(1))
n(2) = n(2) & Mid(n(1), x, 1)
n(3) = Mid(n(1), x, 1)
If n(3) = " " Then
f += 1
b(f) = n(2)
n(2) = ""
Exit For
End If
Next
End If
Next

For i = 0 To f
ListBox1.Items.Add(b(i))
ListBox1.Refresh()
Next

کد بالا رو نوشتم اما جواب درست نمیگیرم

حالا باید در نظر داشته باشیم که تو کوئری نوشتن معمولا از کارکتر اسپیس بین متغیر ها استفاده میشه و بعضی اوقات هم استفاده نمیشه

دقیقا باید کد حالت شناور داشته باشه و همه جهات رو در نظر بگیره

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

بابته شلوغی کد هم معذرت میخوام

salehbagheri
جمعه 13 آبان 1390, 13:28 عصر
قبل از اینکه پاسخ بدم میتونم بپرسم که چه نیازی به این کار دارید؟ یا هدفتون از این کار چیه؟

M.KH-SH
جمعه 13 آبان 1390, 13:33 عصر
دوست عزیز دارم برای راحتی کار با بانک هایی که فقط از varchar توی اونا استفاده میشه یک کامپوننت تهیه میکنم که از همه مهمتر برای یکی از دوستام هست که تازه داره کار با بانک رو شروع میکنه
البته این میتونم بگم که نیازی به جداکردن نیست به طور خیلی ساده میشه همه رو تو همون کوئری وارد کرد ولی این به درد نمیخوره چون pk رو نمیتونیم تغیر بدیم و خیلی بد هست

انشاالله بعد از جواب گرفتن این قسمت کامپوننت رو میسازم و برای سایت هم میزارم تا دوستانی که تازه کار هستن استفاده کنن

تنها مشکلی که این کامپوننت داره (در انالیز اولیه) نوع فیلد ها هست که اونم میشه با مقداری کدنویسی بیشتر مشکل رو حل کنم ولی بیشترین چیزی که فکر منو مشغول کرده پیدا کردن همون متغییر ها هست

salehbagheri
جمعه 13 آبان 1390, 14:10 عصر
راه و روش جداسازی زیاده!

یکی از بهترین ها برای اینکار استفاده از Regular Expressions هست! یعنی ابتدا یک الگو برای موارد مورد نیاز ایجاد میکنید و سپس با استفاده از اون الگو، متنهای Match شده رو جداسازی میکنید! (من فعلا با Regex آشنایی کامل ندارم ولی میتونید به راحتی الگوی دلخواه خودتون را با کمی جستجو پیدا کنید)

روش بعدی شکستن متن به قطعات کوچکتر هست!

یعنی ابتدا بر اساس علامت (,) متن مورد نظر رو بشکنید (Split) و سپس بر اساس علامت (=) و یا (@) اینکار رو انجام بدید! در این صورت یکی از خانه های آرایه ایجاد شده دقیقاً متنی هست که شما دنبال آن هستید!

M.KH-SH
جمعه 13 آبان 1390, 14:24 عصر
درسته تو کد بالا جوابی مشابه پیدا میشه
الگو برای جداسازی بر اساس کارکتر های , = @ " " هست (دبل کوتیشن = اسپیس)

این کار شدنی هست ولی من دیگه فکرم به بنبست خورده برای جداساسزی هرچقدر حلقه ها رو جابجا میکنم و طول متغییر ها رشته ای رو تغییر میدم جواب مناسبی که مد نظر هست رو نمیگیرم.

اساس جداسازی که در کد استفاده کردم رسیدن به کارکتر =@ هست که بعد از اون میاد جدا میکنه تا زمانی که به اسپیس یا فضای خالی برسه
این باید وارد یک ارایه بشه از 900 تای که تعریف کردم
خونه ارایه هم که با جمع کردن متغیر F مشخص میشه
به صورت تئوری کاملا این حرکت درسته ولی از لحاظ کدی به مشکل میخوره
مشکل در پرکردن ارایه و جداسازی متن هستش
برای جداسازی از یک جمع کارکتری ساده استفاده کردم که باید در اخر جوب مورد نظر رو بده ولی این طور نبود و مثلا برای 3متغیر بیشتر فقط یک متغیر رو نشون میده یا اگه تعداد کارکتر ها کم یا زیاد بشه هم باز یک حالت دیگه رو نشون میده

از طریق کد بالا امکان داره این مشکل برطرف بشه یا نه؟

salehbagheri
جمعه 13 آبان 1390, 15:02 عصر
از طریق کد بالا امکان داره این مشکل برطرف بشه یا نه؟

کد شما کاملاً غیر استاندارد یا به قول استاد موسوی بسیار بدبو هست! احتمال اینکه انجام بشه هست ولی ممکنه با کوچکترین تغییر در متن، دوباره به مشکل بخورید! همونطور که گفتم از Regular Expression ها استفاده کنید! یا اینکه از روش دومی که معرفی کردم استفاده کنید!

شاید روش بهتری هم باشه!

M.KH-SH
جمعه 13 آبان 1390, 16:04 عصر
در غیر استاندارد بودن اون کد شکلی نیست
امکان داره در باره Regular Expression توضیح بدین