Karakter Sabitleri
MQL5 dilindeki bir dizginin elemanları Unicode karakter kümesi içindeki işaretlerdir. Bunlar tamsayılara dönüştürülebilen ve toplama çıkarma gibi tamsayı işlemleriyle manüple edilebilen onaltılık değerlerdir.
Tırnak işaretleri içindeki her tekil karakter veya '\x10' gibi bir karakterin onaltılık ASCII kodu, bir karakter sabitidir ve ushort tipindedir. Örneğin '0' tipinde bir kaydın sayısal değeri 30'dur. Bu, karakterler tablosunda sıfır işaretinin indisine karşılık gelir.
Örnek:
void OnStart()
{
//--- karakter sabitlerini tanımla
int symbol_0='0';
int symbol_9=symbol_0+9; // '9' sembolünü al
//--- sabitlerin çıktı değerleri
printf("Ondalık biçimde: symbol_0 = %d, symbol_9 = %d",symbol_0,symbol_9);
printf("Onaltılık biçimde: symbol_0 = 0x%x, symbol_9 = 0x%x",symbol_0,symbol_9);
//--- sabitleri bir dizgiye gir
string test="";
StringSetCharacter(test,0,symbol_0);
StringSetCharacter(test,1,symbol_9);
//--- bir dizgide böyle görünürler
Print(test);
}
|
Ters-bölü (\) işareti, programın kaynak metnindeki sabit dizgilerle ve karakter sabitleriyle çalışırken kullanılan bir kontrol karakteridir. Bazı semboller (örneğin tek tırnak ('), çift tırnak ("), ters-bölü (\) ve kontrol karakterleri) ters-bölü işaretiyle (\) başlayan sembol kombinasyonları şeklinde, aşağıdaki tabloya göre temsil edilebilirler:
|
|
|
|
yeni satır (satır atlama)
|
LF
|
'\n'
|
10
|
yatay sekme
|
HT
|
'\t'
|
9
|
satır başı
|
CR
|
'\r'
|
13
|
ters-bölü
|
\
|
'\\'
|
92
|
tek tırnak
|
'
|
'\''
|
39
|
çift tırnak
|
"
|
'\"'
|
34
|
onaltılık kod
|
hhhh
|
'\xhhhh'
|
1 ile 4 arası onaltılık karakterler
|
ondalık kod
|
d
|
'\d'
|
0 ile 65535 arası ondalık sayılar
|
Ters-bölü işaretinin ardından, yukarıda tanımlanmayan şekilde bir karakter geliyorsa sonuç tanımsızdır.
Örnek
void OnStart()
{
//--- karakter sabitlerini bildir
int a='A';
int b='$';
int c='©'; // kod 0xA9
int d='\xAE'; // ® sembolünün kodu
//--- çıktı sabitlerini çıktıla
Print(a,b,c,d);
//--- dizgiye bir karakter ekle
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,b);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,c);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,d);
Print(test);
//--- karakteri bir sayı şeklinde ifade et
int a1=65;
int b1=36;
int c1=169;
int d1=174;
//--- dizgiye bir karakter ekle
StringSetCharacter(test,1,a1);
Print(test);
//--- dizgiye bir karakter ekle
StringSetCharacter(test,1,b1);
Print(test);
//--- dizgiye bir karakter ekle
StringSetCharacter(test,1,c1);
Print(test);
//--- dizgiye bir karakter ekle
StringSetCharacter(test,1,d1);
Print(test);
}
|
Yukarıda bahsedildiği gibi, bir karakter sabitinin (veya değişkeninin) değeri, karakterler tablosundaki bir karakterin indisidir. Tamsayı değerli indis farklı yollarla yazılabilir.
void OnStart()
{
//---
int a=0xAE; // ® işaretinin kodu '\xAE' sözcüğüne karşılık gelir
int b=0x24; // $ işaretinin kodu '\x24' sözcüğüne karşılık gelir
int c=0xA9; // © işaretinin kodu '\xA9' sözcüğüne karşılık gelir
int d=0x263A; // ☺ işaretinin kodu '\x263A' dizgisine karşılık gelir
//--- değerleri göster
Print(a,b,c,d);
//--- dizgiye bir karakter ekle
string test="";
StringSetCharacter(test,0,a);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,b);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,c);
Print(test);
//--- dizgideki bir karakterin yerini değiştir
StringSetCharacter(test,0,d);
Print(test);
//--- iskambil kartlarının kodları
int a1=0x2660;
int b1=0x2661;
int c1=0x2662;
int d1=0x2663;
//--- bir maça karakter ekle
StringSetCharacter(test,1,a1);
Print(test);
//--- bir kupa karakter ekle
StringSetCharacter(test,2,b1);
Print(test);
//--- bir karo karakter ekle
StringSetCharacter(test,3,c1);
Print(test);
//--- bir sinek karakter ekle
StringSetCharacter(test,4,d1);
Print(test);
//--- dizgi içindeki karakter sözcükleri örneği
test="Queen\x2660Ace\x2662";
printf("%s",test);
}
|
Karakter sözcüklerinin içsel temsilleri ushort tipine sahiptir. Karakter sabitleri 0 ile 65535 arası değerler alabilir.
Ayrıca Bakınız
StringSetCharacter(), StringGetCharacter(), ShortToString(), ShortArrayToString(), StringToShortArray()