Newsgroup: it.comp.lang.visual-basic
Titolo: Stringhe

Con la funzione getwindowsdirectory mi viene data nella variabile dir as
string * 255 la directory di windows, ora il problema e che devo inserire lo
\ non posso x' la stringa č piena. Ho provato a fare Temp=dir temp=temp&"/"
ma viene aggiunto il 256 carattere /.
Rtrim o la trim non funzionano, allora come faccio a fare la copia dei
caratteri della stringa fino a non incontrare lo spazio vuoto (almeno credo
sia cosě nella dim che mi ritorna la sub).
--
____/*\____/*\____/*\____/*\____/*\____
HaPpY
E-Mail: hap...@REMOVEsupereva.it
Home page: 
http://happy77.supereva.it/index.html
____/*\____/*\____/*\____/*\____/*\____

 sia cosě nella dim che mi ritorna la sub).
Invece di fare cosi':
  Dim s_Dir As String * 255
fai cosi':
  Dim s_Dir As String
  ...
  s_Dir = Space$(255)
  ...
  s_Dir = Trim$(s_Dir) & "\"
--
Ciao.
Maurizio

 ha scritto


non sono sicuro che il sistema funzioni, happy infatti dice che i trim non
vanno. non vorrei cazzeggiare, dato che non ne so un tappo, ma direi che
l'ultimo sia un vbNullChar o parente, e il trim non lo tocca.
qualcuno prob ti sa fornire una funzione che usa instr per eliminarlo, nel
caso.
cmq io uso il sistema qui sotto, trovato parecchio tempo fa, che sembra
andare:
( guardandolo adesso, anzi, mi chiedo anche come diavolo fa ad andare, visto
che la chiamata va a piazzare un long in un x integer -- fatt'e' che non mi
ha mai dato nessun problema -- magari conviene mettere x as long, l'ho fatto
adesso e il pc va ancora :)
ciao, a.
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias
"GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias
"GetSystemDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Function GetWinDir() As String
    Dim Temp As String * 256
    Dim x As Integer
    x = GetWindowsDirectory(Temp, Len(Temp))
    GetWinDir = Left$(Temp, x)
    GetWinDir = LCase(IIf(Right(GetWinDir, 1) = _
        "\", GetWinDir, GetWinDir & "\"))
End Function
Private Function GetWinSysDir() As String
    Dim Temp As String * 256
    Dim x As Integer
    x = GetSystemDirectory(Temp, Len(Temp))
    GetWinSysDir = Left$(Temp, x)
    GetWinSysDir = LCase(IIf(Right(GetWinSysDir, 1) = _
        "\", GetWinSysDir, GetWinSysDir & "\"))
End Function
Private Sub Command1_Click()
    Picture1.ForeColor = vbBlue
    Picture1.Cls
    Picture1.Print "WIN: " & GetWinDir() & vbCrLf & _
        "SYS: "; GetWinSysDir()
End Sub

 l'ultimo sia un vbNullChar o parente, e il trim non lo tocca.
La Grande Magia avviene nelle righe di codice che vanno al posto di "..." e
il Trim e' solo per sicurezza!...
A parte gli scherzi, credo si possano sintetizzare cosi' i vari casi:
Const i% = 255
Dim a$
Dim l&
a$ = Space$(i%)
l& = Len(a$)
Call Pippo(a$, l&)
a$ = Left$(a$, l&)
a$ = Space$(i%)
l& = Pippo(a$)
a$ = Left$(a$, l&)
' Qui bisognerebbere distinguere fra NT e WINx...
'
a$ = Space$(i%)
Call Pippo(a$)
a$ = Left$(a$, InStr(a$, vbNullChar) - 1)
Ce ne sono sicuramente altri che non mi vengono in mente ora. Se qualcuno
fosse cosi' gentile...
--
Ciao.
Maurizio

 ' Qui bisognerebbere distinguere fra NT e WINx...
Quale e' la differenza tra WINx e NT ?
Grazie
gs

 Quale e' la differenza tra WINx e NT ?
Mi riferivo, frettolosamente e forse impropriamente, al fatto che "Win95
include in coda ai dati un Null, WindowsNT no". (Corrado Cavalli,
"Modificare il Registro di Windows", FAQ del Sito comune).
--
Ciao.
Maurizio




 nella stringa!!
La "gabola" non e' nella stringa ma nella tua interpretazione della funzione
GetWindowsDirectory. Quel Ret non e' un valore di ritorno di successo/errore
ma, come puoi leggere in 
http://members.xoom.it/CesareRizzi
:
"La funzione ritorna la lunghezza della stringa restituita. In caso di
errore,
restituisce 0."
Prova ad analizzare cosa c'e' nel tuo "lpBuffer" dopo la chiamata di
GetWindowsDirectory, cosi':
  Dim i As Integer
  For i = Ret To Ret + 2
    Call MsgBox(Asc(Mid$(lpBuffer, i, 1)))
  Next
troverai che il primo carattere e' 83, codice ascii della lettera "S" di
"WINDOWS", poi 0 (zero), poi 32 (spazio) cosi' come i restanti.
Quindi:
Option Explicit
Private Const MAX_PATH  As Integer = 260
Private Declare Function GetWindowsDirectory& _
  Lib "kernel32" _
  Alias "GetWindowsDirectoryA" ( _
    ByVal lpBuffer As String _
  , ByVal nSize As Long _
  )
Public Sub Main( _
)
Dim s_Buffer As String
Dim l_Lenght As Long
Dim s_WinDir As String
  Let s_Buffer = Space$(MAX_PATH)
  Let l_Lenght = GetWindowsDirectory(s_Buffer, Len(s_Buffer))
  Let s_WinDir = CompletePath$(Left$(s_Buffer, l_Lenght))
  Call MsgBox(s_WinDir)
End Sub
Public Function CompletePath$( _
ByVal strPath As String _
)
  Let CompletePath _
    = strPath & IIf(Right$(strPath, 1) = "\", "", "\")
End Function
--
Ciao.
Maurizio

 nella stringa!!
grazie.
vbNullChar ?