+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Unione di due stringhe numeriche

  1. #1
    BennyB non è in linea Scolaretto
    Post
    158

    Unione di due stringhe numeriche

    Salve.
    Sto cercando di risolvere un problema da un po' di tempo, e forse perché sono stanco, forse perché non ho giusta concentrazione, non riesco a venirne a capo.
    Il problema è questo.
    Ho una stringa in un Texbox di una Form, composta da numeri crescenti separati da virgole. I numeri non sono casuali, hanno un senso ovviamente, e possono andare da 1 a 100. Non c'è una logica, tranne il fatto che sono progressivi.

    Quello che accade è io ottengo da una fonte su cui non mi dilungo un'altra stringa, che è composta da numeri con le stesse regole della precedente.
    Quello che devo fare è unire, o meglio fondere, la seconda stringa nella prima.

    La quantità di numeri che compongono le 2 stringhe non è nota, e possono essere composte da un numero solo (senza virgola di separazione, ovvio) fino a 100.
    La mia idea è quella di scomporre in 2 vettori le stringhe e, lavorando sui numeri, modificare il vettore della stringa di partenza, per poi ricomporlo con un Join alla fine.
    Ho provato a scrivere un codice, ma chiaramente non funziona se la seconda stringa possiede più numeri della prima. Mi sono incartato...
    Qualcuno può dare un'occhiata a quel che ho combinato, oppure proporre qualcosa di meglio?
    Grazie.
    Il codice:
    codice:
    Dim Vbase() As String
    Dim VdaIns() As String
    Sub prova()
    Dim stringa As String, Dato As String, i As Integer, A1 As Integer, A2 As Integer
    stringa = "2,4,6"
    Vbase = Split(stringa, ",")
    Debug.Print Vbase(0)
    Dato = "1,8,11,14"
    VdaIns = Split(Dato, ",")
    For i = 0 To UBound(VdaIns)
        Do While A1 < UBound(Vbase)
            Select Case VdaIns(i)
            Case Is = Vbase(A1)
                Vbase(A1) = VdaIns(i)
                Exit Do
            Case Is < Vbase(A1)
                    ReDim Preserve Vbase(UBound(Vbase) + 1)
                    Debug.Print Vbase(0), Vbase(1), Vbase(2)
                    For A2 = UBound(Vbase) - 1 To i Step -1
                        Vbase(A2 + 1) = Vbase(A2)
                        Debug.Print Vbase(0), Vbase(1), Vbase(2)
                    Next A2
                    Vbase(i) = VdaIns(A1)
                    Debug.Print Vbase(0), Vbase(1), Vbase(2)
                    Exit Do
            Case Is > Vbase(A1)
                    ReDim Preserve Vbase(UBound(Vbase) + 1)
                    Debug.Print Vbase(0), Vbase(1), Vbase(2)
                    Vbase(i + 1) = VdaIns(A1)
                    Exit Do
            End Select
            a = a + 1
        Loop
    Next i
        stringa = Join(Vbase, ",")
        Debug.Print Vbase(1)
    End Sub
    Ultima modifica di BennyB; 09-04-2019 16:11 

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,774
    Blogs
    5
    Non ho capito come deve essere fatta la stringa finale. Ad esempio per le stringhe

    10,30,49

    12,49,72,88

    quale dovrebbe essere la stringa finale?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    BennyB non è in linea Scolaretto
    Post
    158
    La stringa finale dovrebbe essere: 10,12,30,49,72,88.

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,774
    Blogs
    5
    E il minimo è 1?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    BennyB non è in linea Scolaretto
    Post
    158
    Sì, esatto.
    Quindi, la prima stringa può avere un solo valore, o essere composta di tanti valori fino a un massimo di 100 (100 valori, perché i numeri possono andare da 1 al massimo di una variabile dichiarata 'integer'), e così l'altra. Possono essere di qualsiasi quantità di valori, con meno valori la prima rispetto alla seconda, o viceversa, oppure di quantità identica.
    L'unica certezza è che entrambe contengono valori numerici ordinati in modo crescente.

    All'inizio pensavo fosse una routine semplice, poi mi sono incartato...

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    16,774
    Blogs
    5
    Scusa ... dovresti essere più chiaro ... quindi il valore massimo non è 100 ma 32767 ... anche se avevi scritto "possono andare da 1 a 100"

    Quindi possono esserci da 1 a 100 valori che possono andare da 1 a 32767 (o da 0 a 32767)?

    Cioè è possibile avere

    1000,2000,3000,30000

    ?
    Ultima modifica di AntonioG; 09-04-2019 19:52 
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,984
    Una soluzione (più automatica) potrebbe essere:
    1) concatenare le due stringhe
    2) trasformarle in un' unica array (Split)
    3) applicare un qualunque algoritmo di ordinamento (Bubble Sort?)
    4) ritrasformare l'array in stringa unica (Join).

    Altra strada (meno automatica):
    1) trasformare le due stringhe in due array (A e B)
    2) confrontare ogni coppia di elementi (uno dell'array A e uno dell'array B) e porre il minore nel primo elemento disponibile di una terza array inizialmente vuota
    3) scorrere l'indice dell'array da cui si è prelevato il numero
    4) ripetere i punti 2 e 3.
    Il regolamento del forum: la prima cosa da leggere.

  8. #8
    Marius44 non è in linea Scolaretto
    Luogo
    Catania
    Post
    330
    Salve a tutti
    Da semi-profano, visto che se ci sono numeri uguali nelle due serie bisogna prenderne uno solo, non si potrebbe usare una Collection con chiave e poi ordinarla?

    Ciao,
    Mario

  9. #9
    BennyB non è in linea Scolaretto
    Post
    158
    No, mi sono espresso male, evidentemente.
    Allora, entrambe le stringhe possono essere composte da un valore fino a 100 valori separati da virgole, quindi da uno a 100 numeri in formato stringa, "uniti" con un separatore ",".
    Il singolo numero di un valore può essere andare da 1 a limite consentito per una variabile Integer, credo appunto 32767.

    Le stringhe, però non sono predefinite, e possono variare nel numero di valori che lo compongono in maniera quasi casuale (non è casuale, c'è dietro una logica generativa, ma quel che conta è il fatto che alla fine non sono determinabili nel numero dei valori una rispetto all'altra). E, alla fine, i valori della seconda devono essere inseriti nell'altra senza doppioni, e mantenendo l'ordine crescente.

  10. #10
    BennyB non è in linea Scolaretto
    Post
    158
    Ecco, queste due strade mi sembrano percorribili.
    Considerando la prima soluzione dovrei eliminare i numeri doppi prima di ordinare. Questa la posso provare, è una buona idea.
    La seconda è un'evoluzione della mia routine con l'introduzione di un terzo array, però credo mi incarterei lo stesso in base alle lunghezze delle stringhe, come accade nel mio codice.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi