Archive for the ‘程式設計’ Category

Java JSP 正規式取出中文字

5 六月, 2009

import java.util.regex.Matcher;import java.util.regex.Pattern;String str="o中文o";String pattern="";Pattern p=null;Matcher m = null;//中文字碼範圍pattern="[\u4e00-\u9fa5]";p=Pattern.compile(pattern);m=p.matcher(str);while(m.find()){	System.out.println(m.group());}

Java JSP 讀取UTF-8檔案

4 六月, 2009

以下程式不考慮UTF-8 BOM的問題
 

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;File fn=new File("utf8.txt");FileInputStream fis = new FileInputStream(fn);//指定utf-8編碼BufferedReader br = new BufferedReader( new InputStreamReader( fis,"utf-8" ) );String file_str_append="";String file_str="";while((file_str_append=br.readLine())!=null){  file_str+=file_str_append;}br.close();fis.close();//將utf-8所有檔案內容輸出System.out.println(file_str);

中央氣象局 RSS 解析正規式 Regex

1 五月, 2009

<%@page contentType="text/html; charset=utf-8" errorPage=""%>&#x10;<%@page import="java.util.regex.Pattern"%>&#x10;<%@page import="java.util.regex.Matcher"%>&#x10;<%&#x10;out.clear();&#x10;%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">&#x10;<html xmlns="http://www.w3.org/1999/xhtml">&#x10;<head>&#x10;<title>Parse Central Weather Demo</title>&#x10;<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />&#x10;</head>&#x10;<body>&#x10;<%&#x10;String str="";&#x10;String pattern="^([\\D]+)\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";&#x10;Pattern p=null;&#x10;Matcher m=null;&#x10;%>&#x10; 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)<br />&#x10;<%&#x10;str=" 台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)";&#x10;pattern="^[\\D]+\\d{2}/\\d{2}\\s([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%\\((\\d{2}/\\d{2})\\s(\\d{2}:\\d{2})[\\D]+\\)$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%><hr />明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% <br />&#x10;<%&#x10;str="明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0% ";&#x10;pattern="^([\\D]+)\\s([\\D]+)\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s[\\D]+:\\s*(\\d{1,3})%$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%><hr />05/02 溫度:22 ~ 28 晴時多雲&#x10;<%&#x10;str="05/02 溫度:22 ~ 28 晴時多雲";&#x10;pattern="^(\\d{2}/\\d{2})\\s[\\D]+:\\s*(\\d{1,3}\\s~\\s\\d{1,3})\\s([\\D]+)$";&#x10;p = Pattern.compile(pattern);&#x10;m = p.matcher(str.trim());&#x10;if(m.find()){&#x10;	for (int i = 1; i <= m.groupCount(); i++) {&#x10;      out.println("group(" + i + "):" + m.group(i)+"<br />");&#x10;    }&#x10;    m.reset();&#x10;}&#x10;%>&#x10;</body>&#x10;</html>

&#x10;

 

&#x10;

執行結結果:

&#x10;

台北市05/01 今晚至明晨 晴時多雲 溫度: 22 ~ 24 降雨機率: 0%(05/01 16:30發布)
&#x10;group(1):今晚至明晨
&#x10;group(2):晴時多雲
&#x10;group(3):22 ~ 24
&#x10;group(4):0
&#x10;group(5):05/01
&#x10;group(6):16:30

&#x10;


&#x10;

明日白天 晴時多雲 溫度: 24 ~ 28 降雨機率: 0%
&#x10;group(1):明日白天
&#x10;group(2):晴時多雲
&#x10;group(3):24 ~ 28
&#x10;group(4):0

&#x10;


&#x10;

05/02 溫度:22 ~ 28 晴時多雲&#x10;group(1):05/02
&#x10;group(2):22 ~ 28
&#x10;group(3):晴時多雲

&#x10;

 

&#x10;

 

&#x10;

 

&#x10;

備註:中央氣象局的RSS2.0並不是完全符合W3C的標準,且資料呈現不夠有條理,不易被解析

開發有中文內容的專案要考慮的事情

30 四月, 2009

跟一個美工人員說目前的專案要有中文,

&#x10;

美工會考慮有沒有適合的中文字型

&#x10;

 

&#x10;

跟一個程式人員說目前的專案要有中文,

&#x10;

程式人員會考慮會不會有中文衝碼

&#x10;

 

&#x10;

跟一個資料庫管理人員說目前的專案要有中文,

&#x10;

資料庫管理人員會考慮資料儲存是否要用Unicode儲存中文

&#x10;

 

&#x10;

跟一個企劃人員說目前的專案要有中文,

&#x10;

企劃人員會考慮內容是否能夠因為中文而引人注目

&#x10;

 

&#x10;

跟老闆說目前的專案要有中文,

&#x10;


老闆會考慮什麼時候開始專案會開始賺錢,有沒有中文都沒關係

Win32 PHP5 ODBC To Access Demo

27 四月, 2009

//設定ODBC來源,使用真實檔案路徑&#x10;$dblink_id = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\db.mdb","mdb id","mdb pw"  ) or die ("db error");&#x10;//sql式,選出id的欄位&#x10;$sql='SELECT id FROM ur_table';&#x10;&#x10;if ($dblink_id) {&#x10;  //執行sql&#x10;  $res=odbc_exec($dblink_id,$sql);&#x10;  if($res) {&#x10;    //初始陣列&#x10;    $arr=array();&#x10;    //odbc_fetch_row不會回傳陣列,所以必須自行轉置,並指定使用hash的方式推入陣列&#x10;    while($list=odbc_fetch_array($res,ODBC_ASSOC)){&#x10;      array_push($arr,$list);&#x10;    }&#x10;    for( $i=0;$i<count($arr);$i++){&#x10;      //從陣列中取值的方式$arr[陣列索引].[欄位名稱]&#x10;      echo 'id:'.$arr[$i]['id']."\n";&#x10;    }&#x10;  }&#x10;  else{&#x10;    echo 'odbe_exec error'."\n";&#x10;  }&#x10;}&#x10;else{&#x10;  echo 'db link error'."\n";&#x10;}&#x10;

JSP 強制下載檔案

10 四月, 2009

<%@page import="java.util.ArrayList"%>&#x10;<%@page import="java.io.OutputStream"%>&#x10;<%@page import="java.io.FileInputStream"%>&#x10;<%@page import="java.util.Date"%>&#x10;<%@page import="java.net.URLEncoder"%>&#x10;<%@page import="com.pcyi.walkone.DAO.Verify"%>&#x10;<%@page import="org.hibernate.Session"%>&#x10;<%&#x10;out.clear();&#x10;//要給clinet下載時顯示的名字&#x10;String fileName = "clinet.txt";&#x10;fileName=URLEncoder.encode(fileName, "utf-8");&#x10;response.setHeader("Content-Disposition","attachment; filename=" + fileName );&#x10;String f_path="server_file.txt";&#x10;FileInputStream fis = new FileInputStream( application.getRealPath(f_path));&#x10;OutputStream os=response.getOutputStream();&#x10;byte byteRead;&#x10;while(-1 != (byteRead = (byte)fis.read())) {&#x10;  //文字檔UNIX換行轉PC換行&#x10;  if(byteRead=='\n'){&#x10;    os.write('\r');&#x10;  }&#x10;  os.write(byteRead);&#x10;}&#x10;os.close();&#x10;if (fis != null) {&#x10;  response.setStatus(200);&#x10;  response.flushBuffer();&#x10;  fis.close();&#x10;}&#x10;%>&#x10;

Flash 讀取文字檔快取問題

13 二月, 2006
在 url 後面帶上一個隨機的變數:

Action Script:
loadVariablesNum("http://whatever_url/whatever.txt?rnd=random(10000), 0);

這樣就會被當成新的 Request,而不會取得 cache的舊資料!

ACCESS 找出所有1月1日至1月15日的資料

16 一月, 2006
假設birth是會員生日
members是會員資料表
字串1/1及1/15是指定日期,可以是日期型態可以是符合日期規範的字串型態

SELECT * FROM [members] WHERE CDBL(CDATE(MONTH([birth]) & "/" & DAY([birth]))) >= CDBL(CDATE(MONTH("1/1") & "/" & DAY("1/1"))) AND CDBL(CDATE(MONTH([birth]) & "/" & DAY([birth]))) <= CDBL(CDATE(MONTH("1/15") & "/" & DAY("1/15")));

隨機取得資料庫N筆資料

21 十月, 2005
ASP+ACCESS
MSSQL將RND改為NEWID
範例,隨機選出商品資料前三筆資料
<%
Randomize
sql="SELECT TOP 3 * FORM `商品資料` ORDER BY RND(-(`商品編號`+" & RND() & "))"
%>

ASP.NET用DataAdapter以及DataSet填滿DataGrid的流程概要

11 六月, 2005

ASP.NET用DataAdapter以及DataSet填滿DataGrid的流程概要

DataSet可以看做是近端的資料庫,可以擁有很多的資料表
DataAdapter可看做是將遠端的資料表轉換成進端資料表的工具
所以簡易的流程為

  1. 建立資料庫連結
  2. 執行SQL
  3. 利用DataAdapter將結果填入DataSet中
  4. 控制項資料繫結(DataBind)

‘以下為ASPX後置程式碼 (*.VB)

‘前置匯入詞
Imports System.Data.OleDb
Imports System
Imports System.Data
Imports Microsoft.VisualBasic.Strings

‘假設宣告
Protected WithEvents dg1 As System.Web.UI.WebControls.DataGrid
Protected WithEvents dg2 As System.Web.UI.WebControls.DataGrid
Dim objCon As OleDbConnection
Dim objDataAdapter As OleDbDataAdapter
Dim objCmd As OleDbCommand
Dim sql As String = ""
Dim id As Integer = 0
Dim Ds As DataSet = New DataSet()

‘開始連結資料
Try
  objCon.Open()
  objCmd = objCon.CreateCommand()
  objDataAdapter = New OleDbDataAdapter()
  sql = "SELECT * FROM anyTable1 WHERE anyTable1.id = @id;"
  objCmd.CommandText = sql
  objCmd.Parameters.Add(New OleDbParameter("@id", id))
  objDataAdapter.SelectCommand = objCmd
  ‘將資料庫傳回的資料記錄到Ds裡面名為tb1的資料表
  objDataAdapter.Fill(Ds,"tb1")

  sql = "SELECT * FROM anyTable2 WHERE anyTable2.id = @id;"
  ‘因為OleDbParameter @id已經設定過,故不需再次設定
  objCmd.CommandText = sql
  objDataAdapter.SelectCommand = objCmd
  ‘將資料庫傳回的資料記錄到Ds裡面名為tb2的資料表
  objDataAdapter.Fill(Ds,"tb2")
  dg1.DataBind()
  dg2.DataBind()

Catch ex As Exception
  Response.Write(ex.Message & "An exception of type " & ex.GetType().ToString)
Finally
  objCmd.Dispose()
  objCon.Close() 
End Try

‘以下為ASPX的部分內容(*.ASPX)

<asp:DataGrid ID="dg1" Runat="server"></asp:DataGrid>
<asp:DataGrid ID="dg2" Runat="server"></asp:DataGrid>