これはおそらく非常に簡単ですが、私が望む結果を生み出す最もエレガントでシンプルな方法を理解することはできません。基本的には、テキストファイルがプログラムとして入力されます。このファイル内の文字列はすべて、改行(\r
)、改行(\n
)、またはその2つの組み合わせで区切られています。印刷されていない文字が変化するパターンマッチング文字列
は今、私の関数は、以下の
local function file_Parse(input)
local inputTbl = {}
if input then
for lines in input:gmatch("%g*%G*") do
lines = lines:gsub("\r\n", "")
table.insert(inputTbl, #inputTbl + 1, lines)
end
end
return inputTbl
end
ある今、これは非常に基本的です。受け取った入力は次のようになります。
DFEIJ-SDFA\r\nDAFK-DAFDAFEA\r\nDKLAJFDAKJFE-DFAKJ\r\n
たとえば、今私が望む文字列の間に\r\n
を置いたことに留意してください。しかし時には、私はキャリッジリターンとラインフィードが混在している場合があります。これは私の問題です。
これは私が上記で提供した機能で動作しますが、これにlines = lines:gsub("\r\n","")
を入力しなければならないのは本当に気になります。私はlines:gmatch("%g*%G*")
行内のforループの開始時にそれを世話することができ、印刷できない文字を自動的に捕捉できないと感じています。しかし、私の人生のために、\r
、\n
、または両方が\r\n
(または\n\r
)と一致するかどうかをチェックする最善の方法を見つけ出すことはできません。印刷可能な文字を掴んで印刷できない文字だけを忘れてしまいます。
私はさまざまな方法を試みようとしましたが、ほとんどの場合、私のforループにlines
をキャプチャしてテーブルに入力しないようです。
("(%g*%G*)[\r\n]")
("(%g*%G*)[\r*\n*]")
("(%g*%G*)[\r-\n-]")
("(%g*%G*)[\r?\n?]")
("(%g*%G*)[%c]")
("(%g*%G*)[%c-]")
("(%g*%G*)[%c+]")
私は両方http://lua-users.org/wiki/PatternsTutorialとhttp://www.lua.org/manual/5.2/manual.html#6.4.1リソースを読んだが、適切にすべての印刷可能文字といない非印字可能な文字をつかむために失敗しています。私が間違ってやっていることや、私が探しているアプローチへの答えを理解するのに役立つアドバイスをいただければ幸いです。
':gmatchを( "%gの+") –