1. #1
    Nouveau membre du Club
    Inscrit en
    juin 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : juin 2010
    Messages : 43
    Points : 35
    Points
    35

    Par défaut Concaténation de chaînes de caractères

    Bonjour,

    Je débute en Lua et je rencontre actuellement un problème.
    Un petit bout de code vaut mieux qu'une longue explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function listdisk( ... )
     
    	for i, v in ipairs(lstVol) do lstVol[i] = nil end
    	local vol = io.popen("wmic logicaldisk where drivetype=2 get name")		
    	while true do
    		local line = vol:read("*line")
     
    		if line == nil then break end
    		if string.find(line, ":") ~= nil then 
    			lstVol[#lstVol+1] = line		
    		end
     
    	end 		
    	vol:close()		
     
    end
    Dans la suite de mon script je veux utiliser "lstVol[x]" en concaténant cette chaine avec une autre mais le problème est que la concaténation ne marche pas.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    local path = lstVol[1].."\\_ID"
    Au lieu d'avoir quelque chose du type : path = "E:\_ID"
    J'obtiens juste : path = "\_ID"

    Si lstVol[1] vaut "E:", un simple test comme :
    donne comme résultat : "*:"
    La lettre du lecteur est écrasée.



    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    décembre 2011
    Messages
    3 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : décembre 2011
    Messages : 3 228
    Points : 11 648
    Points
    11 648
    Billets dans le blog
    5

    Par défaut

    Bonjour !

    Il paraît impossible que la concaténation "ne marche pas". C'est plutôt (à mon avis) que la variable n'a pas la valeur que vous croyez qu'elle a. Avez-vous vérifié la valeur de la variable en l'affichant ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    juin 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : juin 2010
    Messages : 43
    Points : 35
    Points
    35

    Par défaut

    J'ai fini par trouvé la solution, le problème est dans le retour de la fonction "read" qui ne renvoie pas une chaine mais surement un handle sur un buffer ou quelque chose du genre.

    J'ai contourné le problème de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    -- ---
    -- --- Liste tout les appareils USB.
    -- ---
    function listdisk( ... )
     
    	local lst = {}	
    	local vol = io.popen("wmic logicaldisk where drivetype=2 get name")		
    	local txt = vol:read("*all")
     
    	for letter in string.gmatch(txt, "%S+") do
    		if string.find(letter, ":") ~= nil then 
    			lst[#lst+1] = letter		
    		end		
    	end
     
    	vol:close()		
     
    	return lst
    end
    Et lorsque je parse le buffer "txt" j'obtiens une chaine de type string que je peux manipuler facilement.
    Merci d'avoir répondu mais mon problème est réglé et j'espère que ça aidera quelqu'un.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/01/2008, 10h10
  2. [Tableaux] Concaténation de chaine de caractéres
    Par Mo_Poly dans le forum Fonctions
    Réponses: 4
    Dernier message: 23/10/2007, 00h06
  3. Comment concaténer une chaine de caractères avec un espace ?
    Par blanchonvincent dans le forum MATLAB
    Réponses: 6
    Dernier message: 07/04/2007, 21h53
  4. Réponses: 2
    Dernier message: 02/04/2007, 11h07
  5. Réponses: 1
    Dernier message: 25/04/2006, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo