Ciao a tutti,
dovrei effettuare lo split di una stringa, che indica la riga di un file: *8503034 auto marca componenti prezzo
Utilizzando questo codice:
[code]Dim riga as String = “8503034 auto marca componenti prezzo”
Dim wordArray() as String = riga.Split(" ")
For x = 0 to wordArray.Ubound
Dim parola as String
parola = wordArray(x)
MsgBox "wordArray(" + Str(x) + ") =" + parola
Next x
[/code]
ottengo nell’array WordArray questo risultato:
wordArray(0)=8503034 auto
wordArray(1) marca
wordArray(2 =componenti
wordArray(3)=prezzo
Per ovviare al problema della mancata divisione dell’array ho utilizzato questa funzione:
[code]Function SplitWords (source as string) as string()
dim rex as new RegEx
dim rm as regExMatch
dim words() as string
rex.SearchPattern = “\w+”
rm = rex.search(editfield1.text)
while rm <> nil
words.append rm.subExpressionString(0)
rm = rex.search
wend
return words
End Function [/code]
Ho utilizzato questa funzione al posto dello Split della riga.
Ma il problema che l’indice X del ciclo For vale sempre 0.
La MsgBox mi ritorna sempre wordArray(0)=8503034
Valore corretto perch ha eliminato tutto lo spazio vuoto trai l codice e la parola auto ma comunque incomprensibile il comportamento dell’indice.
Qualcuno sa Aiutarmi?
prova a sostituire lo spazio con punto e virgola poi splitti per punto e virgola e infine carichi in un nuovo array solo le stringe diverse da spazio …
replaceall(stringa," “,”;")
Ciao
Toni
Ho utilizzato questo codice:
[code] dim words() as string
Dim rigaCorretta as String
rigaCorretta = replaceall(riga," “,”;")
words = Split(rigaCorretta, “;”)
return words[/code]
Per ottengo questi risultati:
Se riga uguale a 192.340.12.3 testi.libri.lb allegato.test.ts
Allora words viene splittato correttamente:
wordArray(0)=192.340.12.3
wordArray(1)= testi.libri.lb
wordArray(2) =allegato.test.ts
Se invece riga uguale a 192.340.12.3 testi.libri.lb allegato.test.ts
Quindi tra il primo blocco ed il secondo lo ce pi di uno spazio il risultato il medesimo:
wordArray(0)=192.340.12.3 testi.libri.lb
wordArray(1) =allegato.test.ts
Ho provato ad sostituire due spazi con il “;” , ma niente da fare
ma siamo sicuri che siano spazi o magari sono dei tab ??? chr(9) mi pare ma non sono sicuro
Potrebbero essere dei TAB, io devo leggere dei file che mi arrivano scritti da operatori.
rigaCorretta = replaceall(riga," ",";")
riga = replaceall(rigaCorretta,chr(9), ";")
Ho provato ed era cosi. Erano le tabulazioni che non venivano intercettate, giustamente.
Ti ringrazio del suggerimento.
Ottimo sono contento !
Ciao
In questi casi non guardare mai come appare una riga di testo, ma leggi la variabile nel debugger e in particolare nella sua versione binaria per identificare i separatori (se non li hai documentati)
Scusa ma se il delimitatore campo " " uno spazio non fai prima a recuperare i dati con nthfield
esempio : nthfield(stringa," ",numero campo) e se fosse un TAB
nthfield(stringa,chr(9),numero campo)
Lo trovo molto comodo …
Si infatti ho usato l’id dei char per estrarmi i delimitatori, funziona alla grande. Davo per scontato (ingenuamente) che fossero degli spazi.
Mi sono scaricato la documentazione binaria dei separatori e va alla grande
Grazie a tutti