Programming Freaks  | دورات ومقالات برمجيه

Please login or register.

Login with username, password and session length
Advanced search  

News:

Programming-Fr34ks.net
Up and running

Author Topic: Strings  (Read 1009 times)

Striky

  • Helping Freak
  • Administrator
  • Posting Freak
  • *****
  • Posts: 283
    • View Profile
    • Weblog
    • Email
Strings
« on: October 26, 2008, 05:27:19 PM »

السلاسل النصية

Code: ($2) [Select]
s="Hello, World. Sup!?"

puts s
#output: Hello, World. Sup!?


length
هى طريقة تعيد عدد حروف في سلسلة نصية string
Code: ($2) [Select]
s="this is a string"
puts s.length
#output: 16


upcase/upcase!
ال upcase هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن بحروف uppercase
ال upcase! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويلها ل uppercase

Code: ($2) [Select]
x=s.upcase #returns a copy "upcase"
puts x
#output: HELLO, WORLD. SUP!?

puts s
#output: Hello, World. Sup!?

s.upcase! #destructive method!
puts s
#output: HELLO, WORLD. SUP!?


downcase/downcase!

ال downcase هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن بحروف lowercase
ال downcase! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويل الحروف إلى lowercase
Code: ($2) [Select]
x=s.downcase #returns a copy "downcase"
puts x
#output: hello, world. sup!?

puts s
#output: HELLO, WORLD. SUP!?
s.downcase! #destructive method

puts s
#output: hello, world. sup!?

 
capitalize/capitalize!
capitalize هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن اول حرف فيه يكون capital
capitalize! هى destructive طريقة تقوم بالتعديل على السلسلة النصية نفسها وتحويل اول حرف فيه إلى capital

reverse/reverse!
reverse هى طريقة تقوم بإعادة نسخة من السلسلة النصية ولكن معكوس الحروف
reverse هى طريقة تستخدم فى عكس السلسلة النصية نفسها

Code: ($2) [Select]
s="this is a string"
revS=s.reverse #returns a reversed copy of the string
puts revS

#output: gnirts a si siht

s.reverse! #modify the object, reverse it!
puts s
#output: gnirts a si siht


indexing
السلاسل النصية لها علاقة وثيقة بالمصفوفات. فى بعض اللغات لا تعترف بشي اسمه سلسلة نصية وتعتبرها بدلا عن ذلك مجرد مصفوفة من الحروف مثل ال C !
ففى بعض الأشياء المشتركة بين السلاسل النصية والمصفوفات مثل الفهارس ، وتبدأ أيضا بالصفر.
 فإنت تستطيع أن تحصل على الحرف الموجود ب index معين
String[index]
اول حرف سيكون فهرسه هو 0
لاحظ أن القيمة التي ستعاد هي قيمة ال char من جدول ال ASCII فلذا سنستخدم chr method لتحويل ال integer value إلى character
الحرف الأخير سيكون فهرسه هو -1
Code: ($2) [Select]
puts s[0]#first, returns the ascii value
#output: 116
puts s[0].chr #converted to a char
#output: t
puts s[-1] #last, returns the ascii value
#output: 103
puts s[-1].chr #converted to a char
#output: g

String[From..To]
تقوم بإعادة كل الحروف من ال From لل To
Code: ($2) [Select]
puts s[1..4] 
#output: his

index
هي طريقة تعيد لنا ترتيب الحروف فى string أو ترتيب اول ظهور لتعبير مثلا التالى
Code: ($2) [Select]
s="this is a string"
puts s.index("i")
#output 1

هنا الطريقة تعيد لنا ترتيب اول i هى قابلتها وهى فى الindex 2
نقدر نعدل كيفية الإستخدام بإننا نضيف ال offset او مكان البداية فى البحث بال string كالتالى
Code: ($2) [Select]
s="this is a string"
puts s[8..s.length]
#a string

puts s.index("i", 8)
#output: 13



count
هى طريقة تقوم بإعادة عدد مرات تكرار char او expression فى ال string مثلا كالتالى
Code: ($2) [Select]
s="this is a string"
puts s.count("i") #count how many iS in s
#output: 3

empty?
هى طريقة تختبر إذا كان ال string فارغ أم لا
Code: ($2) [Select]
puts "it's empty" if "hello".empty?

include?(char)/include?(substring)

نختبر بها وجود char او substring فى ال string نفسه أم لا
Code: ($2) [Select]
puts s.include?("w")  #has "w" char
#output: true
puts s.include?("he") #has "he" substring ?
#output: true


chomp/chomp!
chop/chop!

chop :هى طريقة تقوم بحذف الحرف الأخير من ال string وإذا واجهت \n\r بتقوم بحذفهم هما الإثنين!
من غير المحبذ إستخدامها..

chop! هى نفس عمل السابقة ولكن تقوم بالتعديل على ال string لأنها  طريقة destructive
إرشاد: يفضل إستخدام chomp

chomp/chomp!(separator)
chomp هى طريقة تقوم بإعادة نسخة من السلسلة النصية  مع حذف الحرف الأخير separator وهو \n او \r او كلاهما افتراضيا إلا إذا حددت إنت ال separator
chomp! هى نفس عمل السابقة وإنما التعديل بيكون على ال string نفسه لأنها destructive ميثود
Code: ($2) [Select]
puts "Hello, World\n".chomp
#output: Hello, World

puts "Hello, World\r\n".chomp
#output: Hello, World
puts "Hello, World\r".chomp
#output: Hello, World
puts "Hello, \nWorld".chomp
#output:Hello,
#World

puts "Hello, World.".chomp("d.")
#output: Hello, Worl

puts "Hello, World!".chomp("!")
#output: Hello, World


concat
هى طريقة تستخدم فى دمج اكثر من string
Code: ($2) [Select]
s="Hello, "
s.concat("World!")

puts s
#output: Hello, World!

s="Hello, "
s << "World!"
puts s
#output: Hello, World!

s="Hello, "
s += "World!"
puts s
#output: Hello, World!


Comparing

Code: ($2) [Select]
s1="Hello"
s2="Hello"
s3="hello"
puts "s1 equals s2" if s1.eql?(s2)
puts s1.casecmp(s3) #it doesn't care about the case
puts "s1 == s3" if s1==s3 #it doesn't match it!

#output:
s1 equals s2
0


scan(pattern)
هى طريقة تستخدم فى عمل مسح على نمط معين فى السلسلة النصية وتعيدهم فى صورة مصفوفة
Code: ($2) [Select]
chars=s.scan(/./)
p chars #inspect
#output: ["h", "e", "l", "l", "o", ",", " ", "w", "o", "r", "l", "d", ".", " ", "s", "u", "p", "!", "?"]

s="Hello, World, Test, what?"
scann=s.scan(/\w+/) #scan for word+char
p scann
#output: ["Hello", "World", "Test", "what"]


split(separator)
هى طريقة تستخدم فى عمل split ل separator وتعيد array ..
Code: ($2) [Select]
words=s.split(' ') #split the space separator.
p words
#output: ["hello,", "world.", "sup!?"]

join(separator)
هى طريقة تستخدم فى عمل join لعناصر ال array وإعادة string
Code: ($2) [Select]
joinedString=words.join(' ')
#join the array elements with a separator
puts joinedString
#output: hello, world. sup!?

joinedString=words.join('<>')
#join the array elements with a separator
puts joinedString
#output: hello,<>world.<>sup!?


gsub(pat, replacement), gsub!(pat, replacement)
هى طريقة تستخدم فى إستبدال pat ب replacement
Code: ($2) [Select]
s="Hello"
puts s.gsub('e', '3')
#output: H3llo

puts s.gsub('lo', '10')
#output: Hel10

s="I LOVE Ruby!"
puts s.gsub(/Ruby/, "Python")
#output: I LOVE Python!

freeze, frozen?
Freeze هي طريقة تمنع الكائن من التعديل عليه
frozen? هى طريقة تستخدم فى إختبار هل الكائن تم تنفيذ freeze عليه أم لا
Code: ($2) [Select]
s="Hello"
s.freeze

s.
s << ", World!" #can't be done as "s" is frozen!
puts "freezed!" if s.frozen?


to_s
هى طريقة تعبر عن ال object فى حالة إستخدام puts معاه
to_i
هى طريقة تعبر عن ال object فى حالة محاولة تحويله ل int
to_f
هى طريقة تعبر عن ال object فى حالة تحويله ل float
to_a
هى طريقة تعبر عن ال object فى حالة تحويله ل array
to_hash
هى طريقة تعبر عن ال object فى حالة تحويله ل hash

مثال على ال OOP/Strings  بإضافة طريقة  جديدة لل String Class وهى atbash
Code: ($2) [Select]
class String
  def atbash
    a=('a'..'z').to_a
    aRev=a.reverse
    s=self.downcase
    res=""
    for char in s.scan(/./)

      if a.include?(char)
        res << aRev[a.index(char)]
      else
        res << char
      end

    end
    return res
  end
end

s="Hello"
puts s.atbash
#output: svool

لاحظ إن ال self هى ال string !

مثال آخر وهو إضافة ال rot13 method لل String Class
Code: ($2) [Select]
class String

  def rot13
    self.tr("A-Ma-mN-Zn-z","N-Zn-zA-Ma-m")
  end

end

puts “ahmed”.rot13
#output: nuzrq


Heredoc string
بكل بساطة هو string يمتد على اكثر من سطر multi-line string
Code: ($2) [Select]
heredocString=<<start
Hello,
i
am
a multi-line
string
start
puts heredocString

لاحظ إنك أنت الذي تحدد ال tag الخاص بالبداية بس بشرط إنك تقفل بها ال string وهنا انا إستخدمت start مثلا!
Code: ($2) [Select]
#output:
Hello,
i
am
a multi-line
string


ملحوظة بخصوص ال symbols
اعتبر ال symbol كانه string ولن يتغير خلال الruntime ولن تحتاج فيه للطرق الخاصة بال string ويفضل استخدامها كمفاتيح لل للهاش تيبلز
للمزيد اطلع هنا
http://www.troubleshooters.com/codecorn/ruby/symbols.htm


Logged

Life is just a chance to grow a soul. - A. Powell
Weblog: http://ahmedyoussef.wordpress.com/