2

いくつかのJavaコードファイルがあり、それぞれにパブリッククラスレベルの変数を追加する必要があります。非常に多くのファイルがあるので、同じことを行うためにpython2.2スクリプトを作成する必要があります。

package xx.xx.xx;

import java.util.Properties;

public class MyClass extends YourClass{

    public myMethod() throws MyException {

    }
}

期待される出力

package xx.xx.xx;

import java.util.Properties;

public class MyClass extends YourClass{

    public static final String CO_ID = "XXXXX" 

    public myMethod() throws MyMException {

    }
}

file.find('{')が{の最初の出現のインデックスを教えてくれることは知っていますが、残りのコードをプッシュダウンして、各ファイルにパブリックメンバーを挿入する必要があります。

4

2 に答える 2

5

Pythonには、このための便利なツールがあります。fileinputモジュール:

import fileinput
import sys
import re

newline = '''\
{l}
    public static final String CO_ID = "XXXXX"
'''

filename = '/path/to/file.java'
for line in fileinput.input([filename], inplace=True, backup='.bak'):
    if re.match(r'public class', line):
        sys.stdout.write(newline.format(l=line))
    else:
        sys.stdout.write(line)

  • inplace=True,ファイルを「インプレース」で変更します。実際には一時ファイルが作成され、元の場所に移動されます。
  • backup='.bak'fileinput.input元のファイルのバックアップを作成するように指示します。
  • sys.stdout.writeの代わりに使用されますがprintprint追加の新しい行は追加されsys.stdout.writeません。
于 2013-03-01T11:34:00.097 に答える
1

Ubuntuのコードは動作しますが、Python 2.2Python2.2互換コード用に変更しました

import fileinput
import sys
import re

newline = '''\
%s
    public static final String CO_ID = "XXXXX"
'''

filename = '/path/to/file.java'
for line in fileinput.input([filename], inplace=True, backup='.bak'):
    if re.match(r'public class', line):
        sys.stdout.write(newline%line)
    else:
        sys.stdout.write(line)
于 2013-03-01T16:56:41.163 に答える