PHP字串長度找子字串與取代字串的常用函數

PHP在字串的操作上,有非常多的相關函數可以使用,我們在這裡只介紹經常會使用到的字串操作函數。像是如何取得字串的長度、在某一個字裏面尋找子字串首次出現的位置、以及字串的取代函數...等等。這些都是在編寫程式的時候,頻繁被程式設計師使用到的基礎函數。 取得字串長度 <?...

2012年6月19日 星期二

運用Java Excel API將excel檔轉為csv檔範例

如何使用Java Excel API來實現將excel檔案自動轉換為csv檔案格式,若沒有JExcel Library可以到http://sourceforge.net/projects/jexcelapi/files/網站上下載.

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Locale;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;

public class CSVConverter {

  /**
   @param args
   */
  public static void main(String[] args) {
    try {
      OutputStream os = new FileOutputStream(new File("C:\\input.csv"));      
      OutputStreamWriter osw = new OutputStreamWriter(os, "UTF8");
      BufferedWriter bw = new BufferedWriter(osw);

      // 載入Excel文件      
      WorkbookSettings ws = new WorkbookSettings();
      ws.setLocale(new Locale("en""EN"));
      Workbook wk = Workbook.getWorkbook(new File("C:\\input.xls"), ws);

      // 從工作簿(workbook)取得每頁(sheets) 
      for (int sheet = 0; sheet < wk.getNumberOfSheets(); sheet++) {
        Sheet s = wk.getSheet(sheet);

        bw.write(s.getName());
        bw.newLine();

        Cell[] row = null;

        // 從每頁(sheet)取得每個區塊(Cell)
        for (int i = 0; i < s.getRows(); i++) {
          row = s.getRow(i);

          if (row.length > 0) {
            bw.write(row[0].getContents());
            for (int j = 1; j < row.length; j++) {
              bw.write(',');
              bw.write(row[j].getContents());
            }
          }
          bw.newLine();
        }
      }
      bw.flush();
      bw.close();
    
    catch (Exception e) {
      System.err.println(e.toString());
      e.printStackTrace();      
    }
  }

}

2012年6月2日 星期六

運用Eclipse3.7.2撰寫簡單的視窗程式

        如果還沒有使用過Eclipse IDE的使用者們,必需要先上Eclipsen官網http://www.eclipse.org/downloads/下載Eclipse Classic 3.7.2版本的IDE (Windows 32 Bit)。

       再進入[Taiwan] Computer Center, Shu-Te University (http)連結,下載IDE的來源壓縮檔eclipse-SDK-3.7.2-win32.zip。
Eclipse Classic 3.7.2版本的IDE下載連結圖

        使用WinRAR應用軟體解開eclipse-SDK-3.7.2-win32.zip壓縮檔 
(WinRAR下載來源:http://www.softking.com.tw/soft/clickcount.asp?fid3=12899)

        請到C:\eclipse-SDK-3.7.2-win32\eclipse (剛才eclipse解壓縮輸出的目錄) 路徑,根據下圖移動滑鼠至elipse.exe小圖示,雙擊滑鼠左鍵兩下。

      會出現eclipse INDIGO版本的圖示視窗,並且按下OK鈕使用預設Workspace的目錄路徑,用以存放Java相關的專案。

當進入eclipse IDE的主畫面時, 找到File -> Java Project創建一個全新的專案。


輸入專案名稱SwingTest後,按Next鈕到下一步。

      把滑鼠移至SwingTest -> src小圖示底下,單擊滑鼠右鍵找到New -> Class
來建立新的Java類別。

   請在Package欄位輸入test,再到Name欄位輸入類別名稱TestSwing,最後記要把public static void main(String[] args)項目打勾,讓TestSwing這支應用程式擁有程式進入點,可以直接在JVM底下被執行。


第一支Java視窗程式的類別代碼如下:

package test;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestSwing extends JFrame {
TestSwing() {
JLabel jlbHelloWorld = new JLabel("Hello World");
add(jlbHelloWorld);
this.setSize(250, 150);
setVisible(true);
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new TestSwing();
}
}

      最後在程式撰寫完畢已後,移動滑動到圖示點擊執行TestSwing程式,稍後會彈出Hello World的圖形介面視窗。
第一支簡單的視窗程式Hello World




Java JDK7環境配置


1.  首先到Oracle官方網站 http://www.oracle.com/index.html下載JDK7來源,實際上的操作畫面與
     步驟如下所示:

步驟一:將滑鼠移動到Oracle Technology Network圖示,選取JAVA連結


進入Oracle Technology Network圖示,選取JAVA連結

    步驟二:選擇Java SE (includes JavaFX) | Early Access超連結
    選擇Java SE (includes JavaFX) | Early Access超連結


    步驟三:選擇Java SE Downloads -> Java Platform (JDK) 7u4圖示
    Java Platform (JDK) 7u4下載連結圖

    步驟四:選取Accept License Agreement項目,稍後畫面會出現Thank you for accepting the Oracle Binary Code License Agreement for Java SE; you may now download this software.的英文訊息,也就表示我們接受了JDK7的授權同意書,因此Oracle同意我們下載JDK7的軟體來使用,然而在教學中我們以windows x86(32bit)的作業系統為示例,因此請將滑鼠移動到jdk-7u4-windows-i586.exe超連結下載    
    下載jdk-7u4-windows-i586.exe圖示

    步驟五:請在已載下完畢jdk-7u4-windows-i586.exe的檔案小圖示上點擊兩下,接著畫面會出現歡迎安裝SE Development Kit 7 Update 4的視窗,按Next按鈕。

    步驟六:下面的畫面中(預設不改變安裝路經),按Next按鈕到下一個動作。

    步驟七:選擇安裝jre7(Java SE Runtime Environment 7)的檔案路徑,按Next到下一動作。

    步驟八:當畫面出現Java SE Development Kit 7 Update 4 Successfully Installed訊息時,恭喜您已經完成的JDK7的安裝作業。




    2.  再來,進行Java的環境變數設定作業:
步驟一:請在我的電腦 圖示按滑鼠右鍵,選擇內容項目

    步驟二:進階系統設定 -> 環境變數

    步驟三:請在系統變數的區域按下新增按鈕,加入JAVA_HOME的變數,並且記得找到原有Path數變,增加%JAVA_HOME%\bin的代碼。


    3.  最後,利用Notepad寫一支簡單的HelloWorld的Java程式來測試一下JVM的環境配置是否正常:

    步驟一:打開Notepad建立你的第一支HelloWorld的程式,然後把它儲存到C槽


    步驟二:於開始列 -> 搜尋程式及檔案,輸入cmd的關鍵字按下Enter鍵,系統彈出命令列視窗(Command Line Window)

    步驟三:於命令列 輸入cd \按Enter鍵,將游標移至c槽根目錄 

    步驟四:輸入javac HelloWorld.java指令,編譯java程式

    步驟五:輸入java HelloWorld指令,執行java程式 


    再經過了下載JDK7來源、撰寫第一支HelloWorld的程式、到使用命令列編譯與執行成功HelloWorld程式的一連串過程,我們終於邁出了Java程式開發的一小歩!!



2012年5月31日 星期四

建立一個客製Liferay Portlet

事前準備工作:
1.      Import liferay portal的開發環境到My Eclipse IDE
歩驟:File->Import, Existing projects into Workspace, 指向D:\liferay

2.      把相關會使用到的jar檔,待新的Struts portlet專案建立後逐一included
ext/modules portal-impl.jar
ext/lib/global portal-kernel.jar
ext/lib/global portal-service.jar
ext/lib/global portlet.jar
ext/lib/global portlet-container.jar


客制Struts Portlet開發:

首先My Eclipse IDE開啟一個”QueryDataPortlet”Web Project,而後更改web root folderdocroot


接著將游標移至QueryDataPortlet專案點擊滑鼠右鍵,於MyEclipse->Add Struts Capablilities設定Struts組態環境。(記得要取消Install Struts TLDs的選項)

(*記得把Base package for new classesyourcompany改成XXXcompany)

整理目錄結構,將QueryDataPortlet/src目錄移動到docroot/WEB-INF,如下圖所示:


並且於QueryDataPortlet/docroot中增加cssjshtml三個目錄,Copy js/test.jscss/test.cssicon.pngQueryDataPortlet/docrootjscss等對映目錄。
(icon.png)


滑鼠右擊QueryDataPortlet專案,選取Properties->Source項目,按Add Folder重新設定新的Source folderQueryDataPortlet/docroot/WEB-INF/src,並移除mssing path



docroot/WEB-INF內建立liferay的四大設定檔:

liferay-display.xml

<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 5.2.0//EN" "http://www.liferay.com/dtd/liferay-display_5_2_0.dtd">

<display>
    <category name="category.sample">
        <portlet id="queryData" />
    </category>
</display>

liferay-portlet.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 5.2.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_5_2_0.dtd">

<liferay-portlet-app>
    <portlet>
        <portlet-name>queryData</portlet-name>
        <icon>/icon.png</icon>
        <struts-path>query_data</struts-path>
        <use-default-template>true</use-default-template>
        <restore-current-view>true</restore-current-view>
        <instanceable>true</instanceable>
        <private-request-attributes>false</private-request-attributes>
        <header-portlet-css>/css/test.css</header-portlet-css>
        <footer-portlet-javascript>/js/test.js</footer-portlet-javascript>
    </portlet>  
    <role-mapper>
        <role-name>administrator</role-name>
        <role-link>Administrator</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>guest</role-name>
        <role-link>Guest</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>power-user</role-name>
        <role-link>Power User</role-link>
    </role-mapper>
    <role-mapper>
        <role-name>user</role-name>
        <role-link>User</role-link>
    </role-mapper>
</liferay-portlet-app>


portlet.xml

<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd">
    <portlet>
        <portlet-name>queryData</portlet-name>
        <display-name>Query data portlet</display-name>
        <portlet-class>com.liferay.sampleStruts.SampleStrutsPortlet</portlet-class>
        <init-param>
            <name>view-action</name>
            <value>/query_data/view</value>
        </init-param>
        <expiration-cache>0</expiration-cache>
        <supports>
            <mime-type>text/html</mime-type>
        </supports>
        <portlet-info>
            <title>Query data from DB.</title>
            <short-title>qry_2</short-title>
            <keywords>qry_3</keywords>
        </portlet-info>
        <security-role-ref>
            <role-name>administrator</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>guest</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>power-user</role-name>
        </security-role-ref>
        <security-role-ref>
            <role-name>user</role-name>
        </security-role-ref>
    </portlet>
</portlet-app>


liferay-plugin-package.properties

name=queryData
module-group-id=liferay
module-incremental-version=1
tags=sample
short-description=This plugin shows how to use Liferay's Struts Bridge.
change-log=
page-url=http://www.liferay.com
author=Liferay, Inc.
licenses=MIT
   
portal-dependency-jars=    

portal.dependency.tlds=struts-tiles.tld  


docroot/WEB-INF內建立Strutsstruts-config.xmltiles-defs.xml檔案:


struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
    <action-mappings>
        <action path="/query_data/view" forward="portlet.query_data.view" />
    </action-mappings>
    <message-resources parameter="com.coretronic.struts.ApplicationResources" />
    <plug-in className="org.apache.struts.tiles.TilesPlugin">
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
        <set-property property="moduleAware" value="true" />
        <set-property property="definitions-parser-validate" value="true" />
    </plug-in>
</struts-config>


tiles-defs.xml

<?xml version="1.0"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
                                  
<tiles-definitions>     
   
    <definition name="portlet.query_data.view" path="/portlet/query_data/view.jsp" />    
   
</tiles-definitions>


docroot/WEB-INF內修改web.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>   
    <servlet>
        <servlet-name>PortletActionServlet</servlet-name>
        <servlet-class>com.liferay.portal.struts.PortletActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>PortletActionServlet</servlet-name>
        <url-pattern>/portlet_action/*</url-pattern>
    </servlet-mapping> 
    <taglib>
        <taglib-uri>http://struts.apache.org/tags-tiles</taglib-uri>
        <taglib-location>/WEB-INF/tld/struts-tiles.tld</taglib-location>
    </taglib>  
</web-app>


docroot/ META-INF內建立context.xml

context.xml

<Context>
    <Loader loaderClass="com.liferay.support.tomcat.loader.PortalClassLoader"/>
    <Resource name="jdbc/Eptest" auth="Container"
        type="javax.sql.DataSource"
        driverClassName="oracle.jdbc.driver.OracleDriver"
        url="jdbc:oracle:thin:@192.168.1.182:1521:eptest" username="ehr"
        password="ehr" maxActive="20" />
</Context>


docroot/WEB-INF內建立src/com/liferay/sampleStruts目錄與SampleStrutsPortlet.java

SampleStrutsPortlet.java

package com.liferay.sampleStruts;

import com.liferay.portlet.StrutsPortlet;

import java.io.IOException;

import javax.portlet.PortletException;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

/**
 * <a href="JSPPortlet.java.html"><b><i>View Source</i></b></a>
 *
 * @author Brian Wing Shun Chan
 *
 */
public class SampleStrutsPortlet extends StrutsPortlet {

        public void doView(RenderRequest req, RenderResponse res)
        throws IOException, PortletException {
               
        super.doView(req, res);
}

}




docroot/html內建立portlet/query_data目錄與init.jspview.jsp

Init.jsp

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

<%@ page import="com.liferay.portal.kernel.dao.search.*" %>
<%@ page import="com.liferay.portal.kernel.util.CalendarFactoryUtil" %>
<%@ page import="com.liferay.portal.kernel.util.Constants" %>
<%@ page import="com.liferay.portal.kernel.util.ContentTypes" %>
<%@ page import="com.liferay.portal.kernel.util.DateFormats" %>
<%@ page import="com.liferay.portal.kernel.util.GetterUtil" %>
<%@ page import="com.liferay.portal.kernel.util.HtmlUtil" %>
<%@ page import="com.liferay.portal.kernel.util.ListUtil" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portal.kernel.util.StringPool" %>
<%@ page import="com.liferay.portal.kernel.util.StringUtil" %>
<%@ page import="com.liferay.portal.kernel.util.Validator" %>
<%@ page import="com.liferay.portal.kernel.util.WebKeys" %>
<%@ page import="com.liferay.portal.util.PortalUtil" %>
<%@ page import="javax.portlet.PortletRequest" %>
<%@ page import="javax.portlet.PortletSession" %>
<%@ page import="javax.portlet.PortletMode" %>
<%@ page import="javax.portlet.PortletURL" %>
<%@ page import="javax.portlet.WindowState" %>

<%@ page import="java.util.*" %>
<%@ page import="com.xxxcompany.struts.*" %>
<%@ page import="com.xxxcompany.util.*" %>

<portlet:defineObjects />
view.jsp

<%@ include file="init.jsp" %>
          
<%
           
            PortletURL portletURL = renderResponse.createRenderURL();
            portletURL.setWindowState(WindowState.NORMAL);
            portletURL.setParameter("view_action", "/query_data/view");          
           
            List<String> headerNames = new ArrayList<String>();
            headerNames.add("RC_ID");
            headerNames.add("RC_NAME");
            headerNames.add("REGION");
            headerNames.add("PARENT_RC_ID");
            headerNames.add(StringPool.BLANK);     
           
            List tValues = TestDB.getData();

            SearchContainer searchContainer = new SearchContainer(renderRequest, null, null, "cur1", SearchContainer.DEFAULT_DELTA, portletURL, headerNames, "there are no records.");
           
            List results = ListUtil.subList(tValues, searchContainer.getStart(), searchContainer.getEnd());
           
            int total = tValues.size();        
           
            searchContainer.setTotal(total);           

            searchContainer.setResults(results);

            List resultRows = searchContainer.getResultRows();

            for (int i = 0; i < results.size(); i++) {
                TestBean testBean = (TestBean)results.get(i);              

                ResultRow row = new ResultRow(testBean, testBean.getA(), i);
               
                row.addText(testBean.getA());
                               
                   row.addText(testBean.getB());
               
                row.addText(testBean.getC());
               
                row.addText(testBean.getD());
               
                row.addText(StringPool.BLANK);             

                // Add result row

                resultRows.add(row);               
            }      
            %>

            <liferay-ui:search-iterator paginate="false" searchContainer="<%= searchContainer %>" />
           
            <liferay-ui:search-paginator searchContainer="<%= searchContainer %>" />  
           


docroot/WEB-INF內建立src/com/coretronic/struts/TestBean.javasrc/com/coretronic/util/TestDB.java







TestBean.java

package com.coretronic.struts;

public class TestBean {
    private String a;
    private String b;
    private String c;
    private String d;
   
    public TestBean(){
       
    }
   
    public TestBean(String s1,String s2,String s3,String s4){
        this.a = s1;
        this.b = s2;
        this.c = s3;
        this.d = s4;
    }
   
    public String getA() {
        return a;
    }
    public void setA(String a) {
        this.a = a;
    }
    public String getB() {
        return b;
    }
    public void setB(String b) {
        this.b = b;
    }
    public String getC() {
        return c;
    }
    public void setC(String c) {
        this.c = c;
    }
    public String getD() {
        return d;
    }
    public void setD(String d) {
        this.d = d;
    }

}


TestDB.java

package com.coretronic.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.coretronic.struts.TestBean;

public class TestDB {      
               
        public static List getData(){
                DBConnection conTool = null;
                Connection con = null;
                PreparedStatement ps = null;
                ResultSet rs = null;
                List list = new ArrayList();
                try{
                        conTool = new DBConnection();
                        con = conTool.getDB("java:comp/env/jdbc/Eptest");
                        ps = con.prepareStatement("select * from tbl_gris_rc");
                        rs = ps.executeQuery();
                        while(rs.next()){                             
                                TestBean tb = new TestBean();
                                tb.setA(rs.getBigDecimal("RC_ID").toString());
                                tb.setB(rs.getString("RC_NAME"));
                                tb.setC(rs.getString("REGION"));
                                tb.setD(rs.getBigDecimal("PARENT_RC_ID").toString());
                                list.add(tb);     
                                System.out.println(rs.getString("RC_NAME"));
                        }                      
                       
                }catch(Exception ex){
                        ex.printStackTrace();
                        System.out.println("Exception for TestDB: "+ex.getMessage());
                }finally{
                        try{
                                if(rs != null) rs.close();
                                if(ps != null) ps.close();
                                if(conTool != null) conTool.closeConnection();
                        }catch(Exception exSql){                        
                        }
                }
                return list;
        }

}


使用Ant生成新專案的build.xml.war檔:
1.      滑鼠右擊QueryDataPortlet專案,選擇Export->Ant Buildfiles項目,於QueryDataPortlet的核取方格上打勾

2.      修改剛才產生的build.xml,加入紅標字體的區塊於檔案中

<target depends="init" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="docroot/WEB-INF/classes" source="${source}" target="${target}">
            <src path="docroot/WEB-INF/src"/>
            <classpath refid="QueryDataPortlet.classpath"/>
        </javac>
       <jar destfile="${ant.project.name}.war">
                                      <zipfileset dir="docroot/">      
                                                 <include name="**/*.*" />      
                                                 <exclude name="**/*.war" />   
                                      </zipfileset>
                            </jar>
    </target>

3.      滑鼠右擊上述build.xml,選擇Run As->Ant Build,接著產生QueryDataPortlet.war



Deploy QueryDataPortlet專案,打開 IE8.0輸入http://localhost:8080開啟liferay portal,以Bruno (Admin)管理者帳號登入,選擇Add Application->Sample->”Query Data from DB.” ->add項目,將它附加到liferay portal
Liferay客製Portlet部署成功畫面