Italian [risolto] B4J - (RISOLTO) error combobox

ivanomonti

Well-Known Member
Licensed User
ho questo errore che non mi fa andare avanti, l'errore si presenta solo nei numeri decimali e non so perchè e qui SPHour.SelectedIndex=SPHour.Items.IndexOf(lst.Get(0))

list lst e ls (in questo caso la lista e lst) = Dim lst As List = Regex.Split(":",ls.Get(3))


foto e codice incriminato.

002.png


sui valori [01,02,03,04,05,06,07,08,09] tutto ok
SPMinutes.SelectedIndex=SPMinutes.Items.IndexOf(lst.Get(1)) ok
SPTimes.SelectedIndex=ls.Get(4) ok

001.png


B4X:
    SPHour.SelectedIndex=SPHour.Items.IndexOf(lst.Get(0))
    SPMinutes.SelectedIndex=SPMinutes.Items.IndexOf(lst.Get(1))
    SPTimes.SelectedIndex=ls.Get(4)
 

LucaMs

Expert
Licensed User
Non riesco a trattenermi, mi spiace: quando fai una domanda, non si capisce un emerito c. !

Inoltre, manca pure il messaggio d'errore.

La prossima volta, pubblica il sorgente.
 

Star-Dust

Expert
Licensed User
Usando Regex viene prodotta una lists di.stringhe con la possibilità che ci siano degli spazi.
Questo potrebbe generare errori perché fare esempio " 18"<>18. IndexOf non lo riconosce e restituisce -1.
Prova a togliere gli spazi su Ls.Get(3)
 

ivanomonti

Well-Known Member
Licensed User
Non riesco a trattenermi, mi spiace: quando fai una domanda, non si capisce un emerito c. !

Inoltre, manca pure il messaggio d'errore.

La prossima volta, pubblica il sorgente.
cazzarola più chiaro di così si muore anche le figurine ti ho messo @Star-Dust ha risposto, sarà che lui è marziano e mi capisce hahahah
 

ivanomonti

Well-Known Member
Licensed User
Usando Regex viene prodotta una lists di.stringhe con la possibilità che ci siano degli spazi.
Questo potrebbe generare errori perché fare esempio " 18"<>18. IndexOf non lo riconosce e restituisce -1.
Prova a togliere gli spazi su Ls.Get(3)
anche provando a trasformarlo in int mi fa la stessa cosa...

splitto un valore stringa, esempio "18:30"

in lst(0) leggo 18
in lst(1) leggo 30

tutto perfetto ma poi non trova il valore nella combobox SPHour.SelectedIndex=SPHour.Items.IndexOf(lst.Get(0)) pur essendoci, vedi codice e immagine che ho postato

B4X:
    SPHour.Initialize("")
    Dim ls As List
    ls.Initialize
    For i=1 To 24
        If i < 10 Then
            ls.Add("0"&i)
        Else
            ls.Add(i)
        End If
    Next
    SPHour.Items.AddAll(ls)
qui e quando esegui lo split, dimenticavo [01,02,03,04,05,06,07,08,09] li trova correttamente da [10,11,12,13,14,15,16,17,18,19,20,21,22,23,24] no

frammento split (18:30):
    Dim lst As List = Regex.Split(":",ls.Get(3))

    SPHour.SelectedIndex=SPHour.Items.IndexOf(lst.Get(0))
    SPMinutes.SelectedIndex=SPMinutes.Items.IndexOf(lst.Get(1))
    SPTimes.SelectedIndex=ls.Get(4)
@LucaMs inoltre non ho errori, ma non ho il risultato hahaha che errore ti dovevo inviare, mmmmmm
 

LucaMs

Expert
Licensed User
B4X:
Dim lstNumbers As List = RegexGetNums("1, 2,   3, 9, 10,11")
For Each N As Int In lstNumbers
    Log(N)
Next
B4X:
Sub RegexGetNums(Text As String) As List
    Dim lstResult As List
    Dim Matcher1 As Matcher
    Matcher1 = Regex.Matcher("\d+", Text)
    lstResult.Initialize
    Do While Matcher1.Find
        lstResult.Add(Matcher1.Match)
    Loop
    Return lstResult
End Sub
 

Star-Dust

Expert
Licensed User
Comunque non era chiarissimo quello che scrivi, sei leggermente confusionario 😁

Comunque il problema é quello che ti ho descritto. Eventuali spazi e il casting delle variabili. Quindi o passi tutto a stringa o tutto a numerico.

Questo comporta cambiare e allungare il codice... non conviene. Di fatto la soluziome che hai implementato non è proprio pulita.


Fra le mie librerie ci sono diversi Date e Time Pocket:

Per B4A ho realizzato questo:
IMG_20200423_072104.jpg
 
Last edited:

ivanomonti

Well-Known Member
Licensed User
Comunque non era chiarissimo quello che scrivi, sei leggermente confusionario 😁

Comunque il problema é quello che ti ho descritto. Eventuali spazi e il casting delle variabili. Quindi o passi tutto a stringa o tutto a numerico.

Questo comporta cambiare e allungare il codice... non conviene. Di fatto la.soliziome che hai implementato non è proprio pulita.


Fra le mie librerie ci sono diversi Date e Time Pocket:

Per B4A ho realizzato questo:
View attachment 92423
che sono confusionario ok. ora do uno sguardo ma voglio capire perchè cio non funziona, poi vi aggiorno
 

ivanomonti

Well-Known Member
Licensed User
vediamo insieme se è possibile...

risultato di lettura (log)

Length index 0 = 2
Value index 0 = 14
Value index 1 = 00
value List = (ObservableListWrapper) [01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

leggo tutti i valori uno ad uno

frammento codice:
    Dim lst As List = Regex.Split(":",ls.Get(3))
    
    Dim st As String =lst.Get(0)
    Log( "Length index 0 = " & st.Length & " Value index 0 = " & lst.Get(0) & " Value index 1 = " & lst.Get(1) & " value List = " & SPHour.Items )
    
    For i=0 To SPHour.Items.Size-1
        Dim st As String = SPHour.Items.Get(i)
        Log("Value string " & st)
        Log("Value length " & st.Length)
        Log("--------")
    Next
    
    SPHour.SelectedIndex=SPHour.Items.IndexOf(lst.Get(0))
    SPMinutes.SelectedIndex=SPMinutes.Items.IndexOf(lst.Get(1))
    SPTimes.SelectedIndex=ls.Get(4)
Risultato log:
Value string 01
Value length 2
--------
Value string 02
Value length 2
--------
Value string 03
Value length 2
--------
Value string 04
Value length 2
--------
Value string 05
Value length 2
--------
Value string 06
Value length 2
--------
Value string 07
Value length 2
--------
Value string 08
Value length 2
--------
Value string 09
Value length 2
--------
Value string 10
Value length 2
--------
Value string 11
Value length 2
--------
Value string 12
Value length 2
--------
Value string 13
Value length 2
--------
Value string 14
Value length 2
--------
Value string 15
Value length 2
--------
Value string 16
Value length 2
--------
Value string 17
Value length 2
--------
Value string 18
Value length 2
--------
Value string 19
Value length 2
--------
Value string 20
Value length 2
--------
Value string 21
Value length 2
--------
Value string 22
Value length 2
--------
Value string 23
Value length 2
--------
Value string 24
Value length 2
--------
Io non vedo errori da parte mia, ma il problema c'è
 

Star-Dust

Expert
Licensed User
Fai vedere come hai popolato SPHour
 

ivanomonti

Well-Known Member
Licensed User
TROVATO IL MIO ERRORE,,,


codice corretto:
    For i=1 To 24
        If i < 10 Then
            CBHour.Items.Add("0"&i)
        Else
            CBHour.Items.Add(""&i)
        End If
    Next

codire sbagliato:
    For i=1 To 24
        If i < 10 Then
            CBHour.Items.Add("0"&i)
        Else
            CBHour.Items.Add(i)
        End If
    Next
Questo succede quando pensi che i valori li puoi leggere come stringa anche se sono int nel secondo caso popolavo la lista con valori misti da 1-9 stringa e da 10-24 come int, una banalità che mi sfuggiva.

Grazie per i consigli.
 

Star-Dust

Expert
Licensed User
TROVATO IL MIO ERRORE,,,


codice corretto:
    For i=1 To 24
        If i < 10 Then
            CBHour.Items.Add("0"&i)
        Else
            CBHour.Items.Add(""&i)
        End If
    Next

codire sbagliato:
    For i=1 To 24
        If i < 10 Then
            CBHour.Items.Add("0"&i)
        Else
            CBHour.Items.Add(i)
        End If
    Next
Questo succede quando pensi che i valori li puoi leggere come stringa anche se sono int nel secondo caso popolavo la lista con valori misti da 1-9 stringa e da 10-24 come int, una banalità che mi sfuggiva.

Grazie per i consigli.
Come ti dicevo era il casting
 

LucaMs

Expert
Licensed User
Vedo con "piacere" che non avete c....to il codice che ho pubblicato ("postato" proprio non mi piace).

Provatelo; e provate anche a passargli un testo come: "Ieri alle 5 ho preso l'autobus 64 e sono andato in Via DaiPiedi 77, dove ho incontrato 12 str...i"
 

ivanomonti

Well-Known Member
Licensed User
Vedo con "piacere" che non avete c....to il codice che ho pubblicato ("postato" proprio non mi piace).

Provatelo; e provate anche a passargli un testo come: "Ieri alle 5 ho preso l'autobus 64 e sono andato in Via DaiPiedi 77, dove ho incontrato 12 str...i"
Si che lo abbiammo cagato, e non essere permaloso hahahah, ti chiedo scusa ma avevo la testa annebbiata
 

LucaMs

Expert
Licensed User
Si che lo abbiammo cagato, e non essere permaloso hahahah, ti chiedo scusa ma avevo la testa annebbiata
Non sono permaloso (o meglio, lo sono ma non in questo caso); dico che che forse quello avrebbe risolto il tuo problema ("forse", perché ancora non mi è molto chiaro, troppo faticoso cercare di capirlo 😄).
 

ivanomonti

Well-Known Member
Licensed User
Non sono permaloso (o meglio, lo sono ma non in questo caso); dico che che forse quello avrebbe risolto il tuo problema ("forse", perché ancora non mi è molto chiaro, troppo faticoso cercare di capirlo 😄).
Non ti affaticare ho ancoraa molte domande da fare hahahahha
 
Top