Italian [Risolto] Notifiche Messaggi e dati variabili

XorAndOr

Active Member
Licensed User
Longtime User
Ciao a tutti

Invio notifica
B4X:
SendMessage(Topic, "Confermi?", Var1 & " " & Var2 & " " & Var3 & " " & Data & " " & Orario)

Ricevo notifica
Confermi? Var1 Var2 Var3 Data Orario

Come posso prelevare i valori di Var1 Var2 ecc.. della notifica?

Potrei mettere un Trattino tra Var1-Var2-Var3-Data-Orario

diventerebbe

Confermi? Var1-Var2-Var3-Data-Orario

e utilizzare EndsWith("-")

Ma non mi piace la notifica composta con trattini

controllare lo spazio vuoto non è una scelta corretta
perche' Var1 Var2 Var3 puo'contenere "Il giorno" "La sera" ecc...

voi come agireste in questo caso?
grazie
 

udg

Expert
Licensed User
Longtime User
Potresti semplicemente sostituire il "separatore" che scegli con uno spazio (o anche nulla) nel momento in cui ricevi la notifica e prima di mostarla.
A quel punto come separatore potresti utilizzare uno dei caratteri ASCII nato proprio per questo scopo (es. ETX - end of text).

Un altro modo potrebbe essere preparare la stringa delle notifica tramite Smart String Literals e tarsmettere quindi un unico paerametro, ovevro la stringa che è già combinazione dei 5 campi di cui sopra più l'iniziale "confermi?".
 
Last edited:

ivanomonti

Expert
Licensed User
Longtime User
se la stringa che arriva e "Confermi? Var1 Var2 Var3 Data Orario" a quel punto puoi fare una cosa banalissima come:


Esempio:
notificaSplit("Confermi? Var1 Var2 Var3 Data Orario")

Sub notificaSplit(value As String) As List
    Dim datastring As List = Regex.Split(" ",value)
    Return datastring
End Sub

in questo modo ti trovi un object list da gestire

index 0 = Confermi?
index 1 = var1
....
 

XorAndOr

Active Member
Licensed User
Longtime User
se la stringa che arriva e "Confermi? Var1 Var2 Var3 Data Orario" a quel punto puoi fare una cosa banalissima come:


Esempio:
notificaSplit("Confermi? Var1 Var2 Var3 Data Orario")

Sub notificaSplit(value As String) As List
    Dim datastring As List = Regex.Split(" ",value)
    Return datastring
End Sub

in questo modo ti trovi un object list da gestire

index 0 = Confermi?
index 1 = var1
....
grazie del codice.
devo provare
pensi che se var1 contiene "La sera" il Regex.Split(" ") mi "vede" lo spazio?
 

XorAndOr

Active Member
Licensed User
Longtime User
Un altro modo potrebbe essere preparare la stringa delle notifica tramite Smart String Literals e tarsmettere quindi un unico paerametro, ovevro la stringa che è già combinazione dei 5 campi di cui sopra più l'iniziale "confermi?".

A quel punto come separatore potresti utilizzare uno dei caratteri ASCII nato proprio per questo scopo (es. EOT - end of text).
esiste un carattere "invisibile" che potrei utilizzare?
 

ivanomonti

Expert
Licensed User
Longtime User
per gli spazi vuoti che dividono le titolo var1 var2 var3 data Orario puoi mettere il carattere chr(124) cioè |
 

ivanomonti

Expert
Licensed User
Longtime User
Qui trovi una tabella dei caratteri

ascii.gif
 

udg

Expert
Licensed User
Longtime User
Io intendevo qualcosa tipo:
B4X:
dim MsgType as string = "Confermi?"
dim sep as string = chr(3) ' ETX
dim NotifText as string = $"${MsgType}${sep}${Var1}${sep}${Var2}${sep}${Var3}${sep}${Data}${sep}${Orario}${sep}"$
SendMessage(Topic, NotifText).
In arrivo prelevi la notifica e sostituisci sep con spazio; poi mostri la notifica.

Edit: MsgType ha senso se utilizzi notifiche di tipo diverso, altrimenti può essere parte della stringa NotiText come costante:
$"Confermi?${sep}${Var1}...
 

XorAndOr

Active Member
Licensed User
Longtime User
Io intendevo qualcosa tipo:
B4X:
dim MsgType as string = "Confermi?"
dim sep as string = chr(3) ' ETX
dim NotifText as string = $"${MsgType}${sep}${Var1}${sep}${Var2}${sep}${Var3}${sep}${Data}${sep}${Orario}${sep}"$
SendMessage(Topic, NotifText).
In arrivo prelevi la notifica e sostituisci sep con spazio; poi mostri la notifica.

Edit: MsgType ha senso se utilizzi notifiche di tipo diverso, altrimenti può essere parte della stringa NotiText come costante:
$"Confermi?${sep}${Var1}...
faccio prove, grazie per ora!
 

XorAndOr

Active Member
Licensed User
Longtime User
Se serve a qualcuno io ho risolto cosi'
B4X:
'Invio Notifica 'by @udg

Dim Var1,Var2,Var3,Data,Orario As String'Class_Globals  
Var1 = "Prenotazione"
Var2 = "Accessorio"
Var3 = "Colore Blu"
Data = "16/03/2023"
Orario = "19:00"
Dim sep As String = Chr(3)' ETX = End Of Text char ascii
Dim NotifText As String = $"${Var1}${sep}${Var2}${sep}${Var3}${sep}${Data}${sep}${Orario}${sep}"$
SendMessage(Topic,"Confermi?", NotifText)
Log(NotifText)

'Ricevo Notifica'by @ivanomonti

NotificaSplit(FirebaseMessaging.CorpoMess)

Sub NotificaSplit(value As String)
Dim Ind0,Ind1,Ind2,Ind3,Ind4 As String
Dim datastring As List = Regex.Split(Chr(3),value)'controlla carattere ascii ETX End Of Text
Ind0 = datastring.Get(0)'Prenotazione
Ind1 = datastring.Get(1)'Accessorio
Ind2 = datastring.Get(2)'Colore Blu
Ind3 = datastring.Get(3)'16/03/2023
Ind4 = datastring.Get(4)'19:00
Log(Ind0)
Log(Ind1)
Log(Ind2)
Log(Ind3)
Log(Ind4)
End Sub
 

Sagenut

Expert
Licensed User
Longtime User
Solo un consiglio di modifica
B4X:
Sub NotificaSplit(value As String)
Dim datastring() As String
datastring = Regex.Split(Chr(3),value)'controlla carattere ascii ETX End Of Text
For x = 0 to datastring.lenght - 1
   Log(datastring(x))
Next
End Sub
Per mettere in gioco meno variabili.
 
Top