Domanda

Ho lavorato su un metereologo per un programma che uso, e sta funzionando bene, per la maggior parte. Ecco quello che ho finora. (Non prestare attenzione alla zs.stuff. Questo è il programma specifico e non ha alcuna attinenza con la codifica del Lua.)

if not http then http = require("socket.http") end  

local locale = string.gsub(zs.params(1),"%s+","%%20")
local page = http.request("http://www.wunderground.com/cgi-bin/findweather/getForecast?query=" .. locale .. "&wuSelect=WEATHER")
local location = string.match(page,'title="([%w%s,]+) RSS"')
--print("Gathering weather information for " .. location .. ".")
--local windspeed = string.match(page,'<span class="nobr"><span class="b">([%d.]+)</span>&nbsp;mph</span>')
--print(windspeed)
local condition = string.match(page, '<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/[%w_]+.gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
--local image = string.match(page, '<img src="http://icons-ecast.wxug.com/i/c/a/(.+).gif" width="42" height="42" alt="[%w%s]+" class="condIcon" />')
local temperature = string.match(page,'pwsvariable="tempf" english="&deg;F" metric="&deg;C" value="([%d.]+)">')
local humidity = string.match(page,'pwsvariable="humidity" english="" metric="" value="(%d+)"')
zs.say(location)
--zs.say("image ./Images/" .. image .. ".gif")
zs.say("<color limegreen>Condition:</color> <color white>" .. condition .. "</color>")
zs.say("<color limegreen>Temperature: </color><color white>" .. temperature .. "F</color>")
zs.say("<color limegreen>Humidity: </color><color white>" .. humidity .. "%</color>")

Il mio problema principale è questo: ho cambiato la 'condizione' e ha aggiunto le variabili 'immagine' di quello che sono ora. Anche se la linea che si suppone di essere corrispondenza proviene direttamente dalla pagina web, non riesce a corrispondere a tutti. Quindi mi chiedo che cosa è che mi manca che impedisce questo codice da lavorare. Se prendo il
    <td class="vaM taC"> che sarà abbinare condizione impeccabile. (Per una qualche ragione, non riesco a ottenere la linea di cui sopra per visualizzare correttamente, ma non c'è spazio tra il `

Can punto qualcuno ciò che è sbagliato con esso? A parte il pattern matching, vi assicuro la linea è testualmente dalla pagina web.

Un altro problema che ho avuto è la capacità di abbinare tra interruzioni di riga. Esiste un modo possibile per fare questo? Il motivo per cui mi chiedo è perché sulla stessa pagina, alcune delle cose che ho bisogno di partita sono rotto su righe separate, e dal momento che l'andamento reale Sono voler abbinare spettacoli in altri luoghi sulla pagina, ho bisogno per essere in grado di eguagliare attraverso interruzioni di riga per ottenere il modello esatto.

È stato utile?

Soluzione

È possibile semplificare il tuo partner considerevolmente (vedi sotto), ma in generale sembra che tu hai due problemi ...

  • Manca il tutto il match () che si desidera catturare.
  • È necessario per sfuggire al. personaggi in un match rendendoli%.

Ho provato questo e ha funzionato ...

local page = [[<td class="vaM taC"><img src="http://icons-ecast.wxug.com/i/c/a/hello_world.gif" width="42" height="42" alt="HELLO WOLRD" class="condIcon" />]]
local condition, image = string.match(page, '.+/([%w_]+)%.gif".+alt="([%w%s]+)".+')
print(condition, image)

questo stampato ...

hello_world    HELLO WORLD

Per quanto riguarda più righe, che non dovrebbe essere un problema, i ritorni a capo sono caratteri di controllo solo e se leggete su più righe nella stessa stringa di questo opere partita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top