Newsgroup: it.comp.lang.visual-basic
Titolo: testo lungo in variabile contenente lo stesso testo ridotto

Ciao a tutti
Ho bisogno di un testo che non superi una certa lunghezza ad es. 50
caratteri
Ho anche la necessità di scrivere testi più lunghi
Dovrei quindi avere la possibilità  di scrivere in una casella di testo un
testo che superi i 50 caratteri ma contemporaneamente (anche se non li
supera) dovrei crearmi una copia del testo in una variabile in versione
ridotta, il testo dovrà essere tagliato al 50mo carattere o ancora meglio
sarebbe se si potesse tagliare la parola che rientra nel 50mo carattere
a me interessano comunque entrambi i testi, quello ridotto e quello totale
se qualcuno mi può aiutare gliene sono molto grato
Maurizio

 ha scritto

text1_change
    dim shortText as string
    shorttext = iif( len(text1)> 50, left(text1,50), text1)
end sub
per togliere eventali parole tagliate guarda nell'help instr() (se hai vb6
anche instrrev()), mid(), right().
ciao, a.

 Dovrei quindi avere la possibilità  di scrivere in una casella di testo un
testo che superi i 50 caratteri ma contemporaneamente (anche se non li
supera) dovrei crearmi una copia del testo in una variabile in versione
ridotta, il testo dovrà essere tagliato al 50mo carattere o ancora meglio
sarebbe se si potesse tagliare la parola che rientra nel 50mo carattere a me
interessano comunque entrambi i testi, quello ridotto e quello totale se
qualcuno mi può aiutare gliene sono molto grato
Prova a testare perche' io l'ho fatto girare solo una volta. E fammi sapere
cosa c'e` che non va, grazie.
Option Explicit
Sub Main()
  Const c_strFullFileName As String = "c:\test.txt"
  Dim intNFile    As Integer
  Dim strFile()   As String
  Dim lngItem     As Long
  Dim vntArray()  As Variant
  Dim lngSubItem  As Long
  Dim lngPos      As Long
  Dim lngLastPos  As Long
  intNFile = FreeFile(0)
  Open c_strFullFileName For Input As #intNFile
  strFile = Split(Input(LOF(intNFile), intNFile), vbCrLf)
  Close #intNFile
  ReDim vntArray(LBound(strFile) To UBound(strFile))
  For lngItem = LBound(strFile) To UBound(strFile)
    lngPos = 0: lngLastPos = 0
    Do
      lngPos _
        = InStrRev( _
            Mid$(strFile(lngItem), lngPos + 1, 50), " ")
      If lngPos And (lngPos > lngLastPos) Then
        Mid$(strFile(lngItem), lngPos, 1) = Chr$(0)
        lngLastPos = lngPos
      Else
        Exit Do
      End If
    Loop
    vntArray(lngItem) = Split(strFile(lngItem), Chr$(0))
  Next
  For lngItem = LBound(strFile) To UBound(strFile)
    Debug.Print strFile(lngItem)
    For lngSubItem _
      = LBound(vntArray(lngItem)) To UBound(vntArray(lngItem))
      Debug.Print , vntArray(lngItem)(lngSubItem)
  Next: Next
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 Prova a testare perche' io l'ho fatto girare solo una volta. E fammi
sapere cosa c'e` che non va, grazie.
[...]
Rel. 1.00.0001: Corretto errore logico nella divisione degli item in
subitem.
Option Explicit
Sub Main()
  Const c_strFullFileName As String = "c:\" & "test.txt"
  Const c_intLen  As Integer = 50
  Dim intFile     As Integer
  Dim strFile()   As String
  Dim lngItem     As Long
  Dim vntArray()  As Variant
  Dim lngSubItem  As Long
  Dim lngPos      As Long
  Dim lngLastPos  As Long
  intFile = FreeFile(0)
  Open c_strFullFileName For Input As #intFile
  strFile = Split(Input(LOF(intFile), intFile), vbCrLf)
  Close #intFile
  ReDim vntArray(LBound(strFile) To UBound(strFile))
  For lngItem = LBound(strFile) To UBound(strFile)
    lngPos = 0: lngLastPos = 0
    Do
      lngPos _
        = InStrRev( _
            strFile(lngItem), " ", lngPos + c_intLen - 1)
      If lngPos > lngLastPos Then


Purtroppo mi trovo in Access e non riconosce alcune funzioni, oltretutto, da
non esperto non riesco a integrare il programma, il testo da esaminare è in
una casella di testo "TestoL" e il testo ridotto in un'altra casella "text2"
"TestoL" lo metto nella variabile "intFile", e a "text2" cosa ci metto??
Maurizio

> Maurizio Giri:

Access 97 o 2000? Immagino 97, giusto?



Access 97
ciao

 Access 97
Peccato. Il vb di Access 97 non supporta le funzioni Split e InStrRev da me
usate nell'esempio. Mi viene anche qualche dubbio a proposito degli array di
array... Mah!...
Se hai colto la logica della routine potresti "addomesticarla"... o sperare
che qualche collega del ng ti dia una mano, o aspettare che io abbia un
momento di tempo...
Il disegno generale mi sembra vada bene per quello che devi fare. Potresti
anche provare a cercare nei post recenti un surrogato della funzione "Split"
che e` stato postato recentemente... se non sbaglio era tratto da MSDN.
Anche costruire una funzione che faccia quello che fa InStrRev non e` poi
cosi` macchinoso... Per darti una mano posto nuovamente la routine per
invogliare qualcuno a fornirti delle alternative.
Il problema era ottenere, dato un array di stringhe, un nuovo array con
stringhe non piu` lunghe di 50 caratteri e senza spezzare le parole,
mantenendo una corrispondenza fra i due array. Giusto?
Option Explicit
Sub Main()
  Const c_strFullFileName As String = "c:\test.txt"




      Else
        Exit Do
      End If

  Next

  Next: Next
End Sub
--
