View Full Version: Splittaggio stringhe

DimensioneX Forum > DimensioneX Generale > Splittaggio stringhe



Title: Splittaggio stringhe
Description: da stringhe ad array


Ferion - April 28, 2008 07:01 AM (GMT)
Ciao criss, volevo chiederti ancor asupporto perun lteriore script
è ore che mi scervello




ho una stringa

beddamace="uccello,asiatico,beccoblu/castoro,peloso,puzzolente/criceto,piccolo,spappolato"

ecco.
devo dividere in piu stringhe numerate (tipo stringa1,stringa2,stringa3) la stringa beddamace dividendola con gli slash in modo che mi rimangano

stringa1="uccello,asiatico,beccoblu"
stringa2="castoro,peloso,puzzolente"
stringa3="criceto,piccolo,spappolato"

Dopo di che devo dividere la prima stringa,dividerla in altre stringhe numerate dividendola tramite la , e sono a posto.

però tra split setlen sto sclerando.
Mi puoi aiutare?


Cris - April 29, 2008 01:46 PM (GMT)
Beh qui devi usare SPlit

stringa = Split(beddamace,"/")

Questo ti produce esattamente

stringa(1)="uccello,asiatico,beccoblu"
stringa(2)="castoro,peloso,puzzolente"
stringa(3)="criceto,piccolo,spappolato"

Siccome a priori non sai quante saranno le stringhe ovvero le parti separate da un "/" puoi usare un ciclo per le split successive.

CODE

For Each s In stringa
   Dim bestie = Split(s,",")
   Print bestie
Next


ora potrebbe essere un problema che a ogni giro del For Each l'array bestie viene azzerato e riscritto.
Qui dipende da quello che vuoi fare. Se volevi solo usare, per dire, il secondo valore della terza riga e poi ti va bene di buttare via tutto, ok, può andare anche così.

Se devi mantenere in memoria il tutto già strutturato in array per usarlo più volte dovresti a logica usare un array a due dimensioni (dimensionex non ce l'ha, ma lo puoi simulare con questo trucco:

arrayglobale(i,j)

dove i è la riga e j la colonna.

equivale all'array monodimensionale

arrayglobale(j+(i-1)*col)

dove "col" è il numero di colonne per ogni riga - occhio che non puoi avere righe di lunghezza diversa


CODE

Dim arrayglobale = NewArray()
For i=1 To SetLen(stringa)
   Dim bestie = Split(s,",")
   
   Call CopiaRiga(i,setlen(stringa),bestie)
Next
Print arrayglobale

Sub CopiaRiga(i,col,riga)
For j = 1 To SetLen(riga)
   arrayglobale(j+(i-1)*col) = riga(j)
Next


La funzioncina copiariga è necessaria solo perchè non puoi annidare due cicli FOR come fai per gli IF (c'è scritto nella devref) così si ricorre alla funzioncina per "incartare" il ciclo interno.





Ferion - April 30, 2008 06:54 AM (GMT)
Beh,che dire,grazie mille criss.
Fortunatamente l'array a due dimensioni,che è la prima volta che sento, non dovrei aver bisogno d'usarlo,ma mi piacerebbe capire come è strutturato,che in questa spiegazione m'è sfuggito.
Comunque grazie mille per la spiegazione........che genio che sei! eh! :lol: :D

Cris - April 30, 2008 09:20 AM (GMT)
diciamo che normalmente un array a una dimensione lo puoi pensare come una fila di caselle.

se è a due dimensioni lo devi immaginare come una scacchiera, righe e colonne.

in alcuni casi i contenuti li individui con due variabili, è proprio allora che ti serve.

Vedi per esempio il gioco four-in-line (forza 4) usa quel sistema per memorizzare la posizione delle pedine sul tabellone di gioco




Hosted for free by InvisionFree