1

非常に長い文字列に新しい行 ("\n") を追加する方法を見つけようとしていますが、これまでのところ失敗しています。

x文字ごとに改行を挿入する関数はありますか? 基本的に、95 文字ごとに改行を追加する必要があります。ここに私が取り組んでいるテキストがあります:

記録のための覚書

件名: 件名

1) Nam fabulas mnesarchum comprehensam ne, cu ullum euismod consulatu usu. Eam alii lobortis voluptatum id, denique eligendi pertinax quo ne. Vis congue eirmod ut. デュオ プロボ ソレイト ex. Elit pertinax abhorreant eu his, ipsum dicam dissentiunt pri id. Kasd erant dolorum id sed, ei vim partem deseruisse, ne me a dico tantas arianum.

2) cu facilisis mediocritationm を持っています。Fabellas lucilius vim ex. Mei simul omnium et, wisi vidit ut ius. 広告には誠実さがあります。Malis animal aliquid id usu.

3) Nulla utinam appellantur cu qui, scripta sententiae disputando eu nam, ut pri unum Labore. Odio wisi torquatos sea cu. Ut detracto torquatos repudiandae pri. Vim puto solum epicurei at. Per nonummy perpetua similique te, odio platonem ut pri. Mei indoctum prodesset in, eam nisl quaerendum at.

4) At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium v​​oluptatum deleniti atque Corrupti quos dolores et quas molestias excepturi sint occaecati cupiditation nonprovident, similique sunt in culpa qui officia deserunt mollitia animi, id est labanditiis praesentium v​​oluptatum deleniti atque。Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque cumque nihil impedit quo - id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus.

4

4 に答える 4

1

それは簡単です!

local text = io.open'memorandum.txt':read'*a'  -- Load text from file
local n0, width = 0, 80
text = text:gsub('()(%s)',
    function(n, c)
        c = (n-n0 > width) and '\n' or c
        n0 = (c == '\n') and n or n0
        return c
    end)
io.open('memorandum2.txt','w'):write(text)  -- Save corrected text to file
于 2013-06-21T18:14:07.880 に答える
0

これにより、95 文字より短い行が直接出力され、95 文字以上の行が改行が追加された 94 文字のチャンクに分割されます。空白で分割されません。これは演習として残されています。

local fout = io.output(os.getenv('userprofile').. '\\desktop\\temp.txt', 'w+');
for str in string.gmatch(text, '(.-\n)') do
    if str:len() > 95 then
        while str:len() > 95 do
            local s = str:sub(1, 94)
            fout:write(s.. '\n')
            str = str:sub(94)
        end
    else
        fout:write(str)
    end
end
fout:flush(); fout:close();
于 2013-06-21T17:50:15.137 に答える
0

試してみてくださいprint(s:gsub("("..string.rep(".",95)..")","%1\n"))

しかし、テキスト全体ではなく、ごとにこれを行いたいと思います。

于 2013-06-21T17:36:30.873 に答える