Scite 排序选择

lua-users home
wiki

以下函数将按字母顺序或反字母顺序对选定文本进行排序。lines() 函数已更新以适用于 Lua 5.1 或 SciTE 1.74+。新的 lines() 函数允许选定块末尾缺少换行符。排序例程还会在排序后恢复最终的换行符(如果有)。如果使用 \n 换行符,则脚本执行后文件大小不应改变。

享受!

-- Sort a selected text

function lines(str)
  local t = {}
  local i, lstr = 1, #str
  while i <= lstr do
    local x, y = string.find(str, "\r?\n", i)
    if x then t[#t + 1] = string.sub(str, i, x - 1)
    else break
    end
    i = y + 1
  end
  if i <= lstr then t[#t + 1] = string.sub(str, i) end
  return t
end

function sort_text()
  local sel = editor:GetSelText()
  if #sel == 0 then return end
  local eol = string.match(sel, "\n$")
  local buf = lines(sel)
  --table.foreach(buf, print) --used for debugging
  table.sort(buf)
  local out = table.concat(buf, "\n")
  if eol then out = out.."\n" end
  editor:ReplaceSel(out)
end

function sort_text_reverse()
  local sel = editor:GetSelText()
  if #sel == 0 then return end
  local eol = string.match(sel, "\n$")
  local buf = lines(sel)
  --table.foreach(buf, print) --used for debugging
  table.sort(buf, function(a, b) return a > b end)
  local out = table.concat(buf, "\n")
  if eol then out = out.."\n" end
  editor:ReplaceSel(out)
end

如果要忽略空行,或者要排序的选择中始终没有空行,则以下 lines() 函数更简单

function lines(str)
  local t = {}
  for ln in string.gmatch(str, "[^\r\n]+") do
    t[#t + 1] = ln
  end
  return t
end

旧的 lines() 函数,来自 StringRecipes,适用于 SciTE 1.74 之前的版本(Lua 5.0.x),如下所示

function lines(str)
  local t = {n = 0}
  local function helper(line) table.insert(t, line) end
  helper((string.gsub(str, "(.-)\r?\n", helper)))
  return t
end

WalterCruzKeinHongMan


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 11 月 18 日上午 9:42 GMT (差异)