集算器協助java處理結構化文本之對齊串連,java結構化

來源:互聯網
上載者:User

集算器協助java處理結構化文本之對齊串連,java結構化

  資料庫有關聯語句,可以方便地進行對齊串連運算,但有時資料是儲存在文字檔中的,用JAVA直接計算需要寫大量迴圈語句才能實現,代碼繁瑣且運行低效。使用集算器來輔助Java編程,可以方便高效地解決此類問題。下面我們通過例子來看一下具體作法。

  文字檔emp.txt儲存著員工資訊,EId等於1的員工不在該檔案中。文字檔sOrder.txt儲存著訂單資訊,其SellerId欄位和emp中的EId欄位相對應,SellerId等於2的訂單不在該表中。部分來源資料如下:

  emp.txt

sOrder.txt

現在需要將emp的Name、Dept、Gender這三個欄位對齊到sOrder中,計算結果輸出到新檔案中。期望的計算結果如下:

集算器代碼:

A1格和A2格分別從文字檔中讀取資料,並存入兩個變數emp和sOrder。這裡使用了函數import,其預設的列分割符是tab,函數選項@t表示將第一行讀為欄位名。由於例子中只需要emp.txt中的部分欄位,因此A1需要以欄位名做參數。計算完成後,emp和sOrder的值如:

A3:=join@1(sOrder:s,SellerId;emp:e,EId)。函數join執行串連運算,並將兩個表改名為s和e。其中函數選項@1表示左串連,即例子中的要求:將emp對齊到sOrder中。計算後結果如下:

點擊藍色連結可以看到具體的記錄,如下:

右串連只是交換對齊的位置,同樣可以用集算器來實現。比如將sOrder按照emp對齊,只需要在代碼中交換兩者的順序,即=join@1(emp:e,EId;sOrder:s,SellerId),計算結果如下:

全串連也很容易實現,只需要使用函數選項@f,代碼是:join@f(sOrder:s,SellerId;emp:e,EId),計算結果如下:

串連運算共有四種,除了上面提到的左串連、右串連、全串連,還有內串連。函數join預設執行內串連,代碼是=join(sOrder:s,SellerId;emp:e,EId),計算結果如下:

回到例子中,A4:=A3.new(s.OrderID, s.Client, s.SellerId, s.Amount, s.OrderDate, e.Name, e.Dept, e.Gender)。這句代碼從串連的表中取得需要的欄位,組成新的結構化二維表格,計算結果如下:

對齊的工作已經完成,下面將資料輸出到新的檔案,代碼為:=file(“E: \\result.txt”).export@t(A4)。

函數export預設使用tab作為列分割符,函數選項@t表示將欄位名輸出在第一行。開啟result.txt,可以看到內容如下:

上述指令碼已經完成了所有的對其輸出工作,接下來只需在JAVA代碼中調用即可。

    //建立esProc jdbc串連
     Class.forName(“com.esproc.jdbc.InternalDriver”);
     con= DriverManager.getConnection(“jdbc:esproc:local://”);
     //調用esProc,其中test是指令檔名
     st =(com.esproc.jdbc.InternalCStatement)con.prepareCall(“call test()”);
     //執行esProc預存程序
     st.execute();

只要執行上述JAVA代碼,emp就會對齊到sOrder中,並將計算結果輸出到result.txt檔案。

下面將例子稍作改動:按動態時間段查詢sOrder中的資料,並執行同樣的對齊操作,最後直接將結果返回JAVA。為了實現這個例子,集算器需要定義兩個參數,分別是begin和end,代表起止時間。集算器代碼如下:

紅色部分為改動的代碼。

  A2:通過函數select對sOrder進一步過濾,過濾條件為JAVA傳來的起止時間,即@begin和@end。

  A5:將A4中的計算結果輸出到JDBC介面。

  JAVA代碼也需要進行相應的改動,以便傳入參數,並擷取計算結果。代碼如下:

    Class.forName(“com.esproc.jdbc.InternalDriver”);
     con= DriverManager.getConnection(“jdbc:esproc:local://”);
     st =(com.esproc.jdbc.InternalCStatement)con.prepareCall(“call test(?,?)”);
    st.setObject(1,startTime);
     st.setObject(2,endTime);
    st.execute();
    ResultSet set = st.getResultSet();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.