Newsgroup: it.comp.appl.access
Titolo: Estrarre parole in una stringa separate da virgola e modificarle

Salve a tutti (access2007)
 
ho un stringa :1a,1b,1c,1d
 
devo impostare un ciclo a fine di ottenere
 
questa stringa: '1a','1b','1c','1d' 
 
al primo giro di loop riesco ad ottenere quanto voluto con 1a, al secondo giro mi perdo...
 
il codice mio:
 
dim start as integer
dim stringa as string
dim MiaStringa as string
dim pos as integer
 
pos = 1
start = 1
stringa = "1a,1b,1c"
 
Do Until InStr(start, stringa, ",") = 0
 
start = InStr(start, stringa, ",")
 
miaStringa = Mid(stringa, pos, start - 1)
 
miaStringa = "'" & miaStringa & "'" & ","
.....
....qua non so come procedere 
.....    
Loop
 
 
Grazie

 
 
se tutto corrisponde c'è anche un'altra possibilità:
usare la funzione Replace e completare poi la stringa inserendo il primo e ultimo carattere
 
newString=Replace(oldString,",","','")
 
e ultimare aggiungendo a newString il primo e ultimo carattere

Il giorno sabato 1 settembre 2018 11:21:40 UTC+2, 
vito.fa...@istitutoalberghieroabano.net
 ha scritto:

Non capisco bene la tua soluzione.
Devo aggiungere gli apici tra una classe è l'altra separate dalla virgola.
Inoltre il contenuto di classi varia nella stringa quindi ho bisogno di un ciclo per individuare quante virgole ho.
grazie

Quello che ti suggerisce è di sostituire i caratteri al fine di avere il risultato che hai richiesto e mi pare sia assolutamente corretto.
Perché vuoi sapere quante virgole...?
 
Se devi operare altre azioni sui singoli Pezzi allora fai uno split e cicli poi ricompone... ma se non ti serve la soluzione che ti ha dato Giorgio è la migliore.
 
@Alex


Si è vero, quanto proposto funziona poiché ho verificato con copia e incolla la funzione replace (letta così non capivo per l'ammasso di  virgolette e doppie virgolette)
grazie a tutti e due
grazie a tutti

Il giorno sabato 1 settembre 2018 19:07:18 UTC+2, @Alex ha scritto:

Si è vero. Ho testato la funzione, letta così al volo non la capivo...grazie a voi due


A fini di studio ho voluto cercare una strada attraverso il ciclo tra le classi che allego:
 
Dim start As Integer ' prende il valore della  virgola nel ciclo
Dim stringa As String ' la stringa passata dalla txtBox
Dim Pstringa As String ' la stringa prelevata a sx della virgola
Dim Lstringa As String ' la stringa elaborata aggiungendo gli apici
Dim Uclasse As String ' ultima classe contenuta nella stringa: la estraggo con InStrRev es. 1c
 
stringa = "1a,1b,1c"      ' classi di scuola
start = 1
 
'estraggo l'ultima classe in questo modo perché non riesco a farlo con il ciclo.
'aggiungo gli apici e alla fine lego alle altre due classi ottenute dal ciclo
Uclasse = Right(stringa, Len(stringa) - InStrRev(stringa, ","))
Uclasse = "'" & Uclasse & "'"
 
Do Until InStr(start, stringa, ",") = 0
 
start = InStr(start, stringa, ",")
 
 
Pstringa = Mid(stringa, 1, start - 1)
Lstringa = Lstringa & "'" & Pstringa & "'" & ","
 
'la stringa iniziale decurtata, via via, di una classe
stringa = Right(stringa, Len(stringa) - start)
 
Loop
 
MsgBox Lstringa & Uclasse 'il risultato finale
 
 

A titolo di studio... la soluzione era quella che tu avevi dato io...
 
Dim varItem  as Variant
Dim varItems Ad Variant
 
VarItems= SPLIT(Tuastringa,",")
For each varItem in varItems
   Msgbox varaitem 
Next
 
Ora vedi tu...
 
@Alex 

Il giorno sabato 1 settembre 2018 11:21:40 UTC+2, 
vito.fa...@istitutoalberghieroabano.net
 ha scritto:

Ciao Vito,
per ottenere quello che chiedi puoi fare così:
 
Me!MiaStringa = "'" & Replace(Me!MiaStringa, ",", "','") & "'"
 
Vladimiro


Fantastica la funzione SPLIT, non la conoscevo ancora.
Sono andato in internet ed ho trovato questo interessantissimo (per me) articolo sulla divisione di una stringa.
http://mikevba.altervista.org/macro/mikevba073.htm
 
 
Ciabatto con access da 15 anni??? Non si finisce mai di imparare.
Vito 


Grazie Vladimiro


Fai attenzione alla differenza tra quanto ti ho suggerito e quanto in quell'articolo... sono lo stesso approccio, ma non esattamente identico...
 
Esempio1:
Dim Parole as Variant
Dim I as Integer
Dim Riga as Integer
 
Parole = Split(A, " ")
ottenuta questa matrice la possiamo scorrere come scorriamo una normale matrice:
For I = LBound(Parole) To UBound(Parole)
 MsgBox "Riga(" & Riga & ") =" & Parole(I)
Riga = Riga + 1
Next
 
Ora a parte il fatto che in questo codice la variabile RIGA non serve a nulla in quanto LBound sarà sempre=0 quindi RIGA=I+1, ma questo è un dettaglio...
 
Personalmente uso sempre questo:
Dim Parola as Variant
Dim Parole as Variant
Dim Riga as Integer
 
For each Parola in Parole
   Riga=Riga+1
   MsgBox "Riga(" & Riga & ") =" & Parola
Next
 
Saluti
@Alex


Grazie Alex per l'attenzione,
Io quel codice l'ho adattato così, trovi qualche tortuosita?
 
Dim start As Integer ' prende la pos. della  virgola nel ciclo
Dim stringa As String ' la stringa passata dalla txtBox
Dim Lstringa As String ' la stringa elaborata aggiungendo gli apici
Dim I As Integer 
Dim parola As String 'estrae la classe
 
start = 1
stringa = "1a,1b,1c"
 
For I = 1 To Len(stringa)
If Mid(stringa, I, 1) = "," Then
parola = Mid(stringa, start, I - start)
 
start = I + 1
Lstringa = Lstringa & "'" & parola & "'," 'es. al primo giro = '1a,'
End If
Next
Lstringa = Lstringa & "'" & Mid(stringa, start) & "'" 'finale = '1a','1b','1c'
MsgBox Lstringa