"Умное" преобразование табов

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

"Умное" преобразование табов

Post by John Doe »

Latest post of the previous page:

SUSim wrote: по скорости разницы не ощутил, ОСОБЕННО на длииных строках оба макроса сильно тормозят...
Почему бы не измерить объективно?
По моим подсчётам второй вариант значительно быстрее.
(Но оба медленнее чем http://forum.farmanager.com/viewtopic.p ... 38#p126438)
SUSim wrote: Но всё равно громоздко - весь файл антабить можно одной командой, а вот строку...
Файл ведь не волшебным образом антабится, где-то предусмотрен для этого код.
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

"Умное" преобразование табов

Post by John Doe »

SUSim wrote:Пока вот такое получается

Code: Select all

local function Detabify (str, tabsize)
  local s,t = 0,0
  return str:gsub("([^\t]*)\t", function(val) s=s+val:len(); t=tabsize-s%tabsize; s=s+t; return val..(" "):rep(t) end)
end
Кстати этот вариант можно упростить:

Code: Select all

local function Detabify (str, tabsize)
  return string.gsub(str,"(.-)\t", function(s)
    return s..(" "):rep(tabsize-s:len()%tabsize)
  end)
end
Скорость не очень, зато код имхо самый красивый (по сути доработанная версия того, что сразу предложил Shmuel).
User avatar
SUSim
Posts: 1637
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

"Умное" преобразование табов

Post by SUSim »

О! уже всё лучше и лучше... есть дикое желание editor.Getuntabstring() поиметь :) из коробки!
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 13862
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

"Умное" преобразование табов

Post by John Doe »

SUSim wrote: уже всё лучше и лучше..
А вот так ещё и быстрее:

Code: Select all

local function Detabify (str, tabsize)
  local prev = 1
  return string.gsub(str,"()\t", function(pos)
    local tabs = tabsize-string.sub(str,prev,pos):len()%tabsize
    prev = pos+1; return (" "):rep(tabs)
  end)
end
Но всё равно в 2 раза медленнее чем http://forum.farmanager.com/viewtopic.p ... 38#p126438
User avatar
zg
zero-gravity
Posts: 6036
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

"Умное" преобразование табов

Post by zg »

SUSim wrote:О! уже всё лучше и лучше... есть дикое желание editor.Getuntabstring() поиметь :) из коробки!
зачем?
Post Reply

Return to “Обсуждение макросов”