Italian [risolto] B4J - (RISOLTO) error combobox

ivanomonti

Expert
Licensed User
Longtime 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)
 

Star-Dust

Expert
Licensed User
Longtime 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

Expert
Licensed User
Longtime 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

Expert
Licensed User
Longtime 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
Longtime 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
Longtime 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

Expert
Licensed User
Longtime 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

Expert
Licensed User
Longtime 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
Longtime User
Fai vedere come hai popolato SPHour
 

ivanomonti

Expert
Licensed User
Longtime 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
Longtime 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
Longtime 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

Expert
Licensed User
Longtime 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
 

ivanomonti

Expert
Licensed User
Longtime 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