الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحويل من String إلى Integer ؟؟؟

مغلق
بدأه falantokh في 1 يونيو 2003 · 21 رد · 3,304 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي حقل يستخرج قيمة من نوع String ، وأريد دالة تقوم بتحويلها إلى Integer

بمعنى .. أن قيمة الحقل الـ String عبارة عن حروف وأرقام .. مثل : ABC123، فهل هناك دالة أستخدمها لتحويل هذه القيمة إلى Integer ؟؟

دمتم والله يحفظكم..

#2

السلام عليكم

ممكن استخدام دالة Val للتحويل حتى وإن كان النص يحتوي على حروف بشرط أن تكون على يمين النص وليس قبله .

وهذه دالة عملتها بشكل سريع .. إذا أردت التعديل عليها لاحاقا قمنا بذلك :

Function Str2Int(ByVal InStrng As Variant) As Long

  Dim StrLn As Long

  Dim Cntr As Long

  Dim NewStr As String

  

  Str2Int = 0

  StrLn = Len(Nz(InStrng))

  If StrLn = 0 Then Exit Function

  

  NewStr = ""

  For Cntr = 1 To StrLn

    Select Case Mid(InStrng, Cntr, 1)

      Case "0" To "9"

        NewStr = NewStr & Mid(InStrng, Cntr, 1)

    End Select

  Next Cntr

  Str2Int = CLng(NewStr)

End Function

قد يوجد دالة جاهزة ولكني لا أعلم بذلك .

تحياتي .

#3

نعم استاذي الكريم ابو هادي يوجد دالة جاهزة تقوم بعمل ذلك وهي الدالة :

CInt([هنا تضع اسم الحقل الذي به قيمة نصية])
#4

الأخوان الفاضلان/ أبو هادي ، مبتديء جداً .. أشكركما على ردكما، كما أشكركما على هذا الكود .. ولكن سؤالي لشخصيكما الكريم .. هل يقبل الكود تحويل أي قيمة String سواءً كانت أرقام أو حروف أو (كليهما) إلى قيمة Integer؟؟ أم أنه فقط يحوّل الحروف وحسب؟

(f)(f)(f)وفقكما الله لما يحب ويرضا .. ودمتم بحفظه.. ونفعكما ونفع بكما (f)(f)(f)

#5

السلام عليكم

الأخ falantokh يجب أن تجرب الكود وتخبرنا بالنتيجة .. نحن بالإنتظار :)

الأخ مبتدئ جدا .. أعتقد أن دالة Cint هي لتحويل الأرقام التي تحتوي على كسور إلى أرقام بدون كسور بعد تقريبها وهي كدالة Round في الأكسل وهي أخت لدالة Clng والفرق بينهما هو النطاق فقط .

تحياتي .

#6

أخي الفاضل / أبو هادي:

الكود الذي اقترحته .. لا يحقق ما أنشده .. حيث أنه يجب استخدامه في حالة أن تكون الحروف على يمين الرقم .. أي يجب ابتداء القيمة بـ رقم ثم بعد ذلك يتبعه أرقام .. وهذا كما أشرت لي سايقاً.

أما ما أطلبه هو دالة أو كود تقوم بتحويل الـ String المكون من حروف أو أرقام أو كليهما إلى رقم Integer .. سواءً أكانت الحروف قبل الأرقام أو العكس أي (الأرقام قبل الحروف).

أخي الفاضل/ مبتديء جداً:

الدالة التي أشرت لها .. يبدو أنها كما ذكر الأخ/ أبو هادي .. حيث قرأت عنها في الـ Help، غير أني قمت بتجربتها ... ولكن ظهر لي الخطأ التالي:

':Run-Time Error '13

Type Mismatch

???????????????????

وللتوضيح أكثر .. فأنا أستخرج قيمة String كـ متغيـّر من داخل الكود (وليس من حقل نصي داخل الفورم).. وأريد تحويلها إلى Integer من نوع Double ثم إسناد القيمة الناتجة بعد التحويل إلى متغير من نفس النوع بالطبع وهو Double لأن القيمة بعد تحويلها أصبحت من نوع Double ... وهذا ما فعلت ولكن ظهر لي الخطأ الذي ذكرت ....

Dim a As String

Dim b As Double

"a = "ABC123def

(b = CDbl(a أو (b = CInt(a >>> حسب طول الـString لو أردنا تحويلها إلى Integer أو Double ..... وكلاهما يعطي نفس الخطأ.

أرجو أن أكون قد أوضحت ما تعرضت إليه بعد تجربة ما ذكرتماه ....

دمتم بحفظ الله .. على أمل أن أجد لديكم أو أعضاء هذا المنتدى من يدلني على طريقة لعمل ذلك .. والله يوفقكم (f)(f)(f)

#7

السلام عليكم

اقتباس
الأخ falantokh يجب أن تجرب الكود وتخبرنا بالنتيجة .. نحن بالإنتظار :)

أخي لغاية الآن لم تجرب الدالة ولقد خلطت بين جوابي عن الدالة Val وبين الكود .

الكود هو لدالة تقوم باستبعاد الحروف من أي موقع كان بالنص وتبقي على الأرقام فقط مثلا نص يحتوي على القيمة A1B2C3D ستقوم بتحويلها إلى 123 ، كذلك هي تستبعد الفاصلة "." وعلامة "+" و "-" ، وإذا أردت الإبقاء على هذه العلامات قمنا بتعديل الكود للتناسب مع ما طلبت .. فقط جرب .

تحياتي .

#8

للعلم اخي falantokh :

حسب وصفك للمشكلة فاءن افضل شىء يقوم بذلك هي الداله الذي قام بعملها أبو هادي حيث فعلاً بعد تجربتها اثبتت روعتها فأعتقد هي طلبك المنشود بالضبط ,,,,,

ولك التحية

#9

أخي الكريم/ أبو هادي:

لك كل شكري وامتناني .. ولكن ما أردته هو تحويل الـ String إلى Integer.. وهذا ما أعنيه .. وليس حذف الحروف والإبقاء على الأرقام.

أعتقد أن شرحت ذلك بالتفصيل .. ولكن يبدو أن الجمل التعبيرية تخذلني أحياناً كثيرة .. فالمعذرة إذا اكتنف سؤالي هذا بعض الغموض.

وقد جربت الكود .... كيف لا!!! وأنت من سطره بأنامله مشكوراً (f)(f)(f)

ولكن أوضحت بأنه لا يحقق الغرض .. فأنا أطلب دالة تقوم بتحويل الرقم والحرف داخل الـ String إلى قيمتها .. حيث أننا نعلم أن لكل حرف قيمة معينة.

دمتم بحفظ الله .. وجزاكم الله كل خير

#10

السلام عليكم

أخي الكريم .. هل تقصد الـ Asci Code ؟

وإذا كان الجواب بنعم فاستخدم دالة Asc لتحويل الحروف والأرقام إلى آسكي . ولكنها لا تصلح لتحويل نص دفعة واحدة فهي تحول حرفا واحدا فقط . أما تحويل نص كامل إلى آسكي فلا أرى له جدوى ولكن يمكنك عمل ذلك بعد أن تفكك هذا النص وتحصل على الآسكي لكل حرف على حدى .

مع ملاحظة إمكانية عمل Reverse لعملية الآسكي باستخدام دالة Chr وتمرير كود الآسكي لها .

تحياتي .

#11

أخي الكريم/ أبو هادي ........ روعة هذه الفكرة .. أحسنت أخي

لدي ما يجعلني أقوم بتحويل الـ String إلى آسكي كود ... وهذا ما سوف أقوم به ... وأشكرك على هذه الفكرة ... حيث أنها الأقرب لتحقيق ما أريد

أشكرك من كل قلبي ... وبارك الله فيك وأوسع في رزقك (f)(f)(f)

#12

إخواني الشكر لكم كل الشكر على طرح هذا الموضوع (gift)(f)(f)(f)

أشكرك أخي ابو هادي

أخي falantokh أعرف ما يدور بخاطرك وأحاول تنفيذه ولكن يمنعني ضيق الوقت

الله يوفقك وتطرح المثال بعد التعديل والتحويل (f)(f)(f)

لكم خالص تحياتي رضا عقيل

#13

أخواني الأعزاء والأفاضل..

تحية لكم من الأعماق .. فـ السلام عليكم ورحمة الله وبركاته

في البداية أتقدم لكم بجزيل شكري وعميق امتناني لردودكم حول موضوعي بإمكانية تحويل الـ String إلى رقم سواء كان Integer من نوع Double أو Long أو خلافه.

وقد توصلت بـ فضل الله تعالى ثم بـ فضل ما طرحتموه من أفكار تم توظيفها لعمل ما ذكرت.

والحقيقة أنني مازلت أعمل على مثال لأقوم بطرحه في هذه المشاركه أو في موضوع جديد يحمل إسم // الجواب في تحويل الـ String إلى Integer، خلافاً لموضوعي الحالي الذي أخذ طابع السؤال.

عموماً سوف أطرح لكم ما توصلت إليه من كود لعمل ذلك .. وإذا تطلب الأمر إرفاق مثال بذلك ... فلكم ما أردتم .. فإلى ذلك الحين وإلى أن أنتهي من تجهيز المثال بعد عمل الـ Copy و الـ Paste من البرنامج الذي أعمل عليه حالياً .... لكم هذا الكود .... دمتم بحفظ الله ورعايته.

=========================================

الفكره: يقوم هذا الكود بإستخراج قيمة String معينة يتم إدخالها مثلاً في مربع نص .. ويكون هناك مربع نص آخر تظهر به نتيجة التحويل بمجرد الضغط على زر أمر ( أي أن الكود يتم كتابته هنا تحت زر الأمر هذا ) وبعد الضغط عليه يتم تحويل الـ String المكتوب في مربع النص الأول إلى آسكي بإستخدام الدالة ASC، حيث كما هو معلوم فإن الدالة ASC تقول بتحويل رقم أو حرف (واحد) فقط وليس مجموعة حروف أو أرقام .... لذا يقوم الكود التالي بتحويل كل حرف أو رقم إلى رقمه المقابل بالآسكي ثم يتم تجميع الأرقام الناتجه .. ليكون بعد ذلك لدينا مجموعة أرقاام تمثل الآسكي لكل حرف أو رقم داخل الـ String التي تمت كتابتها في مربع النص الأول....... وتظهر النتيجة في مربع النص الثاني.

=========================================

وهذا هو الكود:

Dim Counter As Integer

Dim Concat As String

"" = Concat

((For Counter = 1 To Len(Trim(Me.TxtFld1

(((Concat = Concat & Str(Asc(Mid(Me.TxtFld1, Counter, 1

Next Counter

((Me.TxtFld2 = Int(Val(Concat

=========================================

ولكم جزيل الشكر لكم جميعاً .. والأخ الفاضل/ أبو هادي .. الذي أرشدني إلى التحويل إلى آسكي ودفعني لمحاولة كتابة الكود حتى أتممته.

وكذلك الأخ العزيز/ رضا عقيل .... الذي طلب مني كتابة ما توصلت إليه .. والذي استحثـّـني لإتمام ذلك .. رغبة مني في طرحه لكم.

فـــــ وفقكم الله جميعا أسرة هذا المنتدى الكريم الذي يحمل أسماءً لها الفضل الكبير بعد الله في تحسن مستواي البرمجي لكثرة محاولاتي وتطبيق ما أجده من كود تخطـّه أناملكم الكريمة بين طيـّات صفحات المنتدى، جعلها الله في صحيفة حسناتكم.

و دمـــــــتـــــــــم

#14

أخي العزيز falantokh

أخي العزيز أبو هادي

أخي العزيز مبتدأ جداً

إخواني الكرام

السلام عليكم ورحمة الله وبركاته ...

سبق وتم طرح نموذج استنتاج رقم البروسسور وكان وما يزال فرصة جيده جداً لاستخدامه في الحماية ونموذج فريد ... وسبق وأن استخدمت رقم الهارد ديسك في الحماية ( في مشاركة طريقتي في الحماية ) وكان للأخوة بعض المآخذ عليه وهو إمكانية تغيير رقم الهارد كما نشاء أثناء عمل فورمات له أو بالنورتن قوست ....

ولذلك وجدت أن رقم البروسسور فرصة لاستخدامه في الحماية ..

ولكن

1- الرقم طويل وغير قابل لبناء معادلات عليه ( حسب معرفتي ) بهذا الشكل

2- الرقم يتحتوي على حروف مما يزيد الأمر تعقيداً

ووجدت موضوع هذه المشاركة مناسب جداً وهو استبعاد الحروف والإبقاء علىالأرقام فقط في هذه المشاركة

لذلك حاولت كثيراً تنفيذ هذه الدالة على مثال رقم البروسسور ولكني لم أوفق وذلك لضيق معرفتي بنظام الأكواد ولخبرتي البسيطة جداً في مثل هذه الأمور ..

لذلك أحيل إلى سيادتكم وكل من يستطيع أو يريد المساهمة من الأعضاء في تنفيذ التالي

1- إضافة إلى كود السريال نريد استبعاد الحروف من الرقم ثم وضع الرقم ثم اختيار 8 أرقام فقط أو تسع أرقام فقط أو أقل واستبعاد الباقي وذلك من خانات الآحاد ثم العشرات ثم المئات .... وهذا أي من اليمن ..

والغرض من ذلك هو تقليل عدد الأرقام حتى يتسنى لنا تنفيذ معادلات عليه دون أن يتعدى الحد الأقصى للحقل الرقمي وهو 9 أرقام .

فهل هذا ممكن ... وليكون داخل الوحده النمطية حتى لا يستطيع أحد الوصول إليه ..

**** كما أرجوا توضيح عمل الدالة أو الكود ولو بكلمات بسيطة حتى أستطيع تعلم كيفية بناء مثل هذه الدول والأكواد *****

ٌ‏م_çلمْçلى.rar

#15

استاذنا الكريم / ابوهادى - رضا عقيل

الاخوة الاعزاء

على ما يبدو ان الاخ falantokh لديه حقل نصى وادخل به ارقام ويريد ان يتعامل مع الحقل بالعمليات الحسابية

بالنسبة لكلام اخونا رضا لو تم عمل ذلك سيكون عظيما بالفعل وتحل هذا المشكلة والتى تكلمنا عليها كثيرا ... يا مسهل الاحوال يارب

80.gif

#16

up

#17

السلام عليكم

اخي الفاضل رضا عقيل .. لم يعمل معي المثال حتى بعد عملية التسجيل .

عموما كما فهمت أنت تريد أول 9 أرقام من كود السريال حيث تستطيع الحصول عليه بالطريقة التالية :

Label8.Caption = Left(Str2Int(oCpu.ProcessorID), 9)   'ارجاع الرقم التسلسلي

تحياتي .

#18

أخي أبو هادي

السلام عليكم ورحمة الله

الكود يعمل تمام وجربته عندي ( دالة left)

وأرفقت لك مثال رقم المعالج مرة أخرى وأتمنى أن يعمل معك

وما نريده هو

1- استبعاد الحروف

اختيار 8 أريقام فقط

لتسهل عمل معادله عليها

ولك التحية والتقدير

مع تحياتي أخوك رضا عقيل

getcpuid.zip

#19

السلام عليكم

أخي رضا عقيل .. صدقني لم يعمل معي وأعتقد الأسباب للتالي :

'WinXP شغال

 Set m_objWMINameSpace = GetObject("winmgmts:")

وما طلبته أخي لا يتعدى ما أوضحته لك سابقا ، فقط بدل رقم 9 بـ 8 كما تستطيع تبديل Left بـ Right لو أردت أول ثمانية أرقام من اليمين .

تحياتي .

#20

أخي ابو هادي

========

بالنسبة لدالة إرجاح عدد معين من الأرقام أو الحروف فهي تعمل تمام وأستطيع تغيير العدد كما أشاء وكما أشرت أنت سابقاً

=======

وبالنسبة للمثال

أنا أيضاً جربت المثال على XP ويعمل معي

ولذلك سأرفق لك الكود الذي يستنتج رقم المعالج وأرجوا تغييره ليستبعد الحروف من الرقم

ولقد حاولت كثيراً استخدام دالة استبعاد الحروف منه ولم أوفق

فأرجوا تجربته عندك أو تغييره ليصل إلى المطلوب وهو

استبعاد الحروف من الرقم

Option Compare Database



 Private asCpuPaths()      As String
 Private m_objCPUSet       As SWbemObjectSet
 Private m_objWMINameSpace As SWbemServices
'
Private Sub Form_Load()
'
 Dim oCpu As SWbemObject
 Dim sPath As String, sCaption As String
'
   Dim lElement As Long
 ReDim asCpuPaths(0) As String
'
 Set m_objWMINameSpace = GetObject("winmgmts:")
'
 Set m_objCPUSet = m_objWMINameSpace.InstancesOf("Win32_Processor")
'
 For Each oCpu In m_objCPUSet
'
      Label5.Caption = oCpu.Name 'ÇÑÌÇÚ ÇÓã ÇáãÚÇáÌ
'
               sPath = oCpu.Path_ & ""
            If sPath  "" Then
                lElement = IIf(asCpuPaths(0) = "", 0, UBound(asCpuPaths) + 1)
                ReDim Preserve asCpuPaths(lElement) As String
'
                asCpuPaths(lElement) = sPath
            End If
 Next
'
 Set oCpu = Nothing
 Set oCpu = m_objCPUSet(asCpuPaths(0))
     Label8.Caption = oCpu.ProcessorID    'ÇÑÌÇÚ ÇáÑÞã ÇáÊÓáÓáí
'

End Sub

كما أرجوا توضيح عمل الكود بكلمات بسيطه

أشكرك كثيراً لسعة صدرك وآسف على إزعاجك

مع تحياتي

أخوك رضا عقيل

#21

السلام عليكم

أخي رضا عقيل .. لقد عمل المثال معي في العمل وكان السبب هو نظام التشغيل حيث لا يوجد لدي XP في المنزل .

على كل حال لقد عدلت في الدالة لإرجاع نص مكون من أرقام وليس رقما .

والكود بكل بساطة هو عمل Loop يبدأ من أول خانة وحتى نهاية النص .. وعند التنقل يفحص محتوى الخانة فإذا كان أحد الأرقام من "0" إلى "9" أضافه على متغير نص مؤقت ويدع كل ماهو خلاف تلك الأرقام .

وبعد أن ينتهي الـ Loop (التكرار) تأخذ الدالة قيمة متغير النص المؤقت .

هذا كل شيء . آسف المثال الآن ليس أمامي ، وقد أضفت تلك السطور لاحقا حيث لم تكن مع الرد قبل التعديل لنسياني إياها .

تحياتي .

getcpuid.zip

#22

اخي أبو هادي

والله ما قصرت

المثال يعمل 10 على عشره

قمت ببعض التعديلات الطفيفه حتى أستطيع إجراء معادلات على النواتج

وسأضعه كمثال للحمايه بعد اكتماله بإذن الله قريباً

ولك مني جزيل الشكر والتحية

أخوك رضا عقيل

هذا الموضوع مغلق.

مواضيع مشابهة