2016-05-24 12 views
2

これはおそらく非常に簡単ですが、私が望む結果を生み出す最もエレガントでシンプルな方法を理解することはできません。基本的には、テキストファイルがプログラムとして入力されます。このファイル内の文字列はすべて、改行(\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/PatternsTutorialhttp://www.lua.org/manual/5.2/manual.html#6.4.1リソースを読んだが、適切にすべての印刷可能文字といない非印字可能な文字をつかむために失敗しています。私が間違ってやっていることや、私が探しているアプローチへの答えを理解するのに役立つアドバイスをいただければ幸いです。

+0

':gmatchを( "%gの+") –

答えて

2

EgorSkriptunoffがコメントで述べたように、%gを使用すると、スペースをキャプチャしないことに注意する必要があります。行に印刷可能な文字とスペース文字が混在している場合は、このようなものを使用する:

for lines in input:gmatch("[%g ]+") do 

これは、あなたが示す入力に次の3行を生成します。入力中の行のための

DFEIJ-SDFA 
DAFK-DAFDAFEA 
DKLAJFDAKJFE-DFAKJ 
+0

うわーdo'しました.. ..私はこれをボットしたのですか?ハハ。私はエゴールに助けの要点を与えてもらいましたが、明らかにできません。謝罪いたします。ご協力いただき、ありがとうございました。私はPaulの説明に感謝します。 – Pwrcdr87

関連する問題