में किसी सूची में शामिल होने का सबसे अच्छा/सबसे छोटा तरीका सीएमके में एक स्ट्रिंग में सूची में शामिल होने का सबसे अच्छा तरीका क्या है?सीएमके
शामिल होने से मेरा मतलब है एसईटी (somelist "a" "b" "c \; c") "ए: बी: सी; सी" में परिवर्तित करें जहां गोंद स्ट्रिंग (":") चुनने योग्य है। निम्नलिखित कोड काम करता है लेकिन यह वास्तव में लंबा है, क्या कोई बेहतर तरीका है?
FUNCTION(JOIN LISTNAME GLUE OUTPUT)
SET(_TMP_STR "")
FOREACH(VAL ${${LISTNAME}})
SET(_TMP_STR "${_TMP_STR}${GLUE}${VAL}")
ENDFOREACH(VAL ${${LISTNAME}})
STRING(LENGTH "${GLUE}" GLUE_LEN)
STRING(LENGTH "${_TMP_STR}" OUT_LEN)
MATH(EXPR OUT_LEN ${OUT_LEN}-${GLUE_LEN})
STRING(SUBSTRING "${_TMP_STR}" ${GLUE_LEN} ${OUT_LEN} _TMP_STR)
SET(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
ENDFUNCTION()
#USAGE:
SET(somelist "a" "b" "c\;c")
JOIN(somelist ":" output)
MESSAGE("${output}") # will output "a:b:c;c"
दुर्भाग्य से STRING (बदलें ...) का उपयोग कर काम नहीं करता:
function(JOIN VALUES GLUE OUTPUT)
string (REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}")
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
#USAGE:
SET(somelist a b c)
JOIN("${somelist}" ":" output)
MESSAGE("${output}") # will output "a:b:c"
अरे हाँ धन्यवाद, इस काम करता है। लेकिन क्या इसका मतलब यह है कि मेरे पास ऐसी सूची नहीं हो सकती है जहां एक तत्व में अर्धविराम होता है? – Geli
मैंने अर्धविराम वाले तत्वों के साथ एक सूची शामिल करने के लिए प्रश्न को अद्यतन किया। – Geli
आपका मूल कार्य जॉइन अर्धविराम से निपटता नहीं है। यह सेमीकेक 2.8.5 के साथ विंडोज के तहत "ए: बी: सीसी" आउटपुट करता है। – sakra