Hi,
I wonder if I'm the only one with this problem. I have a few layers with the same field to parse, with the same script to make the labeling (copy and paste many time between the ones with the right result and the one not parsing correctly.
You can see, in the picture below the result. Remember, it's the same script copied from the lateral buoy (in bleu) and paste on the special purpose one (white-orange). The display of (Priv.) in 4 pt, gray an italic is parse wright in the lateral but, instead show the coding in the special purpose.
It's the same STATUT field with the same type text. Some Idea why it parse the parameters on all, I haven't find an other exemple, my layers with the same script except this one.
Solved! Go to Solution.
You don't need to change the data. Change line 82 to this:
name1= Replace([NAME],"&","&")
You'll have to do the same if you have any labels with the other special character (<).
This is one way to write it in Arcade. This uses the When function and template literals
var arrStatus = Split($feature.STATUS,",");
var arrOut= []
for (var i in arrStatus){
var tmpStr = Number(Trim(arrStatus[i]));
console(tmpStr)
When(tmpStr == 2, push(arrOut,'Occa.'),
tmpStr == 3, push(arrOut,'Recom.'),
tmpStr == 4, push(arrOut,'Not in use / Hors service'),
tmpStr == 5, push(arrOut,'Intermitent / Intermittent'),
tmpStr == 6, push(arrOut,'Reserved / Réservé'),
tmpStr == 7, push(arrOut,'Temp.'),
tmpStr == 8, push(arrOut,'Priv.'),
tmpStr == 9, push(arrOut,'Manda.'),
tmpStr == 11, push(arrOut,'Exting. / Éteint'),
tmpStr == 12, push(arrOut,'Illu.'),
tmpStr == 13, push(arrOut,'Histo.'),
tmpStr == 14, push(arrOut,'Publ.'),
tmpStr == 15, push(arrOut,'Sync.'),
tmpStr == 16, push(arrOut,'Watched / Surveillé'),
tmpStr == 17, push(arrOut,'Un-Watched / Sans surveillance'),
tmpStr == 18, push(arrOut,'Doubtful / Douteux'),
push(arrOut, ""))
}
var var_st = Concatenate(arrOut," ");
if (!IsEmpty(Trim(var_st))) var var_st =`<ITA><FNT name = 'Constantia' size= '4'><CLR red = '78' green = '78' blue = '78'>(${var_st})</CLR></FNT></ITA>`
var name = Replace($feature.NAME, '&', "&");
return `${name} ${var_st}`
Those particular labels have a special character (&) which caused problems with formatting tags. From the documentation:
The ampersand (&) and angle bracket (<) are special characters and are not valid in your text if formatting tags are used. Use the equivalent character codes & and < instead.
If you have special characters embedded in the values of the label field, you can replace them dynamically using a simple label script.
Label Expression - ArcadeLabel Expression - VBScript"<BOL>" + replace($feature.Notes, "&", "&") + "</BOL>"Function FindLabel ([LABELFIELD]) NewString = Replace([LABELFIELD],"&","&") FindLabel = "<ITA>" & NewString & "</ITA>" End Function
What I doesn't understand is my script is exactly the same in each of my layer parsing Name and Status.
So why two rendering. I know the rule for formatting tags and they are the same. Can't find the problem since it's always the same script. If you pinpoint the problem I will appreciate.
The expression is said valid. Here my script in VB. I try to convert this script in arcade or python to see if the problem stick but I can't manage the case.
Can you add that script using the code sample instead of a picture? It's very hard to see it and impossible to copy a section of it to show you where the problem is.
If you look closely at the label in question, it contains the text "Kings Harbor Units 7 & 8 Discharge Buoy". You have to replace the & in the Name field in your code
Ok, haven't know this feature for the code so there it is since VB is not listed I use markdown. Ok I think I understand for the &. Unfortunately, we can't edit data, it's the Name.
Function FindLabel ( [NAME] , [STATUS] )
var = [STATUS]
splitStr = Split(var, ",")
For i = 0 To UBound(splitStr)
tmpStr = Trim(splitStr(i))
Select Case tmpStr
Case " "
splitStr(i) = ""
Case ""
splitStr(i) = ""
Case "0"
splitStr(i) = ""
Case "1"
splitStr(i) = ""
Case "2"
splitStr(i) = "Occa."
Case "3"
splitStr(i) = "Recom."
Case "4"
splitStr(i) = "Not in use / Hors service "
Case "5"
splitStr(i) = "Intermitent / Intermittent "
Case "6"
splitStr(i) = "Reserved / Réservé"
Case "7"
splitStr(i) = "Temp."
Case "8"
splitStr(i) = "Priv."
Case "9"
splitStr(i) = "Manda."
Case "11"
splitStr(i) = "Exting. / Éteint"
Case "12"
splitStr(i) = "Illu."
Case "13"
splitStr(i) = "Histo."
Case "14"
splitStr(i) = "Publ."
Case "15"
splitStr(i) = "Sync."
Case "16"
splitStr(i) = "Watched / Surveillé"
Case "17"
splitStr(i) = "Un-Watched / Sans surveillance"
Case "18"
splitStr(i) = "Doubtful / Douteux"
End Select
Next
var_st = Join(splitStr, " ")
If (var_st <> "" And var_st <> " " ) Then
var_st1 ="<ITA><FNT name = 'Constantia' size= '4'><CLR red = '78' green = '78' blue = '78'>" & "(" & var_st & ")" & "</CLR></FNT></ITA>"
End If
If ( [NAME] <>" " And [NAME] <> "") Then
name1 = [NAME]
End If
FindLabel = name1 &" "& var_st1
End Function
You don't need to change the data. Change line 82 to this:
name1= Replace([NAME],"&","&")
You'll have to do the same if you have any labels with the other special character (<).
Thanks, I will try it and include it in all my script. By the way, in arcade or python how can I replace the case statement. I try but alway had error.
This is one way to write it in Arcade. This uses the When function and template literals
var arrStatus = Split($feature.STATUS,",");
var arrOut= []
for (var i in arrStatus){
var tmpStr = Number(Trim(arrStatus[i]));
console(tmpStr)
When(tmpStr == 2, push(arrOut,'Occa.'),
tmpStr == 3, push(arrOut,'Recom.'),
tmpStr == 4, push(arrOut,'Not in use / Hors service'),
tmpStr == 5, push(arrOut,'Intermitent / Intermittent'),
tmpStr == 6, push(arrOut,'Reserved / Réservé'),
tmpStr == 7, push(arrOut,'Temp.'),
tmpStr == 8, push(arrOut,'Priv.'),
tmpStr == 9, push(arrOut,'Manda.'),
tmpStr == 11, push(arrOut,'Exting. / Éteint'),
tmpStr == 12, push(arrOut,'Illu.'),
tmpStr == 13, push(arrOut,'Histo.'),
tmpStr == 14, push(arrOut,'Publ.'),
tmpStr == 15, push(arrOut,'Sync.'),
tmpStr == 16, push(arrOut,'Watched / Surveillé'),
tmpStr == 17, push(arrOut,'Un-Watched / Sans surveillance'),
tmpStr == 18, push(arrOut,'Doubtful / Douteux'),
push(arrOut, ""))
}
var var_st = Concatenate(arrOut," ");
if (!IsEmpty(Trim(var_st))) var var_st =`<ITA><FNT name = 'Constantia' size= '4'><CLR red = '78' green = '78' blue = '78'>(${var_st})</CLR></FNT></ITA>`
var name = Replace($feature.NAME, '&', "&");
return `${name} ${var_st}`