PDA

View Full Version : جدا کردن عدد از متن با فرمت عدد



Nazir Ahmad
دوشنبه 25 شهریور 1392, 09:14 صبح
سلام دوستان
تو تالار خیلی گشتم اما موضوع مورد نظرم پیدا نشد.
یه فیلد داریم به نام کلاس, که این فیلد شامل لیست تمام کلاسهای یک مدرسه است. مثلا: 1 (الف) , 1 (ب), 2 (الف) , 2 (ب) و الی آخر که ممکنه هر کلاس به تعداد 10 شعبه هم داشته باشه . حالا من وقتی این فیلد رو Sort میکنم به دلیل اینکه فیلد تکست هست به ترتیب گلاس و شعبه های اون مرتب نمیشه . اگر دوستان پیشنهادی دارند لطفا بیان کنند.
اما نظری که به فکر من رسید برای رفع مشکل میخوام اعداد رو از این فیلد جدا کنم و در یک فیلد جدید داشته باشم به شکلی که این اعداد جدا شده با فرمت عدد باشه نه با فرمت متن.
من این کار رو با استفاده از تابع Left انجام دادم اما مشکل همونه که گفتم و با فرمت متن جدا میشه.
ممنون میشم اگر راهنمایی کنید.

یا حق

laia56
دوشنبه 25 شهریور 1392, 09:31 صبح
سلام دوست عزیز
این فایل قبلا در سئوال مشابه من توسط یکی از اساتید ساخته شده ببین بدردت میخورد

Nazir Ahmad
دوشنبه 25 شهریور 1392, 13:51 عصر
سلام دوست عزیز
این فایل قبلا در سئوال مشابه من توسط یکی از اساتید ساخته شده ببین بدردت میخورد
ممنون دوست عزیز دقیقا منظورم همین بود.
تو دیتابیس خودم امتحان کنم اگر مشکلی بود میگم

یا حق

salambeshoma
پنج شنبه 21 آذر 1392, 17:53 عصر
سلام فایل ضمیمه باز نشد خیلی مهمه اگه تونستین کمک کنین .. متشکر

Nazir Ahmad
شنبه 23 آذر 1392, 09:30 صبح
سلام فایل ضمیمه باز نشد خیلی مهمه اگه تونستین کمک کنین .. متشکر
فایل ضمیمه مشکلی نداشت، اما فکر کنم چون ورژنش 2013 بوده برا شما باز نکرده.
اینم فایل با فرمت 2003

oskarimbns2621
جمعه 07 اردیبهشت 1397, 08:21 صبح
با سلام و احترام برنامه خوبی بود من هم خیلی بهش نیاز داشتم ولی برنامه ای که من نوشتم شماره نامه را می خواد از متن نامه جدا کنه که با توجه به اینکه تعداد اعدادش 16 رقمه ارور می ده میشه راهنمایی بفرمایید چطوری این مشکلو حل کنم ؟

mazoolagh
شنبه 08 اردیبهشت 1397, 10:19 صبح
با سلام و احترام برنامه خوبی بود من هم خیلی بهش نیاز داشتم ولی برنامه ای که من نوشتم شماره نامه را می خواد از متن نامه جدا کنه که با توجه به اینکه تعداد اعدادش 16 رقمه ارور می ده میشه راهنمایی بفرمایید چطوری این مشکلو حل کنم ؟

چون خروجی تابع معرفی شده از نوع LONG INTEGER هست به محدودیت برمیخورید.
تابع رو بصورت زیر ویرایش کنید:
Function NumberInText(strNumAndText As VARIANT) As VARIANT
strNumAndText = Nz(strNumAndText, "0")
Dim k As Integer
Dim N As String
For k = 1 To Len(strNumAndText)
If IsNumeric(Mid(strNumAndText, k, 1)) Then
N = N & Mid(strNumAndText, k, 1)
End If
Next
NumberInText = CDEC(N)
End Function


تا 28 رقم جواب میده

mazoolagh
شنبه 08 اردیبهشت 1397, 10:21 صبح
اما استفاده از REGULAR-EXPRESSION بمراتب بهتر هست:
Function RipNonDigit(s As Variant) As Variant
s = Nz(s, "0")
Dim RX As Object
Set RX = CreateObject("vbscript.regexp")
RX.Global = True
RX.Pattern = "\D"
RipNonDigit = CDec(RX.Replace(s, ""))
End Function