2017-02-04 4 views
1

Ich möchte die POST-Parameter aus einer HTTP-Anfrage erhalten, die an meine NodeMCU gesendet wurde. Wie kann ich das erreichen? Ich dachte über den folgenden Code in C# nach. Wie implementiert man das in Lua?Wie kann ich bestimmten Text von String in Lua erhalten?

Mein Code in C#:

// Response = "<action>Play</action><speed>1</speed><blah>lol</blah>" 
// ValuetoSearch = "action" 
public static string GetInformationFromResponse(string Response, string ValueToSearch, bool RemoveHtmlCharacters = true) { 
      string returnValue = ""; 
      if (RemoveHtmlCharacters) { 
       Response = Response.Replace("<" + ValueToSearch + ">", ValueToSearch); 
       Response = Response.Replace("</" + ValueToSearch + ">", ValueToSearch); 
       Response = Response.Replace("&lt;" + ValueToSearch + "&gt;", ValueToSearch); 
       Response = Response.Replace("&lt;/" + ValueToSearch + "&gt;", ValueToSearch); 
      } 

      // Response = "actionPlayaction<Speed>1</Speed><blah>lol</blah>" 

      int indexOfWord = Response.IndexOf(ValueToSearch); // indexOfWord = 0 
      int start = indexOfWord + ValueToSearch.Length; // start = 6 
      int end = Response.Length - indexOfWord - 1; // 47 
      int totalLength = Response.Length; // 48 
      string newPositionInfo = ""; 

      if (indexOfWord == -1) { 
       return ""; 
      } else { 
       newPositionInfo = Response.Substring(start, totalLength - start); // newPositionInfo = "Playaction<Speed>1</Speed><blah>lol</blah>" 
       indexOfWord = newPositionInfo.IndexOf(ValueToSearch); // indexOfWord = 4 
       returnValue = newPositionInfo.Substring(0, indexOfWord); // returnValue = "Play" 
       if (RemoveHtmlCharacters) { 
        returnValue = returnValue.Replace("&lt;", ""); 
        returnValue = returnValue.Replace("&gt;", ""); 
        returnValue = returnValue.Replace("&amp;", ""); 
       } 
       return returnValue; // "Play" 
      } 
     } 

Die Verwendung dieses Codes ist wie folgt: - ich alles zwischen dem Wort "Aktion" erhalten möchten. - Ich habe einen Text, der das Wort "action" enthält.

string largeText = "<action>Play</action><speed>1</speed><blah>blah</blah>" 
string wordToSearch = "action" 
string value1 = GetInformationFromResponse(largeText, "action"); 
string value2 = GetInformationFromResponse(largeText, "speed"); 
string value3 = GetInformationFromResponse(largeText, "blah"); 
// Value 1 = "Play" 
// Value 2 = "1" 
// Value 3 = "blah" 

Aber wie bewerkstellige ich dasselbe in Lua (auf meiner NodeMCU)?

Hinweis: Neuling auf Lua und NodeMCU

Antwort

0
function GetInformationFromResponse(response, tag) 
    return 
     ((response:match((("<@>(.-)</@>"):gsub("@",tag))) or "") 
     :gsub("&(%w+);", {lt = "<", gt = ">", amp = "&"})) 
end 

local text = "<action>Play</action><speed>1</speed><blah>blah&amp;blah</blah>" 
local value1 = GetInformationFromResponse(text, "action"); -- "Play" 
local value2 = GetInformationFromResponse(text, "speed"); -- "1" 
local value3 = GetInformationFromResponse(text, "blah"); -- "blah&blah" 
local value4 = GetInformationFromResponse(text, "foo"); -- "" 
+0

Dank! Klappt wunderbar! – Johnnybossboy

0

Hier sind ein paar Funktionen, die dies tun wird:

function get_text (str, init, term) 
    local _, start = string.find(str, init) 
    local stop = string.find(str, term) 
    local result = nil 
    if _ and stop then 
     result = string.sub(str, start + 1, stop - 1) 
    end 
    return result 
end 

function get_tagged (str, tag) 
    local open_tag = "<" .. tag ..">" 
    local close_tag = "</" .. tag .. ">" 
    local _, start = string.find(str, open_tag) 
    local stop = string.find(str, close_tag) 
    local result = nil 
    if _ and stop then 
     result = string.sub(str, start + 1, stop - 1) 
    end 
    return result 
end 

Probe Interaktion:

> largeText = "<action>Play</action><speed>1</speed><blah>blah</blah>" 
> -- Using get_text() 
> print(get_text(largeText, "<action>", "</action>")) 
Play 
> -- Using get_tagged() 
> print(get_tagged(largeText, "action")) 
Play 
> print(get_tagged(largeText, "speed")) 
1 
> print(get_tagged(largeText, "blah")) 
blah 
> print(get_tagged(largeText, "oops")) 
nil 
Verwandte Themen