Tôi chỉ đang cố nối hai biến macro được trích dẫn nhưng dường như không có cách nào dễ dàng.Ghép các biến macro được trích dẫn
Giả sử chúng ta có:
%LET VAR1="This is not the greatest song in the world";
%LET VAR2="this is just a tribute.";
%LET TRIBUTE=%SYSFUNC(CATX(%STR(),&VAR1,&VAR2));
%PUT &TRIBUTE;
Tôi thực sự muốn:
"This is not the greatest song in the world this is just a tribute."
Nhưng đoạn mã trên thực sự mang lại:
"This is not the greatest song in the world" "this is just a tribute."
Vì vậy, tôi thử đặt %QUOTE()
, %BQUOTE
, vv. xung quanh &VAR1
và %VAR2
với hy vọng sẽ vạch mặt dấu ngoặc kép nhưng tôi nhận được kết quả tương tự.
Điều duy nhất làm việc cho tôi là:
%LET TRIBUTE="%SUBSTR(&VAR1.,2,%LENGTH(&VAR1.)-2) %SUBSTR(&VAR2.,2,%LENGTH(&VAR2.)-2)";
Nhưng điều này là xấu xí và có thể nhận được dài rất nhanh. Có cách nào tốt hơn không?
Hai điều ... trước tiên - tôi không biết về cú pháp '& =' - cảm ơn! Thứ hai, bạn có thể đơn giản hóa việc gán var3 của bạn thành '% let VAR3 ="% unquote_string (string = & var1 & var2.) ";'. –
Bạn hoàn toàn có thể đơn giản hóa nó theo cách đó. Tôi thích ở trên một chút, mặc dù, vì nó rõ ràng hơn những gì bạn đang loại bỏ dấu ngoặc kép từ - loại song song với cách '% UNQUOTE' hoạt động như xa như trích dẫn vĩ mô. (Tôi nghĩ rằng bạn sẽ phải gọi nó hai lần nếu đây là những mvars được trích dẫn bằng macro). – Joe
Thực ra, bây giờ tôi nghĩ về nó, đây là một ví dụ tồi khi tạo hàm FCMP hoặc hàm macro, vì bạn chỉ đơn giản là gói các cuộc gọi đến một hàm hiện có .... cũng có thể chỉ gọi hàm trực tiếp . –