2017-11-29 12 views
1

私は、追加する必要がある非常に長いコードを持っています。エラーを導入する恐れがあるので、自分で書くのではなくスクリプトを使って行います。Juliaの先行する空白をキャプチャする

は私がジュリアのを使用しています

rename oldname newname 
     note newname: "A Note" 

     rename oldname2 newname2 
      note newname2: "A Note" 

コマンド私は、コマンドを見るたびに、私は「ノート」を追加したい「名前の変更」にしたい、この

rename oldname newname 

     rename oldname2 newname2 

のように見えるのコマンドを持っていますこれを行うための読み書き機能があり、これまでのところ非常に簡単でした。

f = open("renaming.txt") # open input file 
g = open("renaming_output.txt", "w") # open output file 

for ln in eachline(f) 
    write(g, "$ln \n") # write the command, no matter what it is 
    stripped = lstrip("$ln") # Strip whitespace so I can use "startswith" command 
    if startswith(stripped, "ren") 
      words = split("$ln", " ") # split on space to get the "newvar" name 
      println("$ln \n") #check that I am working with a rename command 
       println("note ", words[3]":") # check that the note function prints 
       note_command = string("note ", words[3], ": \n") # construct the note command 
       write(g, note_command) #write it to the output file. 
     end 
end 

私の問題は字下げです。上のコードは、インデントなしで一番左に "note"コマンドを書いています。しかし、理想的には、noteコマンドをrenameコマンドより1レベル下に字下げしたいと思います。しかし、私はすべての前に空白をキャプチャする方法を把握することはできません。

回答にはmatchm.matchの機能を使用することを前提にしていますが、動作させることはできません。

ご協力いただければ幸いです。

ジュリア0.7で

答えて

1

あなたのコード内の最も簡単な変更はあなたがあなたのコードの開始と時rx = r"(?:(?!r).)*"を書くことができ

println("note ", words[3]":") 

println(first(ls, search(ls, 'r')-1), " note ", words[3]":") 

正規表現を使用して置き換えることであろう。

println(match(rx, ls).match, " note ", words[3]":") 

どちらの場合も、私たちはlsから'r'までは元の形式です。ジュリア6.1

+0

ありがとうございました!これは助けになりました。私は6.1を使っていますが、search()は配列の最初の出現を返しません。おそらくそれは0.7でですか?私は更新する意味があります。 – genauguy

1

leftpad =^search("$ln", 'r')が鍵加算された状態で

if startswith(stripped, "ren") & !startswith(stripped, "renvars") 
      leftpad = " "^search("$ln", 'r') 
      words = split(stripped, " ") 
      varname = string(leftpad, " note ", words[3], ": ", words[2], " \n") 
      print(varname) 
      write(g, varname) 
    end 

を次のように、私の解決策は、ヘルプ答えを、です。私のコードの左パディングが常にタブであることを考えると、最初のrの前に文字があるので、タブの数を挿入するだけです。この解決策は0.6.1で動作しますが、検索は.7で異なる動作をする可能性があります。

+0

私の解決方法では、 'lstrip'、つまり ''、\ t、\ n、\ v、\ f、および\ rによって削除されたすべての空白を正しく処理しています。もちろん、 "ren"の前にタブしかないことが分かっていればOKです。 –

関連する問題