Ինչպես օգտագործել լարային փոխարինումը Ruby- ում

Ինչպես օգտագործել լարային փոխարինումը Ruby- ում

Տողի բաժանումը լարային տվյալները շահագործելու միայն մեկ եղանակ է: Կարող եք նաև փոխարինումներ կատարել տողի մի հատվածը մեկ այլ լարով փոխարինելու միջոցով: Օրինակ, մի պարանի (ֆու, բարի, բազան) փոխարինելը «ֆու» -ը «բոյով» փոխարինելով `բերում է« բո, բար, բազար »: Դուք կարող եք դա անել և շատ այլ բաներ ՝ օգտագործելով ենթա և գսուբ լարային դասի մեթոդը:

Ռուբինի փոխարինման շատ տարբերակներ

Փոխարինման մեթոդները գալիս են երկու տեսակի: The ենթա մեթոդը երկուսի ամենահիմնականն է և գալիս է անակնկալների նվազագույն քանակով: Դա պարզապես փոխարինում է նշանակված օրինակի առաջին ատյանը:

Մինչդեռ ենթա միայն փոխարինում է առաջին ատյանի ՝ գսուբ մեթոդը փոխարինում է օրինակի յուրաքանչյուր օրինակին: Բացի այդ, երկուսն էլ ենթա և գսուբ ունենալ ենթա և gsub! գործընկերներ: Հիշեք, որ Ռուբիի մեթոդները, որոնք ավարտվում են բացականչությամբ, փոփոխում են պատճենը վերադարձնելու փոխարեն, փոխում փոփոխական տեղում:

Որոնել և փոխարինել

Փոխարինման եղանակների հիմնական հիմնական օգտագործումը `մեկ ստատիկ որոնման տողը փոխարինել է մեկ ստատիկ փոխարինող լարով: Վերոնշյալ օրինակում «ֆուն» փոխարինվեց «բոյով»: Դա կարելի է անել լարային հատվածում «foo» - ի առաջին դեպքի համար `օգտագործելով the ենթա մեթոդը կամ «ֆու» -ի բոլոր երևույթների օգտագործումը գսուբ մեթոդ

#! / usr / bin / env ruby
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
դնում բ
$ ./1.rb
ֆու, բար, բազար
gsub $ ./1.rb
բո, բար, բազար

Flexibleկուն որոնում

Ստատիկ տողերի որոնումը կարող է միայն այնքան հեռու գնալ: Ի վերջո, դուք կվերածվեք այն դեպքերի, երբ կամընտրական տողերով կամ տողերի ենթաբազմությունը պետք է համընկնի: Փոխարինման մեթոդները, իհարկե, կարող են համապատասխանել ստատիկ տողերի փոխարեն կանոնավոր արտահայտություններին: Սա նրանց թույլ է տալիս շատ ավելի ճկուն լինել և համապատասխանեցնել գրեթե ցանկացած տեքստի, որի մասին կարող եք երազել:

Այս օրինակը մի փոքր ավելի իրական աշխարհ է: Պատկերացրեք ստորակետերով առանձնացված արժեքների մի շարք: Այս արժեքները սնվում են աղյուսակային ծրագրի մեջ, որի վրա դուք չունեք վերահսկողություն (փակ աղբյուր): Այս արժեքները ստեղծող ծրագիրը նույնպես փակ աղբյուր է, բայց այն դուրս է բերում որոշ վատ ձևափոխված տվյալներ: Որոշ դաշտեր ստորակետից հետո տարածքներ ունեն, և դա պատճառ է դառնում, որ տաբլերային ծրագիրը կոտրվի:

Հնարավոր լուծում է ՝ Ռուբիի ծրագիր գրել ՝ երկու ծրագրերի միջև որպես «սոսինձ» կամ ֆիլտր գործելու համար: Այս Ruby ծրագիրը կուղղի տվյալների ձևավորման ցանկացած խնդիր, որպեսզի հաբաբիչը կարողանա կատարել իր գործը: Դա անելու համար դա միանգամայն պարզ է. Ստորակետը փոխարինեք մի շարք տարածություններով պարզապես ստորակետով:

#! / usr / bin / env ruby
STDIN.each do | l |
l.gsub! (/, + /, ",")
դնում է լ
վերջ
gsub $ cat data.txt
10, 20, 30
12.8, 10.4,11
gsub $ cat data.txt | ./2.rb
10,20,30
12.8,10.4,11

Flexibleկուն փոխարինումներ

Հիմա պատկերացրեք այս իրավիճակը: Ձևաչափման աննշան սխալներից բացի, տվյալները արտադրող ծրագիրը գիտական ​​նոտաներում արտադրում է թվային տվյալներ: Tabulator ծրագիրը դա չի հասկանում, այնպես որ դուք ստիպված կլինեք այն փոխարինել: Ակնհայտ է, որ այստեղ պարզ gsub- ը չի անի, քանի որ փոխարինումը կատարվելիս ամեն անգամ տարբեր կլինի:

Բարեբախտաբար, փոխարինման մեթոդները կարող են արգելք հանդիսանալ փոխարինման փաստարկների համար: Յուրաքանչյուր անգամ որոնման տողը գտնելու դեպքում որոնման տողը (կամ ռեգեքս) համապատասխանող տեքստն անցնում է այս բլոկին: Բլոկից ստացված արժեքը օգտագործվում է որպես փոխարինման լար: Այս օրինակում ՝ լողացող կետի համարը գիտական ​​նոտացիայի ձևով (օրինակ ՝ 1.232e4) վերածվում է նորմալ համարի `տասնորդական կետով: Տողը վերածվում է մի հետի հետ to_f, ապա համարը ձևափոխվում է ՝ օգտագործելով ձևաչափի լար:

#! / usr / bin / env ruby
STDIN.each do | l |
l.gsub! (/-?*d+*.*d+e-?*d+/) do | n |
"% .3f"% n.to_f
վերջ
l.gsub! (/, + /, ",")
դնում է լ
վերջ
gsub $ cat floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ cat floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Ծանոթ չէ՞ կանոնավոր արտահայտություններին:

Եկեք մի քայլ ետ կանգնենք և նայենք այդ կանոնավոր արտահայտությանը: Այն թվում է ծպտյալ և բարդ, բայց դա շատ պարզ է: Եթե ​​դուք ծանոթ չեք կանոնավոր արտահայտություններին, դրանք կարող են լինել բավականին գաղտնի: Այնուամենայնիվ, նրանց ծանոթանալուց հետո դրանք տեքստի նկարագրության պարզ և բնական մեթոդներ են: Կան մի շարք տարրեր, և տարրերից մի քանիսը ունեն քանակական:

Այստեղ հիմնական տարրն է դ բնույթի դաս: Սա կհամապատասխանի ցանկացած թվանշանի, 0 նիշների նիշին մինչև 9: Հաշվիչ + -ը օգտագործվում է թվանշանային նիշերի դասի հետ `նշելու, որ այս թվանշաններից մեկը կամ մի քանիսը պետք է անընդմեջ համընկնի: Դուք ունեք թվանշանների երեք խումբ. Երկուսը առանձնացված են «.«և մյուսը` տառով առանձնացված »ե"(ցուցիչի համար):

Շուրջը լողացող երկրորդ տարրը մինուս բնույթն է, որն օգտագործում է «?«քանակական. Սա նշանակում է այս տարրերի« զրո կամ մեկը »: Այսպիսով, մի խոսքով, կարող են լինել կամ չլինեն բացասական նշաններ թվերի կամ ցուցիչի սկզբում:

Երկու այլ տարրերն են . (ժամանակահատված) բնույթը և ե բնույթ Միավորել այս ամենը, և դուք ստանում եք սովորական արտահայտություն (կամ տեքստի համապատասխանության կանոնների մի շարք), որը համապատասխանում է թվերին գիտական ​​ձևով (օրինակ, 12.34e56).