就是table分隔的数据,每行对应一行数据。 一般都是上传文件,保存起来,然后重新读取文件。 这是我鼓捣的直接分析stream的,省事………… ========================= using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Text.RegularExpressions;
namespace xxWebProject.yy { /// <summary> /// xxx /// </summary> public class abcd : System.Web.UI.Page { protected System.Web.UI.HtmlControls.HtmlInputFile txtFile; //.....省略若干.....
private bool bErrorFlg=false; private void Page_Load(object sender, System.EventArgs e) { if(!Page.IsPostBack) { //爱写啥写啥.... } }
/// <summary> /// 上传文件 /// </summary> private void gsbUpload_Click(object sender, System.EventArgs e) { //文件没有输入。 if(txtFile.PostedFile.FileName.Trim().Length==0){ //报错 return; } //文件不存在,或者文件内容为空 if(txtFile.PostedFile.ContentLength==0) { //报错 return; }
//文件类型的判断 string sFileContentType=txtFile.PostedFile.ContentType; string sFilextension=System.IO.Path.GetExtension(txtFile.PostedFile.FileName).ToLower(); //如果文件后缀不是.tsv(文件ContentType的判断我没写) if(!sFilextension.Equals(".tsv")) { //报错 return; } //取得文件内容 System.IO.StreamReader sr = new System.IO.StreamReader( txtFile.PostedFile.InputStream,System.Text.Encoding.GetEncoding("GB2312")); //按GB2312的编码读取输入流的数据
//数据check int iLineNumber=0; while(sr.Peek()>-1) //如果有数据 { iLineNumber++; CheckData(sr.ReadLine(),iLineNumber); //数据check }
//如果check有错误 if(bErrorFlg) { sr.BaseStream.Close(); sr.Close(); return; } string sName="xx"; //登录用户名。
//重新读取数据 sr.BaseStream.Seek(0,System.IO.SeekOrigin.Begin); //数据流的指针重新定位到起点 sr.DiscardBufferedData(); //StreamReader内容清空 while(sr.Peek()>-1) { SaveData(sr.ReadLine(),sName); //保存数据 } //close. sr.BaseStream.Close(); //数据流关闭 sr.Close(); //StreamReader 关闭 //进行数据库更新操作... }
/// <summary> /// 数据check /// </summary> /// <param name="sLineData">每行的数据</param> /// <param name="iLineNumber">第x行,报错时报出行数</param> private void CheckData(string sLineData,int iLineNumber) { if(sLineData.Trim().Length==0)return; //空行忽略 //Split string[] sArray=Regex.Split(sLineData,"\t",RegexOptions.IgnoreCase); //按tab拆分 if(sArray.Length!=7){ //如果每行不是7列 //报错 bErrorFlg=true; return; } //Trim for(int i=0;i<sArray.Length;i++) { sArray[i]=sArray[i].Trim(); }
//这里对需要check的列进行check,出错就把bErrorFlg置为true。 }
/// <summary> /// 保存数据 /// </summary> /// <param name="sLineData">每行数据</param> /// <param name="sName">登录用户名</param> private void SaveData(string sLineData,string sName) { if(sLineData.Trim().Length==0)return; string[] sArray=Regex.Split(sLineData,"\t",RegexOptions.IgnoreCase); //Trim for(int i=0;i<sArray.Length;i++) { sArray[i]=sArray[i].Trim(); } //这里进行保存数据的操作,比如保存到datatable }
|