Kelimeler karakter dizeleridir; ancak, sayılar veya tarihler de gösterim ve kullanım amacına bağlı olarak, karakter dizeleri şeklinde ola...
Kelimeler karakter dizeleridir; ancak, sayılar veya tarihler de gösterim ve kullanım amacına bağlı olarak, karakter dizeleri şeklinde olabilir. Bu nedenle, bu bölüm karakter dizeleri ile ilgili kullanım alanlarını, görevleri ve işlemleri açıklar.
ABAP ile ilgili yayınlar birbirlerini takip eden konular içerir. Tüm ABAP yayınlarının listesine ulaşmak için tıklayınız.
Önceki bölümlerde telefon veya nesne numaralarını çarpmayı öğrendiniz; fakat muhtemelen bu tür karakter dizeleri için aritmetik işlemler uygulamanın çok mantıklı olmadığını kabul edeceksiniz. Bir yerel telefon numarasını ulusal veya uluslararası telefon kodu ile tamamlamak çok daha yararlı olacaktır. Bunu yaparken, karakter dizileri işlemlerini yürütmek için gerekli temel ifadelere aşina olmalısınız, -ki bu bölümde üzerinde duracağımız konu budur. İlk olarak karakter dizelerinin deklarasyonuna bakalım.
1. Karakter Dizelerinin Deklarasyonu
Teknik açıdan, alanların farklı kullanımları, farklı veri türleri ile yansıtılır. ABAP'taki karakter dizeleri için aşağıdaki temel veri tipleri kullanılır:
- Sabit uzunlukta karakter alanları için c veri türü
- Sabit uzunlukta sayısal karakter alanları için n veri türü
- Değişken uzunlukta karakter alanları için string veri türü
Çoğu durumda, string veri türü aynı c veri türü gibi davranır, ancak dikkat etmeniz gereken diğer özel yönler vardır; bu özel yönler daha sonra ele alınacaktır. C veri türü, alfanumerik karakterler için kullanılır. Burada, minimum alan uzunluğu bir karakter ve maksimum alan uzunluğu 65.535 karakterdir. Başlangıç değeri boş bir karakterdir. Başka alanlarda olduğu gibi, karakter alanları da kullanmadan önce deklare edilmelidir. GENDER alanı DATA ifadesi kullanılarak aşağıdaki gibi deklare edilebilir:
DATA gender TYPE c LENGTH 1.
Eski gösterim yukarıdaki ile eşdeğerdir, ama okumak daha zordur:
DATA gender(1) TYPE c.
Gördüğünüz gibi, alan uzunluğu boş bir karakter olmaksızın ve parantez içinde alan adından sonra gelir ve sonrasında operandın veri türü yer alır. C Veri türü, genel veri türü olduğundan, eski ABAP programları basitleştirilmiş bildirimi de içerir:
DATA gender.
- [message]
- Varsayılan Ayarlar
- Genel veri tiplerindeki eksik bilgi varsayılan ayarlar ile değiştirilir. Herhangi bir veri türü belirtmezseniz, sistem veri türü olarak otomatikman c kullanır; eğer c veri türünün uzunluğunu belirtmezseniz, sistem dolaylı olarak varsayılan uzunluğu 1 gösterir. Buna göre, GENDER alanı için yukarıda belirtilen deklarasyonlar aynıdır.
Ayrıca eski ABAP programlarında aşağıdaki bildirimi de bulabiliriz. Burada, parantez gösterim ile uzunluk belirtilirken ve veri türü atlanmıştır:
DATA last_name(20).
- [message]
- Dikkat: Eski Kullanım!
- Modern ABAP'ta, burada açıklandığı gibi varsayılan ayarları kullanmak artık yaygın değildir çünkü bu tarz kodlamada veri türünün özellikleri ve uzunluğu eksiktir. Bu tarz kodlamada programcı, veri türü ve uzunluk için varsayılan ayarların kopyalanmasında sisteme güvenirdi. Bu ise gelecekte programın bakımını yapacak başka bir geliştiricinin, programın hareket tarzını anlaması için sistemin standart hareket tarzını ezbere bilmesi gerektiği anlamına gelir. Bu risklidir çünkü sistem her zaman beklediğiniz şeyi yapmaz ve bazen oldukça tuhaf davranır. Yani kötü sürprizleri önlemek için bildirimlerinizi mümkün olduğunca açık yapın.
Veri türü n olan alanlar özel bir kullanıma sahiptir. Bu alanlar karakter dizeleri için tasarlanmasına rağmen, bu karakter dizeleri sadece sayısal karakterler içerebilir. Karakter dizeleri alanlara sağa hizalanmış bir pozisyonda yazılır. Tablo alanı karakter dizesinden daha fazla alan içeriyorsa, alanın sol tarafındaki ilk yerleri sıfırlarla doldurulur. Bu dizelerin tipik örnekleri; makale numaraları, madde numaraları, hiyerarşi düzeyleri ve alan veya kayıt uzunluklarıdır. Eğer herhangi bir aritmetik işlem yapmadan numaraları kullanmak isterseniz, veri türü olarak n kullanmalısınız. Bu nedenle, bu alanlar aynı zamanda sayısal metin alanları olarak da bilinir.
n veri türü de genel bir veri türüdür. C veri türündeki durum gibi, minimum alan uzunluğu 1 karakter ve maksimum alan uzunluğu 65.535 karakterdir. Ancak, C veri tipli alanların aksine, n veri tipli alanların başlangıç değeri 0'dır.
DATA ifadesinin diğer tüm ilaveleri, özellikle TYPE, LIKE ve VALUE, her iki veri türünde de aynen geçerlidir. Örneğin, LAST_NAME alanını ZMEMBER01 tablosunun MNAME alanının data elementi ile aynı olacak şekilde tanımlayabilirsiniz.
DATA last_name TYPE zmember01-mname.
Ve böylece LAST_NAME alanı MNAME alanıyla aynı özelliklere sahip olur. Veri türü c ve 20 karakterden oluşan bir alan uzunluğu. GENDER alanına F değerini atamak için ise doğru ifade aşağıdadır:
DATA gender TYPE c LENGTH 1 VALUE 'F'.
- [message]
- Büyük/Küçük Harf Duyarlılığı
- Bir önceki açıklamada başlangıç değeri literal olarak yazılır. Bu noktada, büyük veya küçük harfleri kullanmak çok önemlidir. Bu fark, özellikle gelecekteki sorgular için kritiktir. Küçük f içeren bir alanda büyük F ararsanız, sistem herhangi bir isabet döndürmez.
2. Dize İşlemleri
Diğerleri arasında sıkça karşılaşılan dize işlemleri, bir dize içinde belirli bir karakter veya karakter grubu için arama yapmak, bir karakteri bir başka karakter ile değiştirmek veya daha fazla yer sağlamak ya da boşlukları kapatmak için bir karakter dizesini sağa veya sola kaydırmaktır. Hatta bir karakter dizesini farklı bir dizeden karakterlerle tamamlamak isteyebilir ya da özel karakterleri bir dizeden çıkarmak isteyebilirsiniz.
- [message]
- Örnek: Telefon Numaraları
- Basit bir örneğe bakalım: Eğer, TELEPHONE alanını 8 basamak içeren sayısal karakter dizesi olarak bildirmek ve bu alana başlangıç değeri olarak 887766 atamak isterseniz, ilgili ifade aşağıdaki gibi olur:
DATA telephone TYPE n LENGTH 8 VALUE '887766'.
Buraya kadar, herşey yolunda. 6 basamak tahsis edilmiştir ve ek 2 basamak, daha uzun bir telefon numarası ile işlem yapmak zorunda kalınması durumu için yedekte tutulmaktadır. Her şey doğru yapılmış görünüyor çünkü telefon numaraları normalde aritmetik işlemlerde kullanılmaz. Ancak, bu örnekte 8 haneli sayısal karakter dizesinin gerçek başlangıç değerinin sekiz sıfır olduğunu dikkate almadık. Başlangıç değeri olan altı haneli 887766 değeri sağdan sola 6 sıfırın üzerine yazılır, böylece baştaki sıfırlar alanın sol tarafında kalır. Yani alan içeriği aslında 00887766'dır.
Eğer bu numarayı aramaya çalışırsanız, muhtemelen çok başarılı olamazsınız. Bu nedenle, baştaki 2 sıfırın bir dize işlemi ile temizlenmesi gerekir.
2.1 Karakter Dizelerini Kaydırmak (SHIFT)
Bunu yapmanın olası bir yolu, baştaki sıfırlar kayboluncaya kadar aşağıdaki açıklamada olduğu gibi, karakter dizesi sola taşımaktır:
SHIFT phone LEFT DELETING LEADING '0'.
SHIFT deyimi baştaki sıfırlar silinene kadar alanın içeriğini (burada 00887766) sola taşır. İşlemden sonra, alan içeriği 887766 olur, ki bu 2 boşluk karakterinin numaraların sağına ilave edilmesi anlamına gelir.
Tabii ki, bir alandaki karakter dizesini belirli bir yönde ve belirli bir sayıda da taşıyabilirsiniz. Örneğin, eğer telefon numarasını 2 basamak sağa taşımak istiyorsanız, aşağıdaki ifadeyi kullanmanız gerekir:
SHIFT phone BY 2 PLACES RIGHT.
Bundan sonra alan içeriği başlangıçta düşündüğünüz gibi görünür (yani, 887766). Başından itibaren, neden c veri tipinde bir alan (sabit uzunlukta karakter alan) kullanılmadığını merak ediyor olabilirsiniz. Bunun nedeni basittir: Eğer c veri tipini kullanırsanız, sistem harfler ve özel karakterler dahil olmak üzere tüm alfanümerik karakterleri kabul eder. Eğer n veri tipini (sabit uzunlukta sayısal karakter alan) kullanırsanız, bu karakterler sistem tarafından göz ardı edilir. Tüm karakter dizesi sadece harfler ve özel karakterlerden oluşuyorsa, o zaman alan başlangıç değerine ayarlanır. Bu ise, hatalı veri girişlerini tespit eden kontrol ve hata adımlarının programlamasını kolaylaştırır.
Az önce anlatılan SHIFT ifadesinin eklerini atlarsanız, ifadenin en kısa formu şu şekilde oluşur:
SHIFT phone.
- [message]
- Veri Türleri
- Hangi veri türünün tercih edilebilir olduğu belirlenirken her bir durumun gerektirdiği şartlar önemli bir faktör olacaktır. Bir makale numarası alfanümerik karakterlerden oluşuyorsa, c veri türü doğru seçimdir. Ancak, makale numarası sadece rakamlardan oluşursa -ve başından itibaren yanlış içeriğin kullanılmasını önlemek istiyorsanız- n veri türü daha iyi bir seçenektir.
Bu durumda sistem eksik operandlar için varsayılan değerleri kullanır. Varsayılan kaydırma yönü sağdan sola ve basamak sayısı 1'dir. Diğer bir deyişe, varsayılan olarak, alan içeriği 1 konum sola kaydırılır, bu yüzden alan içeriğini kaydırırken dikkatli olunmalıdır. Bunu yan duvarları olmayan basit bir kitaplık gibi düşünün: Eğer kitapları bir tarafa çok fazla kaydırırsanız, bazıları aşağı düşecektir. Alan içeriklerini kaydırma prensibi de benzer şekilde çalışır. Eğer alanı sağ veya sol sınırların ötesine kaydırırsanız, bazı karakterler geri alınamayacak şekilde kaybolur.
2.2 Karakter Dizelerini Değiştirmek (REPLACE)
Bir ondalık sayıyı dönüştürmek istediğinizde (ondalık ayıracı Alman formatından Amerikan formatına dönüştürmek dahil) veya eski 8 haneli malzeme numarasını temel alan yeni bir 16 basamaklı malzeme numarası oluşturmak istiyorsanız, her zaman bir dize içinde belirli karakterleri ya da karakter gruplarını bulmak ve değiştirmek zorundasınız. Bunu yapmak için REPLACE deyimini kullanmanız gerekir.
PHONE_INTERNATIONAL alanının c veri türünde, 25 basamaktan oluşan ve 887766 değerini içeren bir alan olduğunu varsayalım. İlk iki basamak boş karakterlerdir. Şimdi baştaki boş karakterleri AREA_CODE alanın içeriği ile değiştirmek isteyelim.
Bunun için, aşağıdaki ifadeyi kullanın:
REPLACE ` ` IN phone_international
WITH area_code.
REPLACE deyimi aranan terimin ilk geçtiği yeri bulur ve değiştirir, ki bu durumda aranan terim " "(boşluk karakteri) dir.
Bir kez daha, SAP sistemlerinde sık sık olduğu gibi, uluslararası bir telefon numarası ile ilgilendiğimizi düşünelim. AREA_CODE alanının n veri türünde (sabit uzunlukta sayısal karakter alan) ve 5 basamaklı olduğunu görüyoruz. AREA_CODE alanının içeriği 09876'dır ve bu PHONE_INTERNATIONAL alanının içeriğinin REPLACE işleminden sonra 09876887766 olacağı anlamına gelir. İlk boşluk karakteri alan kodu ile değiştirilmiş, ancak ikinci boşluk karakteri korunmuştur ve şimdi alan kodu ve yerel telefon numarası arasında yer almaktadır.
Özel bir şey fark etmiş olabilirsiniz: Yaygın olarak kullanılan tek tırnak işareti yerine boşluk karakteri ters tırnak (`) içine alınır. Nedeni, program metninde tanımlanan arama teriminin " " (boş karakter) bir karakter literal olmasıdır. ABAP'ta, karakter literallerinin iki tipi (C ve string), veri türleri ve boş karakterleri ele alış şekilleriyle farklılık gösterir. C veri türünün metin alanı literalleri ve string veri türünün dize literalleri vardır. Her ikisi de sondaki boşluk karakterlerini farklı şekillerde ele alır.
Metin alanı literalleri örneğinde, sondaki boşluk karakterleri göz ardı edilir ve bunlar yokmuş gibi muamele edilir. 'ABC ' metin alanı literali 'ABC' olarak ve ' ' metin alanı boş bir değer olarak kabul edilir. REPLACE deyimi sonuçsuz bir arama terimi olduğunda yerine koyma metnini aranan metnin önüne ekler. Aşağıdaki tek tırnaklı REPLACE ifadesi, 2 boşluk karakterine sahip 09876887766 sonucunu çıktı olarak sunar, çünkü yerine koyma metni (aşağıdaki ifadede area_code) basitçe aranan metnin (aşağıdaki ifadede phone_international) önüne eklenir.
REPLACE ' ' IN phone_international WITH area_code.
Ters tırnak ile gösterilen doğru varyantta ise sondaki boşluk karakterleri kabul edilir. `ABC ` metin alanı literali aslında `ABC ` olarak ve boşluk karakteri ` ` de boşluk karakteri olarak kabul edilir, böylece REPLACE ifadesi başarılı bir şekilde yürütülebilir. PHONE_INTERNATIONAL'daki ilk boşluk karakter arama terimi ile aynı olarak belirlenir ve AREA_CODE ile değiştirilir.
- [message]
- Uluslararası Alan Kodu
- Karakter dizelerinin değiştirilmesini daha iyi kavramak için başka bir örneğe bakalım. PHONE_INTERNATIONAL alanın içeriğinin 09876887766 olduğunu varsayalım. Diğer tüm koşulları değişmeden bırakarak, baştaki sıfırı uluslararası alan kodu ve parantez içinde bir sıfırla değiştirmek istiyorsunuz. Örneğin İsviçre için bu dize +41-(0) olurdu. Bu durumda, ilgili ifade şu şekilde görünecektir:
REPLACE '0' IN phone_international
WITH '+41-(0)'.Bu işlemden sonra, alanın içeriği +41-(0)9876887766 olacaktır. Eğer alan kodu ile yerel telefon numarası arasında kalan boşluk karakterini bir eksi işareti ile değiştirmek isterseniz, aşağıdaki ifadeyi kullanmanız gerekir:
REPLACE ` ` IN phone_international WITH `-`.Bu ifade (string literali olarak) boşluk karakteri için arama yapar (12. basamakta bulacaktır) ve onu eksi işareti ile değiştirir. (Eksi işaretleri için, string literalleri için geçerli olan ters tırnak işaretini veya metin alanı literalleri için kullanılan her zamanki tek tırnak işaretini kullanmanız farklılık yaratmaz.) Yeni alan içeriği +41-(0)9876-887766 olacaktır.
2.3 Karakter Dizelerini Kısaltmak (CONDENSE)
Uzun metin alanları genellikle gerekli olmayan boş karakterler içerir. Bazen bu boş karakter uzun karakter dizelerindeki dize işlemleri tarafından oluşturulur. Tüm gereksiz boş karakterleri kaldırarak bir alan içindeki alt dizeleri kısaltmak mümkündür. Alternatif olarak, birden fazla alanın karakter dizelerini tek bir alanda toplayabilir ve onları orada kısaltabilirsiniz.
İlk seçeneğe bakalım. PHONE_INTERNATIONAL alanın içeriğinin +41-(0)9876887766 olduğunu varsayalım. Uluslararası arama kodu ve alan kodu arasında bir boşluk karakteri ve alan kodu ile yerel telefon numarası arasında iki boşluk karakteri vardır. Toplamda, dize üç boşluk karakteri içerir.
CONDENSE deyimi size PHONE_INTERNATIONAL alanındaki karakter dizesininin 3 parçasını sıkıştırma imkanı verir. Bu yöntemle uluslararası telefon kodu +41 ile alan kodu arasında, ve alan kodu -(0)9876 ile yerel telefon numarası 887766 arasında daha önce kaç tane boşluk karakteri olduğuna bakmaksızın sadece tek bir boşluk karakteri olur. Bu nedenle, sadece üçüncü boşluk karakteri kaldırılır; ve aşağıdaki işlem yürütüldükten sonra, PHONE_INTERNATIONAL alanın içeriği +41-(0)9876887766 olur.
CONDENSE phone_international.
- [message]
- Boşluksuz
- Eğer hala herhangi bir boşluk karakterinin olmaması gerektiğini düşünüyorsanız, karakter dizeleri arasındaki tüm boşluk karakterlerini kaldırmak için NO-GAPS ekini kullanabilirsiniz. Bu durumda, şu ifadeyi kullanın:
CONDENSE phone_international NO-GAPS.
Bundan sonra, düzeltilmiş alan içeriği +41-(0) 9876887766 olur.
2.4 Dize Alanlarını Birleştirmek (CONCATENATE)
Dize alanlarını seçtiğiniz herhangi bir sırayla hedef alanına yerleştirmek için daha kolay bir yol vardır. Listede iki alanın çıktısını istediğinizi varsayalım: NAME ve FIRST_NAME. Her ikisi de c tipi alanlardır; ve iki alanın da uzunluğu 40 karakterdir. Sadece iki alan liste satırının 80 sütununu dolduracağından -çoğu boşluk karakteri olacak-, her iki alanın içeriklerini ayrı bir alanda çıktı olarak sunmak ve karakter dizelerini name ve first name arasında sadece bir boş karakter kalacak şekilde birleştirmek daha yararlı olacaktır.
Bu yöntemi telefon numarası ile ilgili örneğimiz için de uygulayabiliriz. INTERNATIONAL_AREA_CODE, AREA_CODE ve PHONE alanlarının içeriğini bu sıra ile PHONE_INTERNATIONAL alanına kopyalamak istediğinizi varsayalım. Bunu yapmak için, CONCATENATE deyimini kullanabilirsiniz:
CONCATENATE international_area_code
area_code
phone
INTO
phone_international.
Kaynak alanlarının sırası, hedef alanında karakter dizelerinin sırasını belirler. Başka bir deyişle, INTERNATIONAL_AREA_CODE ilk operand ise alanın içeriği PHONE_INTERNATIONAL alanında karakter dizisinin birinci bölümünü temsil etmektedir; buna karşılık, AREA_CODE alanının içeriği hedef alanda karakter dizesinin ikinci bölümünü ve PHONE alanının içeriği ise üçüncü bölümünü temsil eder. Baştaki boş karakterler kopyalanır; sondaki boş karakterler c veri tipindeki kaynak alanları tarafından göz ardı edilirken string veri tipindeki kaynak alanlar tarafından kabul edilir.
Örneğimizde, kaynak alan olan INTERNATIONAL_AREA_CODE'un içeriği +41, AREA_CODE alanının 09876 ve PHONE alanının 887766'dır. İşlemden sonra, hedef alan olan PHONE_INTERNATIONAL'ın içeriği +4109876887766 olacaktır.
Elbette, bu alanın okunabilirliğinin telefon numarasının her bir bileşenini eksi işareti ile ayırarark geliştirilebileceğini biliyoruz. Bu amaç için, CONCATENATE deyimi SEPARATED BY ekini sunar. Burada, her bir bileşen arasına eklenecek bir değişken veya literal belirtmeniz gerekir.
- [message]
- Yeni Notasyonlar
- SAP NetWeaver 7.0 EHP2 karakter dizelerinin işlenmesi için yeni komutlar ve işlevler sağlar. Örneğin, & ve && operatörlerini kullanarak karakter dizelerini birbirine ekleyebilirsiniz:
phone_international = international_area_code &
'-' &
area_code &
'-' &
phone.Buna ek olarak, SAP NetWeaver 7.0 EHP2 karakter dizeleri için çok sayıda yeni fonksiyon sunar. Bunlardan bazıları mevcut komutlara benzer (CONDENSE, CONCAT_LINES_OF, REPLACE, SHIFT_LEFT, SHIFT_RIGHT, SUBSTRING, TO_UPPER, TO_LOWER ve TRANSLATE) ancak yeni REPLACE fonksiyonu gibi diğer fonksiyonlar da tamamen yeni fonksiyonlardır.
phone_international = REPLACE( val = '09876-887766'
sub = '0'
with = '+41-(0)-'
occ = 0 ).
Bu deyim 09876-887766 karakter dizesi içinde arama terimi olan 0 ifadesinin tüm tekrarlarını +41-(0) ile değiştirir ve sonucu PHONE_INTERNATIONAL değişkenine atar. Tüm tekrarlar yerine, sadece ilk sıfırın değiştirilmesini sağlamak için, occ parametresinin değerini 1 olarak belirtebilirsiniz. Bu örnekte birinciden başka sıfır olmadığından dolayı, sonuç yine aynı olacaktır: + 41- (0) -9876-887766.
Örneğimizde, '-' literalini kullanacağız ve şu şekilde yazacağız:
CONCATENATE international_area_code
area_code
phone
INTO
phone_international
SEPARATED BY '-'.
Daha iyi okunabilmesi için, ifade birkaç satırda yazılır. İşlemden sonra, PHONE_INTERNATIONAL alanının içeriği +41-09876-887766 olur.
2.5 Karakter Dizelerini Bölmek (SPLIT)
Benzer şekilde, CONCATENATE deyiminin tam olarak karşıtını temsil eden bir durumda büyük bir karakter dizesini birkaç parçaya bölebilir ya da karakter dizesinin bölümlerini ayrı bir alana yazabiliriz. Örneğin, bir önceki örnekte uluslararası alan kodu büyük bir karakter dizesinin bir parçasıdır. Ancak, bu dizeyi uluslararası alan kodu, yerel alan kodu ve yerel telefon numarası şeklinde bölmeye çalışalım.
Bu sorunu gidermek için SPLIT ifadesini kullanabilirsiniz. Bu ifade bir karakter dizesini çeşitli alanlara dağıtır.
SPLIT phone_international AT '-'
INTO
international_area_code area_code phone.
Bu ifade PHONE_INTERNATIONAL alanını ayırıcı karakterden böler. Ayırıcı karakter AT ekinden sonra gelir ve bir değişkenin içeriği ya da bizim örneğimizde olduğu gibi bir literal olabilir. Yine, hedef alanları pozisyon operandı olarak yazıldığından, hedef alanlarının sırasını net olarak düşünmeniz gerekir. Buna ek olarak, bu hedef alanların karakter dizelerinin sığabileceği büyüklükte olduğundan emin olmanız çok önemlidir.
Eğer ifadeyi yürütmeden önce PHONE_INTERNATIONAL alanının içeriği +41-09876-887766 ise, işlemden sonra INTERNATIONAL_AREA_CODE alanının içerği +41, AREA_CODE alanın içeriği 09876 ve PHONE alanının içeriği 887766 olacaktır.
2.6 Karakter Dizelerini Doğrudan Konumlandırmak
Karakter dizelerinin kullanımını gerektiren bir başka görev grubu daha vardır. Bazen bir dize içinde belli bir konuma belli sayıda karakter eklemek veya bir dize içinden belli bir konumda belli sayıda karakteri kaldırmak zorunda kalabilirsiniz.
PHONE_INTERNATIONAL alanının +41-(0)9876-887766 dizesini içerdiğini varsayalım.Bir uluslararası alan kodu kullanılırsa, ilk üç karakterin uluslararası alan kodunu oluşturduğunu biliyoruz. Bu deyimini kullanarak, doğrudan konumu ve uzunluğu belirterek (hedef alan olan INTERNATIONAL_AREA_CODE içine karakter dizesini yerleştirmek için) bu üç karaktere erişebilirsiniz:
international_area_code = phone_international+0(3).
Basitçe söylemek gerekirse, bu ifade hedef alanın (INTERNATIONAL_AREA_CODE) yeni içeriğinin kaynak alanın (PHONE_INTERNATIONAL) içeriğinin 0. pozisyonundan itibaren ve 3 karakter uzunluğundaki kısmı olduğu anlamına gelir. Uzunluk belirtimi doğrudan kaynak alanından sonra, parantez içinde ve herhangi bir boşluk karakteri olmadan yazılır.
Genellikle, söz konusu alt dize, dize ortasında bir yerde bulunur, ancak bu durumda olsa bile, bu yöntem için başlama pozisyonu ve ilgili parçanın uzunluğunu bilmeniz yeterlidir. Bizim örnekte, uluslararası telefon numarası (phone_international) alanında bulunan, yerel alan kodunu (area_code) kopyalayabilir ve bir hedef alanına yerleştirebilirsiniz. Bilmeniz gereken tek şey ise, yerel alan kodu her zaman 4. karakterden sonra başlar ve yedi karakterden oluşur. Bu nedenle 5, 6, 7, 8, 9, 10 ve 11'inci pozisyonda yer alan karakterleri kopyalamanız gerekir. Bunu yapmak için, aşağıdaki ifadeyi kullanın:
area_code = phone_international+4(7).
- [message]
- c Veri Türü ile n Veri Türünün Karşılaştırılması
- Bu örnek veri türleri arasındaki farkı gösterir. Hedef alanın veri türü c ise bu işlemden sonra (0)9876 içerir. Öte yandan, eğer bu alan n veri türünde ise, 09876 dizesini içerecektir. Çünkü, n veri türü parantezler gibi alfanümerik karakterleri yok sayar.
Bu şekilde, bir dizeden karakterleri kaldırabilir ve dizelerin içindeki karakterleri değiştirebilirsiniz. 41 olan uluslararası alan kodunu 33 ile değiştirmek istediğinizi varsayalım. Bu durumda, aşağıdaki ifadeyi yazmanız gerekir:
phone_international+1(2) = '33'.
Artı işaretini yeni uluslararası alan kodunda da kullanmak istediğinizden dolayı, PHONE_INTERNATIONAL alanının 2 ve 3. karakterlerini '33' literali ile değiştirmeniz gerekir.
YORUM