Prob sur manip chaine [VISUAL BASIC] - Programmation
Marsh Posté le 04-08-2001 à 15:39:40
BillBoule a écrit a écrit : Voila j'ai un code qui ressemble a ça : Dim var1 as string * 260 var1 = "salut" Dim taille as integer taille = len(var1) c'est là qu'est le problem parce qu'il me dit taille = 260 Est-ce que qqn sait comment je peux prendre seulement la taille de la chaine sans changer la declaration de la var1 |
Oui, c'est trés simple, il faut que tu enlève 260, car tu crée un variable de 260 caractére auquel tu va affecter une valeur chaine pour et enfin lui demander le nombre de caractéres, cela se mord la queue !!!
Dim var1 as string
Dim taille as integer
var1 = "salut"
taille = len(var1)
tu enlève 260 (même string le cas échéant) et cela devrait marché.
Nb : met toutes les variables ensemble, ainsi que des commentaires. il tout de même plus simple
taille = len("salut" )
msgbox(taille)
a+
Marsh Posté le 04-08-2001 à 16:09:44
En fait c'est plus compliqué que ça, j'utilise un type WIN32_FIND_DATA. var1 estdans mon exemple precedent la variable cFileName avec MAX_PATH = 260 ceci pour utiliser les api win findfirstfile et findnextfile donc je ne peux pas enlever le string * MAX_PATH
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Marsh Posté le 04-08-2001 à 16:15:51
Alors ne t'emmerde pas plus que cela, tu n'as qu'a allé sur le site
www.vbfrance.com
il est vraiment excellent pour des exemples de programmes, ou bien sur cette page ci
www.vbfrance.com/visitelien.asp?Val=59&ValB=L
tu as toute une chier d'API windows, y compris me semble t-il la fonction que tu désires...
bonne chance
Marsh Posté le 04-08-2001 à 21:54:40
Le len(trim(var1)) me renvois tjrs 260, ça ne marche pas
Et je n'ai pas de prob avec l'uttilisation des api, je veux seulement recuperer le nom des fichier sans leur extension. voici le code sans les declare api:
Dim FileSearch As Long
Dim FindData As WIN32_FIND_DATA
Dim taille as integer
'Recherche des fichiers a copier
FileSearch = FindFirstFile("c:\temp\*.*", FindData)
If FileSearch <> INVALID_HANDLE_VALUE Then
Do
taille = Len(Trim(FindData.cFileName))
MsgBox taille
KeyName = Left(FindData.cFileName, taille - 4)
MsgBox KeyName
Loop While (FindNextFile(FileSearch, FindData) <> 0)
La fonction me retrouve bien le nom des fichier mais le travail sur la chaine FindData.cFileName ne donne rien
Marsh Posté le 05-08-2001 à 08:27:54
Dim var1 as string * 260
Dim taille as integer
dim temp
var1 = "salut"
temp=var1
taille = len(trim(temp))
msgbox(taille)
Marsh Posté le 05-08-2001 à 09:35:15
contrairement à ce qui a été bêtement dit précédement, LAISSE le string *260
Si tu mets pas string, ta var est déclarée en "variant" (qui te permet de ne pas avoir à te soucier des types car le cast est auto mais qui pompe de la mémoire comme c'est pas permis, puis c'est pas rigoureux). De plus, ton *260 "bloque" l'occupation mémoire de ta string à 260 caracts. Sinon, il réserve la taille maximale (je ne la connait pas par coeur...) pour un string....même si tu n'utilise qu'un caractère !
Par contre une telle string est initialisée apr VB à space(lng) où lng est la longueur spécifiée... Penses donc à mettre des "trim".
Marsh Posté le 05-08-2001 à 11:14:43
ça ne marche toujours pas les gars, je commence a deprimer serieusement.
Je doit fournir un truc operationnel ce soir, ça urge. y'a personne qui a deja fait ça ????
Marsh Posté le 05-08-2001 à 11:42:03
BillBoule a écrit a écrit : ça ne marche toujours pas les gars, je commence a deprimer serieusement. Je doit fournir un truc operationnel ce soir, ça urge. y'a personne qui a deja fait ça ???? |
As tu essayer de mettre un point d'arret (rond rouge) au niveau de "keyname = Left(FindData.cFileName, taille - 4)", cela t'aiderais a trouver le problème et de suivre le code au fur et a mesure...
Autre conseil si tu peut le faire, remplace l'affichage des messages (msgbox) temporairement par une liste (list1.additem ....), cela est beaucoup plus rapide pour faire des diagnostics.
Je viens de faire ton code et effectivement il m'affiche ceci dans les premiers lignes
260
.
260
..
260
getrightkey.exe
260
fichier.exe
et aisni de suite...
nb: tu peut le supprimer les points rouge au cours de l'exécution sans aucun problème
voila et bonne chance
Marsh Posté le 05-08-2001 à 11:50:05
ça ne marche pas avec une variable temporaire comme je te l'ai deja ecrit ??
Marsh Posté le 05-08-2001 à 12:00:32
ton problème vient de la constante
MAX_PATH = 260
lorsque tu arrette l'éxécution ta variable taille= 260 et n'ont pas le Nb de caractére que tu souhaite...
essaye de faire une boucle en lui demanadnt de tourner de gauche à droite, et qu'ils s'arrettent des qu'il trouvent un point ".", essaye...
Marsh Posté le 04-08-2001 à 15:14:25
Voila j'ai un code qui ressemble a ça :
Dim var1 as string * 260
var1 = "salut"
Dim taille as integer
taille = len(var1)
c'est là qu'est le problem parce qu'il me dit taille = 260
Est-ce que qqn sait comment je peux prendre seulement la taille de la chaine sans changer la declaration de la var1