Split di una riga

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 :wink:

Grazie a tutti