Các nguyên tắc cơ bản
khi làm việc với
Avenue
(Working with Avenue:
Fundamentals)
Các câu lệnh trong Avenue
Câu lệnh gán
Biến cục bộ và biến toàn cục
Câu lệnh If Then Else
Câu lệnh lặp For Each
Câu lệnh Exit
Câu lệnh Continue
Câu lệnh Break
Câu lệnh Return
Các kiểu dữ liệu trong Avenue
Giới thiệu Avenue
Avenue là gì?
Avenue là ngôn ngữ lập trình và môi trường phát
triển, là một phần ArcView.
Cách làm việc với Avenue
Avenue là một ngôn ngữ kịch bản hướng đối
tượng(object-orient scripting). Điểm mạnh trong
Avenue, tất cả hệ thống đều là hướng đối tượng, đều
nhận là đối tượng và rồi gửi “request”. Trong
Avenue, thay vì gọi các function với các đối số khác
nhau, bạn có thể gửi một request tới một đối tượng.
Một đối tượng nhận request này thi hành một số
hành động
Câu lệnh gán
Câu lệnh gán chức năng gán kết quả – luôn là đối
tượng – tới một biến. Các biến trong Avenue không
được khai báo hoặc định kiểu. Biến được tạo khi xuất
hiện bên trái của toán tử bằng (=) trong câu lệnh
gán. Bên phải toán tử gán được nhận biết đối tượng
tham chiếu tới
Cú pháp: variable = Object
Tên biến bắt đầu với ký tự hoặc dấu gạch dưới. Sau
đó có thể là các ký tự và các số ([a-zA-Z][0-9a-zA-
Z]*).
Biến cục bộ và biến toàn cục
Tên các biến phải là duy nhất.
Một biến tham chiếu một đối tượng. Một biến được
tạo khi xuất hiện bên trái của câu lệnh gán.
Ví dụ
theView = av.GetProject.FindDoc( "View1" )
if (theView <> nil) then
theView.SetName( "States")
End
Toán tử “=“ cũng là toán tử so sánh.
Biến cục bộ và biến toàn cục
Biến cục bộ
Chỉ tồn tại trong script bạn tạo. Biến cục bộ được
giải phóng khi script này kết thúc.
Biến toàn cục
Bắt đầu bằng ký tự gạch dưới (_). Biến được tạo
trong lần đầu tiên xuất hiện bên trái toán tử gán.
_myDictionary = Dictionary.Make( 100 )
Mặc định, ArcView xóa các biến toàn cục khi bạn
mở một một Project hoặc tạo mới một Project.
Nếu bạn xóa một biến toàn cục rồi chạy đoạn
script bạn sẽ nhận lỗi "The global variable
<name> no longer exists."
Nếu bạn thử dùng một biến toàn cục trước khi bạn
khởi tạo bạn sẽ nhận một lỗi biên dịch
Câu lệnh If Then Else
Dạng 1:
if ( expression1 ) then
request block1
end
Dạng 2:
if ( expression1 ) then
request block1
else
request block2
end
Dạng 3:
if ( expression1 ) then
request block1
elseif ( expression2 ) then
request block2
[else]
request block3
end
Ví dụ
Ví dụ 1 kiểm tra điều kiện đơn giản:
if (result = nil) then
return nil
end
Ví dụ 2 kiểm tra hai điều kiện
if (theView.GetThemes.count = 0) then
MsgBox.Info( "there are no themes", "")
elseif (theView.GetActiveThemes.count = 0) then
MsgBox.Info( "there are no active themes", "")
end
Ví dụ 3 Maximizes môt View nếu đang được chọn, hiện ra thông báo nếu đó là Project
đang được chọn, và đóng cửa sổ nếu là loại khác.
if (av.GetActiveDoc.Is( View )) then
av.GetActiveDoc.GetWin.Maximize
elseif (av.GetActiveDoc.Is( Project ) then
MsgBox.Info( "Please open a view", "")
else
av.GetActiveDoc.GetWin.Close
end
Câu lệnh For Each
for each variable in collection [ by increment ]
request block
end
Example
for each i in 1 100
MsgBox.Info( i.AsString, "")
End
theView = av.GetActiveDoc
for each t in theView.GetActiveThemes
t.EditTable
end
Câu lệnh Exit
Chức năng kết thúc tất cả các scripts.
Câu lệnh
Exit
Ví dụ: Script kết thúc nếu tên thư mục không ghi được.
newDir = MsgBox.Input( "Specify directory", "Directory", "")
if (newDir = nil) then
exit
elseif (newDir.AsFileName.IsDir.Not) then
MsgBox.Error( newDir.AsFileName.GetFullName++"is not a directory",
"")
exit
elseif (File.IsWritable(newDir.AsFileName).Not) then
MsgBox.Error( newDir.AsFileName.GetFullName++"is not writable",
"")
exit
else
theProject.SetWorkDir( newDir.AsFileName )
end
Câu lệnh Continue
Chức năng bỏ qua lần lặp trong câu lệnh lặp, nó bỏ
qua các câu lệnh còn lại trong vòng lặp.
Câu lệnh
continue
Ví dụ
Script kiểm tra mỗi trường của mỗi Theme trong View, nếu trường hiện tại là
kiểu số thì sẽ bỏ qua, bằng cách nhảy qua request SetVisible.
theView = av.GetActiveDoc
for each t in theView.GetThemes
for each f in t.GetFtab.GetFields
if (f.IsTypeNumber) then
continue
end
f.SetVisible(true)
end
t.GetFtab.Refresh
end
Câu lệnh Break
Chức năng kết thúc thực hiện trong các câu lệnh lặp
For Each hoặc While.
Cú pháp
break
Chú ý: Câu lệnh Break chỉ hợp trong vòng lặp
For Each hoặc While.
Ví dụ
Khi biến đếm = 5 thì kết thúc vòng lặp.
Câu lệnh tiếp theo được thực thi sau
câu lệnh Break là câu lệnh in ra thông
báo “Complete”.
for each num in 1 10
if (num = 5) then
break
end
msgbox.info("Num is"++num.asString,"ArcView
Example")
end
msgbox.info( "Complete", "")
Câu lệnh Return
Có thể dùng để trả về một đối
tượng khi gọi Script. Dùng câu
lệnh Return để kết thúc thực thi
script hiện tại.
Cú pháp
return anObject
Ví dụ
Ví dụ 1: dùng câu lệnh Return thay vì dùng câu lệnh Exit để kết thúc Script trừ khi
bạn gặp những lỗi nghiêm trọng.
MyView = av.GetProject.FindDoc( "View1" )
if (myView = nil) then
MsgBox.Error( "couldn't find view", "")
return nil
end
Ví dụ 2: Một script gọi một script khác và nhận giá trị trả về.
'calling script
results = av.run("GetAction", "Green")
msgbox.info(results, "Driving Instructions")
Giá trị trả về khi gọi script trên
'script "GetAction"
if (Self = "RED") then
return "Stop"
elseif (Self = "Green") then
return "GO"
else
return "Use caution"
end
Câu lệnh While
Lặp lai công việc nào đó khi biểu thức điều
kiện là true. Với vòng lặp While phải đảm
bảo điều kiện dừng sai một một số vòng
lặp hữu hạn.
Câu lệnh
while ( expression)
request block
end
Ví dụ
Ví dụ thông báo người sử dụng, nếu người sử dụng chọn Yes
thì biểu thức = true và ArcView chạy script TestScript.
while (msgbox.yesno("Run the script again?","ArcView",TRUE))
av.Run("TestScript",nil)
'TestScript is another script created in the same project.
end
Có thể dùng câu lện Break để kết thúc vòng lặp.
while (true)
again = MsgBox.YesNo( "do it again", "DO IT", TRUE )
if (not again) then
break
end
end
Biểu thức Boolean
Biểu thức Boolean mang một trong hai giá trị True
hoặc False. Được sử dụng trong kiểm tra biểu thức
điều kiện của các câu lệnh như If(expression) hoặc
While expression.
Ba từ khóa hữu ích trong việc kết hợp các biểu thức
là: and, or, not.
String
String là một chuỗi các ký tự có độ dài cố
định. Chuỗi được phân cách bởi ký tự “.
myString = “Hello World”
String có thể bao gồm các ký tự đặc biệt.
NL: newline.
TAB: tab.
CR: Carriage return.
myString = “Hello World” + NL + “Have a Nice Day”
Cộng hai chuỗi dùng toán tử: + hoặc +
+. Toán tử ++ chèn thêm một khoảng
trắng giữa hai chuỗi.
String
String có các phương thức : Contains, Count and
IndexOf …
So sánh hai chuỗi dùng các toán tử: =, <, >, <=,
>=.
Chuyển đổi đối tượng string tới đối tượng khác trong
Avenue với các phương thức: AsAscii,
AsFileName, AsList, AsNumber, AsDate,
AsTime, AsEnum, AsToken.
Bạn có thể thực thao tác với string cùng các phương
thức: BasicProper, Extract, Lcase, Left, Middle,
Proper, Right, Translate, Trim, and Upcase
Number
Trong Avenue, biểu thức tính toán được
thực hiện từ trái qua phải.
x = 5 + 3 * 3 theo bạn kq là 14 hay 24
Dùng dấu ngoặc để thực hiện thứ tự ưu
tiên của biểu thức:
x = 5 + (3*3)
Avenue sử dụng ký hiệu dạng hậu tố cho
các phương thức để thực hiện các chức
năng kiểu số.
x = -7.abs
Chuyển đổi tới các đối tượng kiểu khác:
AsString, Asdays, AsYears, AsHours,
AsMinutes,
Number
Một khoảng các giá trị số
I = 1 25
Định dạng số
Chữ d miêu tả dạng số
Example: “d.dd”
Định nghĩa một định dạng kiểu số cho ứng dụng
Number.SetDefFormat(“d.ddd”) ‘app defalt
aScript.SetNumberFormat(“d,ddd’)’Script default
aNumber.SetFormat(“dd”) ‘object
Bỏ định dạng
aNumber.SetFormat(“ ”)
Number
Các request number
GetDefFormat : String
GetEuler : Number
GetPi : Number
MakeNull : Number
MakeRandom ( min, max ) : Number
SetDefFormat ( aFormatString )
Định dạng Number
GetFormat : String
SetFormat ( aFormatString ) : Number
SetFormatPrecision ( num ) : Number
Number
Chuyển đổi dạng Number (convert)
anotherNumber : Interval
@ Y : Point
AsChar : String
AsDate : Date
AsDays : Duration
AsDegrees : Number
AsHexString : String
AsHours : Duration
AsMinutes : Duration
AsRadians : Number
AsSeconds : Duration
AsString : String
AsYears : Duration
Number
Các toán tử Number
* anotherNumber : Number
+ anotherNumber : Number
- anotherNumber : Number
/ anotherNumber : Number
Negate : Number
^ anotherNumber : Number
Phân loại Number
= anotherNumber : Boolean
IsInfinity : Boolean
IsNull : Boolean
Max anotherNumber : Number
Min anotherNumber : Number