增強字串 (轉)

amyz發表於2007-08-16
增強字串 (轉)[@more@]

一個自定義類,用於大規模的字串連線,如拼接語句。用流技術實現的,很好呦!!

using System;
using System.IO;
using System.Text;
using System..Forms;

namespace SuperString
{
 ///


 /// 創 建 者: superhood
 /// 內容描述: 增強字串類
 ///

 public class CSuperString
 {
 ///
 /// 功能簡述: 運算子過載
 ///

 /// 左引數
 /// 右引數
 /// 文字類
 public static CSuperString operator + (string Left,CSuperString Right)
 {
 byte[] btyLeft = Encoding.Default.GetBytes(Left);//返回左引數陣列
 byte[] btyRight = new Byte[Right.iLength];//返回右引數陣列
 
 Right.iTextLength += Left.Length;//設定右引數文字長度
 Right.iLength = btyLeft.Length + btyRight.Length;//設定右引數位元組長度
 
 Right.memStrm.Position = 0;//將右引數流位置置0
 Right.memStrm.Read(btyRight,0,btyRight.Length);//將右引數資料讀出

 Right.memStrm.Position = 0;//將右引數流位置置0
 Right.memStrm.Write(btyLeft,0,btyLeft.Length);//將字串(位元組陣列)寫入右引數
 Right.memStrm.Write(btyRight,0,btyRight.Length);//將右引數原有資訊寫回(加在左引數字串後)

 return Right;//返回右引數
 }

 ///


 /// 功能簡述: 運算子過載
 ///

 /// 左引數
 /// 右引數
 /// 文字類
 public static CSuperString operator + (CSuperString Left,string Right)
 {
 byte[] btyRight = Encoding.Default.GetBytes(Right);//將右引數(字串)轉換為位元組陣列
 
 Left.memStrm.Position = Left.iLength;//設定左引數流的位置
 Left.memStrm.Write(btyRight,0,btyRight.Length);//將右引數字串寫入流

 Left.iTextLength += Right.Length;//設定左引數文字長度
 Left.iLength += btyRight.Length;//設定左引數位元組長度

 return Left;//返回左引數
 }
 
 ///


 /// 功能簡述: 運算子過載
 ///

 /// 左引數
 /// 右引數
 /// 文字類
 public static CSuperString operator + (CSuperString Left,CSuperString Right)
 {
 byte[] btyRight = new Byte[Right.iLength];//宣告位元組陣列(右引數)
 
 Right.memStrm.Position = 0;//將右引數流位置置0
 Right.memStrm.Read(btyRight,0,btyRight.Length);//將右引數(字串)轉換為位元組陣列
 
 Left.memStrm.Position = 0;//將左引數流位置置0
 Left.memStrm.Write(btyRight,0,btyRight.Length);//將右引數字串寫入流
 
 Left.iTextLength += Right.iTextLength;//設定左引數文字長度
 Left.iLength += Right.iLength;//設定左引數位元組長度

 return Left;//返回左引數
 }

 ///


 /// 功能簡述: 流中有效位元組長度
 ///

 private int iLength = 0;
 
 ///
 /// 功能簡述: 流中文字長度
 ///

 private int iTextLength = 0;

 ///


 /// 功能簡述: 流
 ///

 private MemoryStream memStrm;

 ///


 /// 功能簡述: 構造
 ///

 public CSuperString()
 {
  memSt= new MemoryStream();//初始化流
 }

 ///


 /// 功能簡述: 建構函式
 ///

 /// 預設長度(以位元組為單位)
 public CSuperString(int DefaultLength)
 {
 memStrm = new MemoryStream(DefaultLength);//初始化流
 }

 ///


 /// 功能簡述: 屬性,位元組長度
 ///

 public int Length
 {
 get
 {
 return iLength;
 }
 }

 ///


 /// 功能簡述: 屬性,文字長度
 ///

 public int TextLength
 {
 get
 {
 return iTextLength;
 }
 }

 ///


 /// 功能簡述: 屬性,流長度
 ///

 public int Capacity
 {
 get
 {
 return memStrm.Capacity;
 }
 set
 {
 if (value >= iLength)
 memStrm.Capacity = value;
 else
 memStrm.Capacity = iLength;
 }
 }

 ///


 /// 功能簡述: 向類中新增字串
 ///

 ///
 public void AddString (string Date)
 {
 byte[] btyDate = Encoding.Default.GetBytes(Date);//字串轉換為位元組陣列
 
 memStrm.Position = iLength;//設定流的位置
 memStrm.Write(btyDate,0,btyDate.Length);//將字串寫入流

 iTextLength += Date.Length;//設定文字長度
 iLength += btyDate.Length;//設定位元組長度
 }

 ///


 /// 功能簡述: 返回文字
 ///

 /// 返回字串
 public overr string ToString()
 {
 memStrm.Position = 0;//設定流的位置
 byte[] btyDate = new byte[iLength];//宣告位元組陣列
 memStrm.Read(btyDate,0,iLength);//將流內容讀入陣列
 return Encoding.Default.GetString(btyDate);//將位元組陣列轉換為字串並返回
 }

 ///


 /// 功能簡述: 將字串寫入
 ///

 /// 檔名
 public void WriteToFile(string FileName)
 {
 FileStream strm = new FileStream(FileName,FileMode.OpenOrCreate,FileAccess.Write);//初始化檔案流
 
 //判斷流長度用來確定流中是否有冗餘資訊
 if (memStrm.Length > iLength)
 {//有
 memStrm.Position = 0;//設定流的位置
 
 byte[] btyDate = new byte[iLength];//宣告位元組陣列
 memStrm.Read(btyDate,0,iLength);//將流內容讀入陣列
 
 strm.Write(btyDate,0,iLength);//將流內容寫入檔案
 }
 else
 {//沒有
 memStrm.WriteTo(strm);//將流中文字寫入檔案
 }

 strm.Close();//關閉檔案
 }

 ///


 /// 功能簡述: 將字串寫入流
 ///

 ///
 public void WriteToStream(Stream strm)
 {
 //判斷流長度用來確定流中是否有冗餘資訊
 if (memStrm.Length > iLength)
 {//有
 memStrm.Position = 0;//設定流的位置
 byte[] btyDate = new byte[iLength];//宣告位元組陣列
 memStrm.Read(btyDate,0,iLength);//將流內容讀入陣列
 
 strm.Write(btyDate,0,iLength);//將陣列內容寫入另一流
 }
 else
 {//沒有
 memStrm.WriteTo(strm);//將流中文字寫入另一流
 }
 }

 ///


 /// 功能簡述: 清除流
 ///

 public void Clear()
 {
 iLength = 0;//將流位元組長度設為0
 iTextLength = 0;//將流文字長度設為0
 }
 }
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962585/,如需轉載,請註明出處,否則將追究法律責任。

相關文章