Newsgroup: it.comp.lang.visual-basic
Titolo: strano problema con stringhe

dopo parecchio tempo ho preso in mano visual basic (nella suite .net) e ho  
riscontrato un curioso problema
ho 3 campi Integer nei quali memorizzo un tempo (minuti secondi decimi) e  
ho una stringa che rappresenta un numero (è un numero di gara quindi  
meglio sia stringa per via degli 0 iniziali).
bene, quando viene inserito un nuovo tempo associato al numero voglio che  
sia visualizzato in una listbox.
nella list box devo aggiungere una stringa che abbia il numero seguito dal  
tempo (separo minuti secondi ecc. con i :).
ora viene l'incredibile.
la seguente istruzione NON funziona
n è una stringa con il numero di gara
s = n + " " + tempo.minuti.ToString + ":" + tempo.secondi.ToString + ":"  
+ tempo.decimi.ToString
mi viene visualizzata solo la stringa con il numero n e basta
se carico i dati in alcune textbox per modificarli e poi aggiorno la  
listbox (anche lasciando inalterati i campi) miracolosamente compaiono  
anche i tempi da parte al numero di gara.
l'unica differenza tra l'aggiornamento della lista "normale" e quello dopo  
la modifica dei campi è che faccio una conversione String.Intern() e poi  
una successiva ricoversione in stringa da intero
spero di essermi spiegato, secondo voi che cavolo succede? è veramente  
strano non trovate?
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 strano non trovate?
Io non ho mica capito quello che fai, oltre a non sapere che tipo di
variabili usi.
Comunque hai almeno verificato se s vale o no quello che dovrebbe?
Ciao
--
Reporting tool: 
http://www.neodatatype.net

 Comunque hai almeno verificato se s vale o no quello che dovrebbe?
s non vale assolutamente quello che dovrebbe
ti faccio vedere il codice
s = n + "   " + atleti(numerogiro, i).tempo.ore.ToString + ":"  
+ atleti(numerogiro, i).tempo.minuti.ToString + ":" + atleti(numerogiro,  
i).tempo.secondi.ToString + ":" + atleti(numerogiro,  
i).tempo.decimi.ToString
ore, minuti ecc sono Integer
in seguito a questa istruzione la variabile s contiene i caratteri della  
variabile n e nulla di più
non mette nemmeno i :
se richiamo la stessa istruzione dopo aver assegnato a ore, minuti ecc. un  
valore proveniente da una conversione tramite String.Intern allora per  
magia funziona tutto.
assurdo no?
ovviamente ho controllato e le variabili ore, minuti ecc. contengono dei  
valori interi, non sono vuote


 assurdo no?
Non lo so, ma se dovessi scommettere direi che ha ragione lui.


 Che senso ha?
la stringa sarebbe textbox.Text dalla quale estraggo i minuti secondi ecc.
li memorizzo come interi perché se devo fare un confronto non mi serve  
fare la conversione
diciamo che è un progetto nato molto di fretta, comunque sto problema è  
veramente assurdo :D


 + tempo.decimi.ToString
Partiamo da qui.
Hai provato a mettere un punto di interruzione esattamente dopo questa
istruzione, e vedere che cosa contiene, in quel momento, la variabile s?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 istruzione, e vedere che cosa contiene, in quel momento, la variabile s?
s = n + " " + tempo.minuti.ToString + ":" + tempo.secondi.ToString + ":"
 > + tempo.decimi.ToString
s č inizializzata con la stringa vuota "" e dopo quella istruzione di 
assegnamento contiene esattamente il valore di n
č come se ignorasse i vari + che seguono n, pensa che non mette nemmeno 
lo spazio all'inizio!
ho notato una cosa
se guardo il contenuto della variabile s mi da il numero di gara senza 
il " finale
ad esempio s = "221
altrettanto vale per n
manca quindi il fine stringa, strano!

 assegnamento contiene esattamente il valore di n
L'unica cosa che mi viene in mente, ma non so neppure se significa
qualcosa, č che la concatenazione di stringhe dovrebbe essere
preferibilmente effettuata con l'operatore & piuttosto che con il +. 


 preferibilmente effettuata con l'operatore & piuttosto che con il +. 
ho provato ma non è cambiato niente
credo di avere trovato il problema
n nel mio caso è ottenuta dalla concatenazione di più caratteri quindi 
variabili Char.
la variabile n viene visualizzata come dicevo prima "123 senza il " finale.
se per fare un esempio assegno "123" a mano ad n poi s assume il valore 
corretto con i tempi
come faccio a mettere il fine stringa ad n? ho provato ad aggiungere 
"\0" come avrei fatto in c ma non è servito a niente

 "\0" come avrei fatto in c ma non è servito a niente
Il problema è che n non ha il valore corretto!
Probabilmente lo \0 finale ce l'ha gia: è per questo che non vedi le
virgolette finali nel debugger.
O comunque dopo "n" c'è uno dei caratteri non stampabili.


 O comunque dopo "n" c'è uno dei caratteri non stampabili.
sai qual era il problema?
era che ho dichiarato l'array in questo modo
Dim numero(4) as Char
convinto quindi di avere 4 elementi invece ho scoperto che posso usare 
gli indici da 0 a 4!!
sapete com'è, dopo anni di java e c mi aspetto di trovare le stesse cose 
in Visual Basic, non capisco perché questa assurdità dell'array ma pazienza
già che ci sono un'ultima cosa: come devo inizializzare un Char in 
questo caso? se lo inizializzo a "" non chiude correttamente la stringa

 questo caso? se lo inizializzo a "" non chiude correttamente la stringa
Un char č un char, non puň per definizione essere vuoto.
Secondo me fai prima a usare una stringa.


 Secondo me fai prima a usare una stringa.
si ora uso una stringa e il problema č sparito, grazie a tutti.
sono ancora troppo abituato al c e quindi all'idea che una stringa č un 
array

 questo caso si fa solo confusione
Io, ad esempio, faccio il redim esplicito:
redim a(0 to 3) as cVattelappesca