Array

sabato 23 agosto 2003 - 16.49

francescoteresa Profilo | Newbie

Ciao ragazzi,
io ho il seguente array:
#fr 2 33 4 55 #66 77 88 99 10 #112 113 114 115 116 #117 118 119 20 223 ####
Dovrei togliere tutti gli ultimi cancelletti avendo quindi il seguente array:
#fr 2 33 4 55 #66 77 88 99 10 #112 113 114 115 116 #117 118 119 20 223
Come posso fare?
P.S. Ovviamente l'array cambia sempre ossia non è sempre della stessa grandezezza.
PS.2 Io programmo in visual basic.
Grazie mille a tutti,
Francesco

Brainkiller Profilo | Guru

Ciao Francesco,
immagino che con Array tu ti riferisca a una stringa, sbaglio?
In questo caso puoi ciclare su questa stringa alla ricerca della posizione dell'ultimo spazio.
Una volta che l'hai trovato puoi semplicemente fare un SubString(0,posizione_ultimo_spazio).
Questa istruzione ti restituisce diciamo la prima parte della stringa tralasciando gli ultimi.
Facendo un esempio:

Dim a as String
a="#14 15 16 ####"

L'ultimo spazio è in posizione 9 partendo a contare da zero.
Per ottenere la stringa pulita:

a=a.SubString(0,9) e dovrebbe restituire:

"#14 15 16"

E' così?
Ciao

David De Giacomi

francescoteresa Profilo | Newbie

Ciao David e grazie per avermi risposto.
Purtroppo non è come dici.
Questo:
#fr 2 33 4 55 #66 77 88 99 10 #112 113 114 115 116 #117 118 119 20 223 ####

non è una lista ma è semplicemente la stampa di un array.

E' da aggiungere che il numero dei cancelletti finali non sono sempre 4 ma ne possono eseere 1,2,...10 ecc oppure nessuno.

Mi puoi aiutare?
Grazie

francescoteresa Profilo | Newbie

Ciao David,
guardando bene il tuo ultimo thread, io all'inizio ce lo una stringa ma è un po leggermente diversa ossia cio sono delle virgole:
Dim a as String
a="#,14,15,16,#,#,#,#"
Quindi se in questa stringa riesco a togliere i cancelletti finali è ottimo.
Grazie

Brainkiller Profilo | Guru

Ciao Francesco,
beh la procedura anche nel caso della stringa con virgole è simile.
Certo facendo un parsing della stringa manualmente come ti ho consigliato è un po' complicato.
Sicuramente la cosa migliore è usare le Regular Expressions, ma io in materia proprio non sono preparato :)
Con le Regular Expression puoi cercare blocchi di testo particolari per esempio una sequenza di caratteri (,#) variabile e che sia inoltre a fine riga.
In questo modo puoi rapidamente operare sulla stringa ed eliminare o aggiungere o sostituire ciò che vuoi, certo ci vuole un po' di esperienza con le RegEx.
.NET finalmente le ha introdotte ora bisogna impararle :)
Per farti capire c'è un articolo che permette di renderizzare sottoforma di hyperlink gli indirizzi Web. Esempio all'interno di una pagina web, invece che stamparli come semplice testo con le RegEx puoi trasformare tutti i link in modo che venga sostituiti con i tag <A HREF>.
http://www.dotnethell.it/articles/article.aspx?ArticleID=81

Ciao
David

francescoteresa Profilo | Newbie

Ciao David,
visto che la cosa sta diventando molto complicata,
mi dici come faccio ad eliminare un elemento in un array?
Esempio io ho questo array:
francesco, pasquale, teresa
Come faccio ad eliminare pasqule?
Se mi dici questa riesco a risolvere il mio problema.
Grazie mille,
francesco

nemo75 Profilo | Newbie

Il primo problema (troncare una stringa) ti è stato già risolto, mentre l'eliminazione di una sottostringa da una stringa è differente.
dovresti prima spiegare qual è il criterio che usi x l'eliminazione (es. il secondo nome di una lista,ecc.)

non conosco il tuo problema, ma (se conosci già il numero di elementi) sei sicuro che non ti convenga usare un array di stringhe?

ciao

Brainkiller Profilo | Guru

La cosa non è complicata, si tratta di sapere come funziona le Regular Expressions :)
Prova a postare un pezzo di codice, per lo meno dove dichiari l'array o la stringa, e mettici pure un esempio concreto, così capiamo meglio.
Ciao

David

francescoteresa Profilo | Newbie

Ciao amici,
la cosa non è molto complicata, forse sono io che non mi sono spegato bene.
Io ho questo array:

Dim MyArr() as String

MyArr= (#,fr,2,33,4,55,#,66,77,88,99,10,#,112,113,114,115,116,#,117,118,119,20,223,#,#,#,#)

Questo MyArr deve diventare così:
(#,fr,2,33,4,55,#,66,77,88,99,10,#,112,113,114,115,116,#,117,118,119,20,223)
ossia senza i cancelletti finali.

Allora io cosa ho pensato:
con questo: Ubound(MyArr) so il numero esatto di tutti gli elementi del mio array,
poi faccio così:

for i = 0 to Ubound(MyArr)
ii = to Ubound(MyArr) - i

ii è una variabile che praticamente conta all'inverso, quindi inizia a legger l'array dalla fine e di conseguenza:

if MyArr(ii)="#" then
cancellami l'elemento MyArr(ii)
else
Response.write(MyArr)
end if
next

se l'elemento dell'array è un cancelletto, mi deve cancellare l'elemento.
Avete capito?
A me serve il codice che cancella un elemento in un array.

Un esempio + semplice è questo:
voglio cancellero l'elemento n. 3 dell'array MyArr. Come faccio?

Grazi mille

Brainkiller Profilo | Guru

Beh allora, vediamo un po'.
Il tuo metodo di andare all'indietro potrebbe andare bene, perchè puoi eliminare virgole e # fino a quando trovi qualcosa diverso da virgola o # appunto, cioè quando c'è un numero e quindi ti fermi.
Se tu parli di eliminare il # o la , purtroppo in un array semplice non mi pare ci siano metodi per rimuovere gli elementi, puoi assegnare la posizione a vuoto o al carattere \0.
Io ti consigliere di usare un'altra struttura dati che è l'ArrayList che ha diversi metodi fra cui Add e Remove o RemoveAt. In pratica è una specie di lista linkata.
Tu dicevi, come faccio a rimuovere il carattere in posizione 3?
E' sufficiente che usi il metodo .RemoveAt(2) (perchè partiamo da zero) e quindi quell'elemento scompare e tutti gli altri vengono spostati indietro di uno, cioè diciamo la lista viene ricompattata senza un buco come potrebbe succede con l'Array classico. L'ArrayList fra l'altro accetta ogni tipo di dati, int, string, ecc. quindi ci puoi giocare bene!
Ciao

David
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5