2016-05-19 64 views
1

我的任務是編寫一些Java以從DB2表中讀取數據並將其寫入固定格式的文件中,並將其輸入到Cobol程序中。 的Cobol的佈局看起來像這樣用於生成Cobol佈局的StringTemplate

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領域是提供給我的字符串。使用Google文檔,我想出了這樣的事情

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; 
    } 

} 

,然後在主,我的代碼

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 

而像約翰·Q·史密斯的名稱會像現在這樣

John  Smith    Q 

謝謝!

回答

2

你可以做類似

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

有從Java語言編寫固定寬度的文件數量的軟件包(有搜索Sourceforge上的)。

有可以使用COBOL副本讀/寫文件甚至幾包:

這些軟件都矯枉過正這種情況,但如果抄本更復雜,這種情況很有用。


免責聲明我寫了JRecord。

+0

這看起來很簡單。所以你說的是沒有必要用StringTemplate搞清楚。 – ChuckLeviton

+0

沒有必要使用StringTempate –