StringTemplate 生成 Cobol 布局

StringTemplate to generate Cobol layout

我的任务是编写一些 Java 以从 DB2 table 读取数据并以固定格式写入文件,该格式可以输入到 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

谢谢!

你可以这样做

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

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

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

在这种情况下,这些包有点过分了,但如果字帖更复杂,这些包就很有用了。


免责声明我写了 JRecord。