[VISUAL BASIC] Prob sur manip chaine

Prob sur manip chaine [VISUAL BASIC] - Programmation

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

Reply

Marsh Posté le 04-08-2001 à 15:14:25   

Reply

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+ :pt1cable:

Reply

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

Reply

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 :hello:   :ouch:

Reply

Marsh Posté le 04-08-2001 à 17:43:35    

Taille = len(trim(var1))
 
Trim enlève tout les blancs

Reply

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

Reply

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)

Reply

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".

Reply

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 ????

Reply

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 :benetton:

Reply

Marsh Posté le 05-08-2001 à 11:42:03   

Reply

Marsh Posté le 05-08-2001 à 11:50:05    

ça ne marche pas avec une variable temporaire comme je te l'ai deja ecrit ??

Reply

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...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed