Kiểu chuỗi
Kiểu chuỗi được dùng để lưu trữ thông tin dạng văn bản và được đánh dấu bằng từ khóa string
. Chuỗi là một chuỗi các ký tự ushort
và hỗ trợ toàn bộ phạm vi Unicode, bao gồm nhiều ký tự quốc gia. Ví dụ, tên của các công cụ tài chính và bình luận trong lệnh giao dịch là chuỗi.
Do bản chất cụ thể của chuỗi, kích thước của chúng là một giá trị biến đổi bằng với độ dài gấp đôi của văn bản (số lượng ký tự nhân với "chiều rộng" của một ký tự, tức là 2 byte) cộng thêm một ký tự nữa. Ký tự bổ sung này dành cho 'số không kết thúc' (một ký tự được mã hóa là 0) biểu thị kết thúc của dòng. Hơn nữa, MQL5 sử dụng một số không gian để lưu trữ thông tin dịch vụ, tức là tham chiếu đến vị trí trong bộ nhớ nơi chuỗi bắt đầu.
WARNING
Không giống như C++, không thể lấy được địa chỉ của chuỗi hoặc bất kỳ biến nào khác trong MQL5. Truy cập bộ nhớ trực tiếp bị cấm trong MQL5.
Một chuỗi ký tự được ghi lại trong mã nguồn dưới dạng một chuỗi ký tự được nhúng trong dấu ngoặc kép. Ví dụ: "EURUSD" hoặc "$". Chúng ta nên phân biệt giữa các chuỗi bao gồm một ký tự, như "$", và các ký tự đơn giống nhau, như '$'. Đây là các kiểu dữ liệu khác nhau.
Một chuỗi rỗng xuất hiện dưới dạng ""
. Xem xét số không kết thúc ngầm định, nó tiêu tốn 2 byte, ngoài thông tin dịch vụ.
Nếu cần sử dụng ký tự dấu ngoặc kép bên trong chuỗi, thì phải đặt ký tự dấu gạch chéo ngược trước ký tự này, chuyển đổi thành chuỗi điều khiển, chẳng hạn như "Nhấn \"OK\""
.
Các ví dụ khởi tạo chuỗi được đưa ra trong tập lệnh MQL5/Scripts/MQL5Book/p2/TypeString.mq5
.
void OnStart()
{
string h = "Hello"; // Hello
string b = "Press \"OK\""; // Press "OK"
string z = ""; //
string t = "New\nLine"; // New
// Line
string n = "123"; // 123, text (not an integer value)
string m = "very long message "
"can be presented "
"by parts";
// equivalent:
// string m = "very long message can be presented by parts";
}
2
3
4
5
6
7
8
9
10
11
12
13
14
- Chuỗi "Hello" được đặt trong biến h .
- Văn bản chứa dấu ngoặc kép được viết trong biến b .
- Biến z được khởi tạo bằng một chuỗi rỗng. Về cơ bản, điều này tương đương với việc mô tả z mà không cần khởi tạo, nhưng có một số điểm tinh tế hơn ở đây. Hơn nữa, theo như văn bản, trong phần Khởi tạo biến, chúng ta sẽ biết rằng các chuỗi chưa được khởi tạo sẽ nhận được một giá trị đặc biệt,
NULL
, không giống như""
, mà như đã nêu trước đó, bộ nhớ được phân bổ cho số không kết thúc. Sự khác biệt này ảnh hưởng đến việc thực hiện các toán tử so sánh chuỗi và một số toán tử khác. Khi câu chuyện diễn ra, chúng ta sẽ đề cập đến tất cả các khía cạnh như vậy. - Biến t sẽ lấy một văn bản, khi được in trong nhật ký bằng hàm Print hoặc hiển thị bằng các phương pháp khác, sẽ được chia thành 2 chuỗi.
- Chuỗi
"123"
được ghi trong biến n không phải là số, mặc dù trông giống như vậy. Có một số hàm trong MQL5 để chuyển đổi văn bản thành số và ngược lại (xem phần Chuyển đổi dữ liệu). Ngoài ra, còn có một tập hợp các hàm riêng để làm việc với chuỗi. - Để thuận tiện, các ký tự dài có thể được viết thành nhiều chuỗi, như đối với biến m. Quy tắc chung như sau: Tất cả các ký tự dài cho đến dấu chấm phẩy đánh dấu kết thúc mô tả biến đều được trình biên dịch hợp nhất. Trong định dạng như vậy, điều quan trọng là không quên thêm một khoảng trắng xen kẽ bên trong mỗi đoạn của chuỗi, nếu cần (ví dụ, để phân tách các từ trong thông báo như trong ví dụ trên).
Đối với chuỗi, phép toán tổng (nối chuỗi) được định nghĩa, được biểu thị bằng ký tự +
. Chúng ta sẽ thảo luận về nó trong chương nói về biểu thức (xem Phép toán số học ).
Các ký tự chuỗi có thể được đọc riêng biệt, tham chiếu đến chúng như các phần tử mảng (xem Sử dụng mảng): Nếu s là một chuỗi, thì s[i]
là mã của ký tự thứ i trong chuỗi đó, hãy nhập ushort
.