creazione stringa di dimensione variabile



  • creazione stringa di dimensione variabile
    di andregi (utente non iscritto) data: 23/09/2012 23:41:03

    Salve, volevo sapere come si crea una stringa la cui dimensione dipende da un contatore. Cioè io conto un certo numero di eventi, e in seguito definisco una stringa di dimensione pari al valore del contatore. Un esempio è il codice sotto, che però non funziona. Esso conta le occorrenze di un evento e poi definisce la stringa. l'evento può essere qualunque, questo è solo un esempio, ma in questi casi mi dice che devo definire un valore numerico nella stringa. Quindi come faccio ad avere una stringa la cui dimensione dipende da un parametro?
     
    i=0
    Do While (condizione)
      If (evento)
       i = i + 1
      End If
    Loop
    
    valorecontatore = i 
    
    Dim parola(valorecontatore) As String



  • di HarryBosch data: 24/09/2012 01:11:47

    Non so se ho capito bene il tuo intento. Se indichi
    Dim parola(valorecontatore) As String
    mi fai capire che vorresti creare una matrice di dimensione imprecisata, cioè non conosci inizialmente il numero delle variabili che ti serviranno. Il che si risolverebbe con Redim o Preserve a seconda dell'utilizzo. Vedi esempio codice.

    Ma se il tuo intento è quello di determinare la lunghezza max che dovrà assumere una stringa non centra nulla con le matrici; magari un esempio pratico risolverebbe la teoria...
     
    Dim parola() As String
    Dim i As Integer
    
    i = 0
    Do While '(condizione)
      '(evento)
    ReDim parola(i)
       i = i + 1
    Loop
    
    parola (i)
    



  • di Vecchio Frac data: 24/09/2012 08:52:09

    Forse dobbiamo metterci d'accordo sui termini.
    "una stringa la cui dimensione dipende da un contatore" non significa niente, la stringa per definizione ha una sola dimensione (è una sequenza di caratteri alfanumerici).

    Se intendi "come creare un vettore, o array, di tipo stringa che contiene un numero di elementi pari ad un indice definito da un'altra variabile", allora ti serve ReDim [Preserve] al momento giusto (@Vanni: fuori dal ciclo Do While, altrimenti appesantisci inutilmente con il ridimensionamento ad ogni ciclo).

    Se intendi "come creare una stringa di lunghezza pari alla variabile indicata" allora puoi usare String(carattere, numero).

    Per cercare le occorrenze di un carattere (o di un testo) all'interno di un vettore (che in Excel può essere anche un Range passato in argomento) ti trascrivo una semplice funzione da me realizzata poco tempo fa e che può risultare utile in diversi casi.
     
    Function count_occurrences(vettore As Variant, search As String, Optional match_case As Boolean = False)
    Dim s As String
    Dim v As Variant, i As Integer, vect() As String
    
        If TypeName(vettore) = "Range" Then
            ReDim vect(1 To vettore.Count)
            For Each v In vettore
                i = i + 1
                vect(i) = v
            Next
            vettore = vect
        End If
        s = Join(vettore, vbNullChar) & vbNullChar
        If Not match_case Then s = LCase(s): search = LCase(search)
        count_occurrences = Len(Replace(s, search & vbNullChar, search & vbNullChar & "*")) - Len(s)
    
    End Function
    






  • di HarryBosch data: 24/09/2012 09:19:36

    Grazie VecchioFrac!
    Mi sfuggiva proprio il fatto del ridimensionamento ad ogni ciclo.
    Molto utile anche la funzione che hai postato: mi servirà sicuramente per alcuni lavori.
    Vediamo invece di cosa ha bisogno Andregi..