【问题标题】:StringTemplate to generate Cobol layoutStringTemplate 生成 Cobol 布局
【发布时间】:2016-05-19 13:43:12
【问题描述】:

我的任务是编写一些 Java 来从 DB2 表中读取数据并以可以输入到 Cobol 程序的固定格式写入文件。 Cobol 布局是这样的

01 PERSON
   10 FIRST-NAME PIC X(10)   (i.e 10 bytes fixed width)
   10 LAST-NAME  PIC X(20)   (i.e 20 bytes fixed width)
   10 MIDDLE-INITIAL PIC X(1)

在 Java 中,这些字段以字符串的形式提供给我。使用文档我想出了这样的东西

class Person {
    private String firstName;
    private String lastName;
    private String middleInitial;

    Person(String inFirstName, String inLastName, String inMiddleInitial){
        this.firstName = inFirstName;
        this.lastName = inLastName;
        this.middleInitial = inMiddleInitial;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getMiddleInitial() {
        return middleInitial;
    }

}

然后在 main 中,我有这些代码行

    st = new ST("$p.firstName$ $p.lastName$ $p.middleInitial$", '$', '$');
    st.add("p", new Person("Ethelred", "TheUnready", "X"));
    System.out.println(st.render());

执行会产生这个结果

Ethelred TheUnready X

我应该怎么做才能确保输出看起来像这样

Ethelred  TheUnready         X

虽然像 John Q Smith 这样的名字会喜欢这样

John      Smith              Q

谢谢!

【问题讨论】:

    标签: cobol stringtemplate


    【解决方案1】:

    你可以这样做

    spaces = "                                                         "
    outLine =   (firstName + spaces).substring(0,10)
              + (lastName + spaces).substring(0,20) 
              +  middleInitial;
    

    有许多用于从 java 编写固定宽度文件的包(搜索 Sourceforge)。

    甚至有一些包可以使用 Cobol Copybook 来读/写文件:

    在这种情况下,这些包是多余的,但如果字帖更复杂,这些包很有用。


    免责声明我写了 JRecord。

    【讨论】:

    • 这看起来很简单。所以你说没有必要乱搞 StringTemplate。
    • 不需要使用StringTempate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多