You can use isNothing() function in VB.net to check if the object is NULL or not
Example:
If IsNothing(yourObject) Then
// Do this
else
//do this
end if
2011年9月13日 星期二
2010年9月14日 星期二
VB.NET讀取EXCEL CSV檔案
以下function可以讀取EXCEL的CSV檔案格式
使用方式在每讀一行時執行此function即可得到每個欄位資料
Public Function ParseCSV(ByVal text As String) As String()
Dim pattern As String = ",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))"
Dim r As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(pattern)
Dim fieldValues As String() = r.Split(text)
Dim i As Integer
For i = 0 To fieldValues.Length - 1
fieldValues(i) = fieldValues(i).Replace("""", "")
fieldValues(i) = fieldValues(i).Replace(",", "")
Next
Return fieldValues
End Function
使用方式在每讀一行時執行此function即可得到每個欄位資料
Public Function ParseCSV(ByVal text As String) As String()
Dim pattern As String = ",(?=(?:[^""]*""[^""]*"")*(?![^""]*""))"
Dim r As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(pattern)
Dim fieldValues As String() = r.Split(text)
Dim i As Integer
For i = 0 To fieldValues.Length - 1
fieldValues(i) = fieldValues(i).Replace("""", "")
fieldValues(i) = fieldValues(i).Replace(",", "")
Next
Return fieldValues
End Function
2009年11月13日 星期五
逐行讀取做判斷
讀取的資料為cvs檔,內有多行資料
想一次讀取一行做判斷
如果不包含指定的字串刪除該行資料
如果包含指定字串則刪除該字串但保留該行其他資料
想請教語法該如何寫才能做到逐行判斷
以下為程式碼
Dim filename As String
Dim sr As StreamReader
Dim sw As StreamWriter
Dim line As String
Dim num As New Integer
Dim newfile As String
Dim newline As String
filename = Console.ReadLine
sr = New StreamReader(filename)
newfile = filename.Replace(".txt", ".cvs")
sw = New StreamWriter(newfile)
Do
line = sr.ReadLine()
num = line.IndexOf("(N)")
If num > -1 Then
newline = line.Remove(num, 3)
sw.WriteLine(newline)
Else
End If
Loop Until line Is Nothing
sr.Close()
sw.Close()
在 num = line.IndexOf("(N)")這一行出現
"並未將物件參考設定為物件的執行個體"
num這變數已經用new宣告了
line讀進來的值為null時迴圈也應該停止了才對
解答:
While sr.Peek > -1
先檢查是不是讀到尾了再去做readLine
想一次讀取一行做判斷
如果不包含指定的字串刪除該行資料
如果包含指定字串則刪除該字串但保留該行其他資料
想請教語法該如何寫才能做到逐行判斷
以下為程式碼
Dim filename As String
Dim sr As StreamReader
Dim sw As StreamWriter
Dim line As String
Dim num As New Integer
Dim newfile As String
Dim newline As String
filename = Console.ReadLine
sr = New StreamReader(filename)
newfile = filename.Replace(".txt", ".cvs")
sw = New StreamWriter(newfile)
Do
line = sr.ReadLine()
num = line.IndexOf("(N)")
If num > -1 Then
newline = line.Remove(num, 3)
sw.WriteLine(newline)
Else
End If
Loop Until line Is Nothing
sr.Close()
sw.Close()
在 num = line.IndexOf("(N)")這一行出現
"並未將物件參考設定為物件的執行個體"
num這變數已經用new宣告了
line讀進來的值為null時迴圈也應該停止了才對
解答:
While sr.Peek > -1
先檢查是不是讀到尾了再去做readLine
2009年10月27日 星期二
如何讓Repeater與ObjectDataSource資料為空
原本想法是網頁上拉出元件Repeater1設定datasource為ObjectDataSource,且在Load page的時候有設定
if A = "Y" then
ObjectDataSource撈資料
else
ObjectDataSource不撈資料
end if
結果發現ObjectDataSource沒有屬性可以設定不撈資料
只好想個爛方法來解決
第一種:給定一個ObjectDataSource.SelectParameters.Item(0).DefaultValue的值是不會Select到資料的
第二種:按照第一種方式且在ObjectDataSource的SelectMethod="getData"的getData的Method去修改碰到某些值時直接回傳空資料
第一種方式不用再修改SelectMethod中的邏輯但是還是會有一次的查詢
第二種方式直接擋掉查詢
其實方法都很爛,但是我想不出有其它方式了
if A = "Y" then
ObjectDataSource撈資料
else
ObjectDataSource不撈資料
end if
結果發現ObjectDataSource沒有屬性可以設定不撈資料
只好想個爛方法來解決
第一種:給定一個ObjectDataSource.SelectParameters.Item(0).DefaultValue的值是不會Select到資料的
第二種:按照第一種方式且在ObjectDataSource的SelectMethod="getData"的getData的Method去修改碰到某些值時直接回傳空資料
第一種方式不用再修改SelectMethod中的邏輯但是還是會有一次的查詢
第二種方式直接擋掉查詢
其實方法都很爛,但是我想不出有其它方式了
2009年10月23日 星期五
RegularExpressionValidato屬性:ValidationExpression
[ ]:
定義可接受的字元,例:
[a-z]表示可接受a~z等26個英文小寫字母、
[0-5]表示可接受0~5個數字、
[^ b-e]表示除了b~e之外,所有字元圴接受
(^符號為不接受的意思)、[abc]表可接受a,b,c三個小寫字母。)
{ }:
定義須輸入的字元數,例:
{3}表示須輸入3個字元、
{1,3}須輸入1~3個字元、
{n,}表接受n~無限多個字元。
所以
[A-C]{3}表必須輸入3個大寫字母、
[a-zA-z0-9]{1,9}表可輸入1~9個大小寫字母或數字。
.:
表任意的字元,例:
.{8}表可接受8個任意字元。
|:
表「或」的意思,例:
[a-c]{1}
[0-9]{2}表必須輸入a~c之間的一個小寫字母或2個數字。
( ):
此符號可有可無,目的是為了方便閱讀,例:
([A-B])
([a-z])加了括號是不是比 [A-B]
[a-z]更清楚看出
符號。
\:
若可接受的字元中包含上述符號,
則必須在特殊符號前加上\符號,例:可接受的字元包括[],則寫成 \[\]
定義可接受的字元,例:
[a-z]表示可接受a~z等26個英文小寫字母、
[0-5]表示可接受0~5個數字、
[^ b-e]表示除了b~e之外,所有字元圴接受
(^符號為不接受的意思)、[abc]表可接受a,b,c三個小寫字母。)
{ }:
定義須輸入的字元數,例:
{3}表示須輸入3個字元、
{1,3}須輸入1~3個字元、
{n,}表接受n~無限多個字元。
所以
[A-C]{3}表必須輸入3個大寫字母、
[a-zA-z0-9]{1,9}表可輸入1~9個大小寫字母或數字。
.:
表任意的字元,例:
.{8}表可接受8個任意字元。
|:
表「或」的意思,例:
[a-c]{1}
[0-9]{2}表必須輸入a~c之間的一個小寫字母或2個數字。
( ):
此符號可有可無,目的是為了方便閱讀,例:
([A-B])
([a-z])加了括號是不是比 [A-B]
[a-z]更清楚看出
符號。
\:
若可接受的字元中包含上述符號,
則必須在特殊符號前加上\符號,例:可接受的字元包括[],則寫成 \[\]
2009年10月20日 星期二
將預設的 Membership、Roles 等功能所使用的資料庫以 SQL Server 取代
我們知道使用 VS2005 設計 ASP.NET 2.0 的網站時,你可以使用內建而且現成的 Membership、Roles、Profile 等等功能,而且你可以利用 ASP.NET 組態工具來建立 app_data 資料夾下的 aspnetdb 資料庫,裡面就是上述功能所使用的資料庫檔案。
不過在上述情況中,你必須在本機上安裝有 SQL Express 來作為資料庫引擎。然而,畢竟 SQL Express 只能使用於小網站,其功能無論如何都不能與 SQL Server 相比擬。那麼你要如何將資料庫轉移到 SQL Server 而非 SQL Express 呢?
如果你只是希望使用 SQL Server 取代 SQL Express 的話,那就非常容易了。但如果你要使用其它的資料庫,例如 Oracle 或 Access,那麼你必須自訂 Provider,其過程就不那麼容易,而且也不在本文所涵蓋的範圍之內。如果你有興趣,請前往 http://msdn2.microsoft.com/zh-tw/asp.net/aa336558(en-us).aspx。
要使用 SQL Server 取代 SQL Express 以作為 Membership、Roles、Profiles 等內建功能的資料庫,總共只有兩個簡單的步驟,詳述如下。
第一步,請執行 aspnet_regsql.exe (位於 C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 或 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\子目錄下),它會啟動一個精靈,幫你在 SQL Server 中建立所需的資料庫。你要做的事情很單純,就是輸入連線方式,指定資料庫名稱(不需取名為 ASPNETDB,可以是任何名稱),接著,它會幫你把資料庫建立起來。當然,你最好另外設定該資料庫的各種權限,我想這就不用多說了吧。
第二步,你必須在網站中的 Web.config 檔案中加上必要的連線字串如下。請注意,LocalSqlServer 這個字是固定的,不能改它。
...
現在,你已經可以使用這個位於 SQL Server 上的資料庫以及 ASP.NET 2.0 內建的各項功能,而且可以使用 ASP.NET 組態工具以接續其它的設定了。
請記得這一行絕對不能省略,否則將會發生許多奇怪的錯誤。
不過在上述情況中,你必須在本機上安裝有 SQL Express 來作為資料庫引擎。然而,畢竟 SQL Express 只能使用於小網站,其功能無論如何都不能與 SQL Server 相比擬。那麼你要如何將資料庫轉移到 SQL Server 而非 SQL Express 呢?
如果你只是希望使用 SQL Server 取代 SQL Express 的話,那就非常容易了。但如果你要使用其它的資料庫,例如 Oracle 或 Access,那麼你必須自訂 Provider,其過程就不那麼容易,而且也不在本文所涵蓋的範圍之內。如果你有興趣,請前往 http://msdn2.microsoft.com/zh-tw/asp.net/aa336558(en-us).aspx。
要使用 SQL Server 取代 SQL Express 以作為 Membership、Roles、Profiles 等內建功能的資料庫,總共只有兩個簡單的步驟,詳述如下。
第一步,請執行 aspnet_regsql.exe (位於 C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 或 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\子目錄下),它會啟動一個精靈,幫你在 SQL Server 中建立所需的資料庫。你要做的事情很單純,就是輸入連線方式,指定資料庫名稱(不需取名為 ASPNETDB,可以是任何名稱),接著,它會幫你把資料庫建立起來。當然,你最好另外設定該資料庫的各種權限,我想這就不用多說了吧。
第二步,你必須在網站中的 Web.config 檔案中加上必要的連線字串如下。請注意,LocalSqlServer 這個字是固定的,不能改它。
...
現在,你已經可以使用這個位於 SQL Server 上的資料庫以及 ASP.NET 2.0 內建的各項功能,而且可以使用 ASP.NET 組態工具以接續其它的設定了。
請記得
Process 呼叫外部執行檔
早期在vb6常會利用"DosShell",類似呼叫Dos Command的方式來開啟外部程式
在VB.NET提供了更完整的呼叫外部程式的方式-Process
以下舉例呼叫ipconfig來release IP
Dim process As New System.Diagnostics.Process()
'呼叫的外部程式名稱
process.StartInfo.FileName = "ipconfig"
'外部程式所需之參數
process.StartInfo.Arguments = "/release"
process.StartInfo.UseShellExecute = False
process.StartInfo.CreateNoWindow = True
process.StartInfo.RedirectStandardError = False
process.StartInfo.RedirectStandardInput = False
process.StartInfo.RedirectStandardOutput = True
process.Start()
process.WaitForExit()
If Not process.HasExited Then
process.Kill()
End If
process.Close()
或
'簡單的寫法
process.start("ipconfig","/release")
在VB.NET提供了更完整的呼叫外部程式的方式-Process
以下舉例呼叫ipconfig來release IP
Dim process As New System.Diagnostics.Process()
'呼叫的外部程式名稱
process.StartInfo.FileName = "ipconfig"
'外部程式所需之參數
process.StartInfo.Arguments = "/release"
process.StartInfo.UseShellExecute = False
process.StartInfo.CreateNoWindow = True
process.StartInfo.RedirectStandardError = False
process.StartInfo.RedirectStandardInput = False
process.StartInfo.RedirectStandardOutput = True
process.Start()
process.WaitForExit()
If Not process.HasExited Then
process.Kill()
End If
process.Close()
或
'簡單的寫法
process.start("ipconfig","/release")
訂閱:
文章 (Atom)