French variable dans une string et "$ $"

fgh3966

Active Member
Licensed User
Bonsoir

J'ai essayé cette ligne code très intéressante qui permet de cumuler des chaines de caratères dans une string, et de plus ça permet passer des caractères à la ligne avec {CRLF} ce qui est génial !
Et donc je voudrai y ajouter une variable du type int, byte ou string qui s'affiche clairement par exemple avec l'instruction log ou dans un label.


code:
    Private const weekdays() As String=Array As String($"Monday${CRLF}Lundi"$, $"Tuesday${CRLF}Mardi"$, $"Wednesday${CRLF}Mercredi"$)
    Log (weekdays(2))

Aussi que veut dire ou comment utiliser "$ $" ?

Merci.
 

drgottjr

Expert
Licensed User
Longtime User
de la meme maniere que tu as fait avec CRLF:

dim variableInt as int = 999
dim variableString as String = "encore un jour"
' les variables se coincent entre ${}

Private const weekdays() As String=Array As String($"Monday${CRLF}Lundi ${variableString}"$, $"Tuesday${CRLF} Mardi ${variableInt}"$, $"Wednesday${CRLF}Mercredi"$)
Log (weekdays(1))

lien:
https://www.b4x.com/android/forum/threads/b4x-smart-string-literal.50135/

une astuce:
$"Monday
Lundi ${variableString}"$

eqale $"Monday${CRLF}Lundi ${variableString}"$
 
Last edited:

fgh3966

Active Member
Licensed User
:)

j'ai testé :
B4X:
private Sub Bttn_click

    Private const teest() As String=Array As String ($"toto"${tst}"$,(tst))
    tst = tst + 1
    Log (teest(0))
    Log (teest(1))

    Log (tst)
   
End Sub

Est il possible d'afficher le contenu de la string teest avec une seule ligne de log ?
 

drgottjr

Expert
Licensed User
Longtime User
teest n'est pas une string, c'est un tableau ou une collection de type string.
je ne sais pas ce qui est tst, encore moins ce qui represente "(tst)"
on ne combine pas des strings en b4x avec "+"; on utilise "&". mieux encore, on utilise StringBuilder.

ton test ne se compile pas ni en b4a ni en b4j. je ne comprends pas comment tu as reussi a le tester
 

drgottjr

Expert
Licensed User
Longtime User
non. ce n'est pas teest(0) qui te donne "[Ljava.lang.String;@bcdc937", c'est teest (voir l'image ci-dessous). il n'est pas possible d'afficher teest comme string dans le log car - comme j'ai deja dit - teest n'est pas une string; c'est un array de strings. si tu veux voir toutes les strings qui font l'array, il faut les convertir en une simple string, une par une, ou avec stringbuilder ou "&":

B4X:
dim sb as stringbuilder
sb.initialize
dim newstring as string     'pas recommande
for each s as string in teest
    if s.length > 0 then sb.append(" ")
    sb.append(s)
    newstring = newstring & s   ' pas recommande
next
log(sb.toString)
log(newstring)   ' pas recommande


si tu veux voir un nouveau tst dan le log chaque fois que l'on fait clic:

B4X:
sub bttn_click
   tst = tst + 1
   log($"tst now ${txt}"$)
end sub

tu ne peux pas faire un, comment dire?, transfert dans un string, si c'est ca a quoi tu penses: ${tst = tst + 1}, non.
${tst +1} ca va, mais tst reste ce qu'il etait au debut. si tu ne changes pas la valeur de tst (eg, tst = tst + 1 ou tst = 24) auparavant, ${tst + 1} s'affiche toujours 1.
 

Attachments

  • cap.png
    cap.png
    14.6 KB · Views: 121

fgh3966

Active Member
Licensed User
Bonjour

Si je comprend bien tu me recommende d'utiliser.

B4X:
dim sb as stringbuilder
sb.initialize
dim newstring as string     'pas recommande
for each s as string in teest
    if s.length > 0 then sb.append(" ")
    sb.append(s)
    newstring = newstring & s   ' pas recommande
next
log(sb.toString)
log(newstring)   ' pas recommande

Plutôt que ce code ?

B4X:
    Private const teest() As String=Array As String ($"toto"${tst}"$,"${tst2}")

Aussi est il possible d'afficher plusieurs variables dans un log ?
 

zed

Active Member
Licensed User
Aussi est il possible d'afficher plusieurs variables dans un log ?

3 Variables : X, Y, Z
B4X:
Dim x = 1, y = 2, z = 4 As Int
Log($"x = ${x}, y = ${y}, z = ${Sin(z)}"$) 'x = 1, y = 2, z = -0.7568024953079282
 

drgottjr

Expert
Licensed User
Longtime User
m. zed ha repondu a question 2. pour ce qui concerne question 1, il n'est pas possible de "logger" teest() tel quel car - pour la 3me fois - teest() n'est pas une string. il faut utiliser le code poste (en gommant les phrases pas recommendees). ou bien de ne pas creer teest() comme array en premier lieu, et de creer une string (smart string literal) comme ha fait m. zed (deuxieme ligne de son example). si tu t'accroches a teest() comme array, il n'est pas possible de l'affacher dans le log. la seule chose que tu verras c'est cette curieuse reference a test() mais pas son contenu.
 
Last edited:
Top