Newsgroup: it.comp.lang.visual-basic
Titolo: Inserire ritorni a capo in una stringa.

Ciao a tutti, una domanda lampo: perchè la seguente istruzione non funziona?
Text1.Text = Text1.Text + Chr$(13) + String(78, "_") + Chr$(13)
La sua funzione sarebbe quella di inserire una linea separatrice nel testo
di una text box. Qualcosa però non va: i 78 caratteri "_" appaiono ma non
c'è ne il ritorno a capo prima della linea, ne dopo. Come mai?
Zefram.
--
Visita il mio sito! 
http://members.xoom.it/iz4apu
- MSN Messenger: 
siddh...@hotmail.com
- GSM +39 / 338 / 431 20 29

 Text1.Text = Text1.Text + Chr$(13) + String(78, "_") + Chr$(13)
Text1.Text = Text1.Text & vbcrlf & String(78, "_") & vbcrlf


 Text1.Text = Text1.Text + Chr$(13) + String(78, "_") + Chr$(13)
Text1.Text = Text1.Text & VbNewLine & String(78, "_") & VbNewLine
Ciao
Alberto

 ha scritto nel messaggio
news:uPXW8.20125$7N3.4...@twister2.libero.it...


Text1.Text = Text1.Text & vbcrlf & String(78, "_") & vbcrlf
suggerirei vbnewline anziche' vbcrlf :)
saluti che fanno le scarpe alle mosche :)
-- 
      Gianni "bugbarbeq" Rondinini, 26+15, RA, 193, 152
   VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 BMW 530D "BatMobile EVO" Driver - Escortone da 500 CV dreamer
Kawasaki "Gas Gas" ZZ-R 1100 - HD Electra Ultra Classic Dreamer
   On contrary of popular belief, Unix *IS* user friendly:
    it just appears to be selective who it is friend with

 suggerirei vbnewline anziche' vbcrlf :)
anche albe v°, sembra :)
differenze ?

 ha scritto

No, in VB sono identici (13+10). Sarà una finezza...

 ha scritto nel messaggio
news:x01X8.20249$K_4.4...@twister1.libero.it...

Esatto.
E' una finezza, ma ha un grosso vantaggio:
Nel passaggio a .Net, VBCRLF sarà sempre considerato come 13+10, visto che
lo sviluppatore potrebbe averlo utilizzato per inserire questi due caratteri
in una stringa, ad esempio per comunicazioni seriali, ecc...
Al contrario, VBNEWLINE sarà considerato secondo la convenzione del ritorno
a capo del sistema in cui l'applicativo eseguirà. La conversione da costante
a uno o più caratteri di controllo sarà infatti effettuata dal .Net
Framework, che come noto è diverso per i vari sistemi. E considerando che in
futuro esisterà il Framework anche per telefoni cellulari, per bancomat,
ecc..., chissà cosa potrà diventare VBNEWLINE.
Ma qualunque cosa diventerà, significherà sempre "qui vai a capo", mentre
VBCRLF significherà sempre "qui mettici chr(13) e chr(10)", che potrebbe
anche rappresentare tutt'altro.
Ciao
Alberto

 a capo del sistema in cui l'applicativo eseguirà.
Buona precisazione, Alberto.
Della serie (M$) "cancellate quel che vi ho detto sinora, anzi, riscrivete
tutti i vostri programmi..."
Dico io, pardon, non sarebbe stato più semplice (visto che vbCrLf è sempre
stato inteso come "vai a capo") dare questo nuovo significato "dinamico" a
vbCrLf e inventarsi una nuova costante (per esempio vbNewLine) per il 13+10
fisso, quando da usarsi esplicitamente e volontariamente?

 stato inteso come "vai a capo")
No.
CR=chr(13)
LF=chr(10)
quindi vbcrlf è chr(13)+chr(10) _NON_ "a capo".
"a capo" è NewLine.
Che poi in win NewLine = CrLf è un altro discorso.
Ma cambiando l'os l'uguaglianza è false.
ciao
ugo

 Ma cambiando l'os l'uguaglianza è false.
Ok, evidentemente in questi giorni sono proprio fuso e non riesco a
spiegarmi, però rileggendo il mio post non riesco a capire qualcosa di
diverso da quello che c'è scritto...

 fisso, quando da usarsi esplicitamente e volontariamente?
Se capisco bene, tu sostieni che sarebbe stato conveniente fare esattamente
il contrario di quanto avverrà, ossia fissare per sempre
VBNEWLINE=CHR(13)+CHR(10), e cambiare il significato di VBCRLF in funzione
del sistema operativo, visto che "vbCrLf è sempre stato inteso come "vai a
capo"".
Non sono d'accordo per due motivi:
1) VBCRLF è sempre stato inteso come "vai a capo" da qualcuno (molti?), non
da tutti. Io ad esempio uso VBCRLF per inserire caratteri di terminazione
messaggio nella comunicazione seriale con alcuni PLC. Del resto, come
giustamente dice Ugo, CR=chr(13) e LF=chr(10), per cui VBCRLF è anche
intuitivamente una costante che non potrà variare di significato. Se domani,
per ipotesi, VBCRLF diventasse CHR(29)+CHR(7)+CHR(14), allora sì che potrei
incazzarmi parecchio con MS.
2) VbNewLine rende molto leggibile il codice quando ci sono concatenazioni
di stringhe.
Ciao
Alberto

Ora mi è più chiaro.
Abituato fin dall'inizio all'uso di vbCrLf non avevo minimamente presente
che vbNewLine fosse una costante _già_ presente (e "dinamica" a differenza
del vbCrLf), pensavo fosse nuova, da .net in poi.

 Text1.Text = Text1.Text + Chr$(13) + String(78, "_") + Chr$(13)
Text1.Text = Text1.Text & vbCrLf & String(78, "_") & vbCrLf
Se desideri andare a capo usando la Funzione CHR devi dargli Chr(10) &
Chr(13);
Carriege Return e Line Feed.
La cosa importante e' che quando lavori con delle stringhe in VB, e'
preferibile concatenarle con "&" piuttosto che con il "+".
--
'''®foolbrain®'''
Visual Basic Programmer
Database Designer & Manager
F.O.O.L.: Functional Obedient Observation Lifeform
B.R.A.I.N.: Biomechanical Robotic Android Intended for Nullification
ICQ# 88912631

 del vbCrLf), pensavo fosse nuova, da .net in poi.
Tutte le costanti sono "dinamiche", nel senso che possono cambiare di valore
con l'evolversi delle tecnologie.
Proprio per questo vanno usate, anzichè usare i loro valori effettivi che
possono cambiare.
Ad esempio, oggi lo stato chiuso di un Recordset è AdStateClosed, che vale
0.
Domani potrebbe essere deciso che lo stato chiuso sarà indicato da 99, ma
sarà sempre AdStateClosed.
Quindi, chi avrà usato:
If Rcs.State=0 then .....
avrà dei malfunzionamenti, mentre chi avrà usato
If Rcs.State=AdStateClosed then ....
sarà a posto (ricompilando, ovviamente).
Nel caso di VbCrLf e VbNewLine, il discorso è legato ai sistemi operativi.
Io ho capito profondamente la cosa quando ho cominciato a dialogare con
sistemi As/400 o Unix, dove il concetto di "A Capo" può essere espresso con
altri caratteri. Creavo dei file inserendo i miei caratterini di controllo,
e regolarmente qualcosa non funzionava. Dopo essermi documentato, ho
iniziato ad usare caratteri di controllo diversi, e ho risolto il problema.
Ovviamente quando (e se) ci sarà un compilatore VB per Unix, o anche già con
il .Net Framework, il programma deve compilarsi inserendo i caratteri
giusti, e questo può essere ottenuto solamente utilizzando una costante che
indichi "Cosa vuoi fare", e non "Quanto Vale".
Ciao
Alberto.

 sarà sempre AdStateClosed.
Certo, quest'ultima parte è ovvia e "pace e bene" a chi ha passato i valori
piuttosto che i nomi delle costanti. Per il vbNewLine, come detto, pensavo
fosse una cosa nuova. Grazie dei chiarimenti.

 stato inteso come "vai a capo")
    Miopia informatica indotta da DOS/Windows?
    Esistono altri mondi.
    Ho visto... (Blade Runner)
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 Chr(13);
    Esattamente il contrario...


     Esattamente il contrario...
OPS!
C'e' qualcosa che non mi torna !
In che senso il contrario ?! :O
Per provare ho aperto un nuovo Progetto/EXE standard con VB6.
Ho aggiunto al Form1 un Command1 e su Command1_Click() ho inserito questa
riga di codice:
MsgBox "PROVA" & Chr(10) & Chr(13) & "DI ANDATA A CAPO."
Il message box mi si e' aperto come mi aspettavo !
Cosa non dovrebbe funzionare secondo te ? :O


 In che senso il contrario ?! :O
Nel senso, credo, che vbCrLf e vbNewLine valgono, attualmente quest'ultimo e
su SO Win, chr(13) & chr(10), non chr(10) & chr(13)
In fase rappresentativa, andare a inizio riga (13) e a riga seguente (10)
piuttosto che andare a riga seguente (10) e a inizio riga (13), credo che
sia, alfine, esattamente la stessa cosa.

 sarà a posto (ricompilando, ovviamente).
Sì, però nel compilato AdStateClosed  è una costante (che viene sostituita
dal compilatore con 0) e non si modifica certo in base alle impostazioni del
sistema/versione di ADO installata sulle macchine su cui girerà.
Quindi toccherebbe ricompilare tutti gli eseguibili per l'occasione.
Credo che la parola "costante" dovrebbe rendere l'idea di come dovrebbe
essere trattato l'oggetto.
Per esempio la definizione di vbCrLf si trova in vba.Constants.vbCrLf
Cosa diversa se vbCrLf o AdStateClosed  fossero funzioni gestite dal runtime
oppure dal framework oppure da ADO; in questo caso sarebbe compito di chi le
invoca sapere esattamente cosa servono e quando usarle.
Saluti,
Luca Barbetta kck/skd

 giustamente dice Ugo, CR=chr(13) e LF=chr(10),
che terminano le linee nei nx e nei mac...


 anche rappresentare tutt'altro.
grazie, immaginavo che si riferisse all'ambientazione, ma pensando in
termini di win mi sfuggiva, e almeno i codici ovvi difficilmente li vado a
sciogliere. diciamo che uso da vbred in su. se (se) net passa su nx e
altrove, quello che dici ha parecchio senso.
speriamo che nei bancomato vbnewline non si sbizzarrisca troppo.
vbcrlf so che mette solo una riga bianca... :)
ciao, a.

> suggerirei vbnewline anziche' vbcrlf :)
Io dico che è meglio se si abitua ad usare vbCrLf  xchè poi lo userà anche
quando svilupperà applicazioni client/server col controllo winsock.
Bye, malmsteen.

quando svilupperà applicazioni client/server col controllo winsock.
Che relazione c'e' tra un qualsiasi file di testo ed un qualsiasi protocollo di
comunicazione?
-- 
ciao, hal