Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I get the number of lines from a script source?

Asked by 10 years ago

I'm developing a plugin that counts the lines in each and every script in a game, but I don't know how to detect a new line. Here's the main code so far:

function getLines()
    local count=0
    local objectsInGame={Workspace,game.Players,game.Lighting,game.ReplicatedFirst,game.ReplicatedStorage,game.ServerScriptService,game.ServerStorage,game.StarterGui,game.StarterPack,game.StarterPlayer,game.Soundscape,game.HttpService}
    for subject=1,#objectsInGame do

        for _,v in pairs(objectsInGame[subject]:GetChildren()) do
            if v:IsA("Script") or v:IsA("LocalScript") or v:IsA("ModuleScript") then
                print("Was a script")
                local source=v.Source
                --add to line count
            end
        end
    end
    return count
end

There are no errors, all of it works fully.

1 answer

Log in to vote
1
Answered by
BlueTaslem 18071 Moderation Voter Administrator Community Moderator Super Administrator
10 years ago

There are a bunch of different ways to accomplish this.

source is just a string, so we're somehow going to count newlines, which are specified by "\n" (the newline character).

Intuitively, a really simple way is to remove all of the newlines and find out how much shorter the string got.

local totalLength = #source

local sourceWithoutNewlines = source:gsub("\n", "")
-- Global substitution of newline with nothing

local lengthWithoutNewlines = #sourceWithoutNewlines

local numberOfNewlines = totalLength - lengthWithoutNewlines

local lineCount = numberOfNewLines + 1
-- 1 line will have no \n so we add one

In fact, gsub will tell us how many things it substituted, so doing the length comparison is actually unnecessary:

local sourceWithoutNewlines, numberOfNewlines = source:gsub("\n", "")
local lineCount = numberOfNewlines + 1
0
Cool, that's exactly what I needed! Thanks a lot! ChipioIndustries 454 — 10y
Ad

Answer this question