WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   Lua/XML Help (https://www.wowinterface.com/forums/forumdisplay.php?f=16)
-   -   How to scan the command line for an item link with spaces (https://www.wowinterface.com/forums/showthread.php?t=2306)

vincentgdg 11-03-05 08:03 AM

How to scan the command line for an item link with spaces
 
Hello there.

I am nearly finished with my addon "restack" but now I have a little problem with scanning the command line.

I use a function GetCmd() from somewhere, but that one splits arguments when there is a space in the line.

So when I get a line with a link in it that has space, it breaks.

What I want to have is a function that does the following:

cmdline = "a test" -> returns "a","test"

cmdline = "4231:0:0...[name with spaces] 3" -> returns "4231:0:0...[name with spaces]","3"

I know there must be a very easy regex for this, if I only would be better in this. :-)

Pls help.

Regards
Thomas

noraj 11-03-05 03:20 PM

why cant you have each word(characters seperated by space) returned seperatly?

what are you trying to do

I guess you could do

local thiscommandarray =GetCommand()
for key, value in thiscommandarray do
if(not thiscommandstring)and (value) then thiscommandstring = value end
elseif(thiscommandstring) and (value) then thiscommandstring = thiscommandstring.." "..value end
end
DEFAULT_CHAT_FRAME:AddMessage(thiscommandstring)

that should do what you want...dunno if its the best way though

Aquendyn 11-04-05 09:04 PM

see which pattern match comes first.
Code:

function parseCommand( cmdLine )
local a={}
local linkPat = "|?|H.-|h.-|h";
local wordPat = "%S+";

while ( ""~=gsub(cmdLine, "%s", "") ) do
        local word, link, pattern;
        word = strfind( cmdLine, wordPat);
        link = strfind( cmdLine, linkPat);
        pattern = word and link;
        if ( word and not link or pattern and word < link ) then
                pattern = wordPat;
        else
                pattern = linkPat;
        end
               
        cmdLine = gsub( cmdLine, pattern, function(i)
                table.insert(a, i);
        end, 1 )
end
return a;
end



All times are GMT -6. The time now is 02:03 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI