0

.propertiesANT ビルドを使用して、ファイルをテキスト ファイル (コード)に変換したいと考えています。

入力ファイルmy.properties:

FOO=foo bar
BAR=bar bar foo

希望する出力ファイルConstants.as:

package foo.bar {
    public final class Constants {
        public static const FOO:String = "FOO";
        public static const BAR:String = "BAR";
    }
}

注: ActionScript は Java のようなプロパティ ファイルを使用できないため、この変換をビルド前のタスクとして使用する必要があります。私のプロパティ ファイルはローカリゼーションであり、キーを定数として使用したいと考えています。

4

2 に答える 2

1

concatタスクにフィルターチェーンを含めることで、これを行うことができます。

        <concat destfile="Constants.as">

            <header filtering="false">
package foo.bar {
    public final class Constants {
</header>
            <footer filtering="false">
    }
}
</footer>

            <fileset file="my.properties"/>
            <filterchain>
                <tokenfilter>
                    <ignoreblank/>
                    <trim/>
                    <replaceregex pattern="(.*)=(.*)" replace="        public static const \1:String = &#34;\2&#34;;"/>
                </tokenfilter>
            </filterchain>

        </concat>
于 2012-06-07T08:41:27.403 に答える
0

JavaScriptでハックすることscriptdefができました。

それをより良くする方法はありますか?

<scriptdef name="localization-regen" language="javascript">
    <attribute name="input.file.path"/>
    <attribute name="output.file.category"/>
    <attribute name="output.file.package"/>
    <attribute name="output.file.dir"/>
    <attribute name="output.property"/>
    <![CDATA[

        importPackage(java.io);

        inputFilePath = attributes.get("input.file.path");
        outputFileCategory = attributes.get("output.file.category");
        outputFilePackage = attributes.get("output.file.package");
        outputFileDir = attributes.get("output.file.dir");

        outputFileClass = "LocalizationKeys" + outputFileCategory.substring(0, 1).toUpperCase() + outputFileCategory.substring(1, outputFileCategory.length());


        inputFile = new File(inputFilePath);

        inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));

        outputLines = "";

        for(line = inputStream.readLine(); line != null; line = inputStream.readLine())
        {
            vars = line.split("=");
            c = vars[0];
            if(c.substring(0, 1) == "#") continue;
            outputLines += "\t\tpublic static const " + c + ":String = \"" + c + "\";\n";
        }

        output = "";
        output  = "package " + outputFilePackage + "\n"
                + "{\n"
                + "\tpublic final class " + outputFileClass + "\n"
                + "\t{\n"
                + outputLines
                + "\t}\n"
                + "}";


        outputFilePath = outputFileDir + "/" + outputFileClass+ ".as";

        out = new BufferedWriter(new FileWriter(outputFilePath));
        out.write(output, 0, output.length);
        out.flush();
        out.close();
    ]]>
</scriptdef>
于 2012-06-06T15:53:02.980 に答える