请教关于c#中split()函数截取字符串到数组中不能截取汉字的问题
你们好,我想请教关于c#中split()函数截取字符串到数组中不能截取汉字的问题下面这个是我的要分割到数组中的文本文件:
260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26
260462231000,王海云,考场1,1,SCAN/KUNLIGONG/26/046/26046223_,1,26
260462241000,王亚刚,考场1,1,SCAN/KUNLIGONG/26/046/26046224_,1,26
260462251000,代振兴,考场1,1,SCAN/KUNLIGONG/26/046/26046225_,1,26
.cs文件代码:
ArrayList guidList = new ArrayList();
if (UploadFile.HasFile)
{
Stream stream = UploadFile.FileContent;
StreamReader streamrd =new StreamReader(stream);
while (streamrd.Peek()>-1)
{
string strLine = textrd.ReadLine();
string[] strData = strLine.Split(',');
guidList.Add(Guid.NewGuid());
cmd.Parameters["@ssn_id"].Value =strData[0];
cmd.Parameters["@name"].Value = strData[1];
cmd.Parameters["@loginname"].Value =strData[2];
cmd.Parameters["@loginpassword"].Value = "sa";
cmd.Parameters["@person_guid"].Value = guidList[guidList.Count-1].ToString ();
cmd.ExecuteNonQuery();
}
但是strData[1]取不到值,每次插入数据库的时候就提示:超出索引范围,请教? --------------------编程问答-------------------- string strLine = "260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26";
string[] strData = strLine.Split(',');
for(int i=0;i<strData.Length;i++)
{
Response.Write(strData[i]+"<br>");
}
这样调试是可以的
是不是strLine的没有给上值》?》? --------------------编程问答-------------------- 哈 你按照这样再调试就知道了 不用浪费这些分的 可以自己搞定啊 --------------------编程问答-------------------- 先把string strLine = textrd.ReadLine();输出看看是什么 --------------------编程问答-------------------- 调试过,当遇到汉字就无法放入数据了。 --------------------编程问答-------------------- Response.Write(strData[0]);能够输出来,
但是当我取第2个值的时候就提示 :超出索引范围
Response.Write(strData[0]+ strData[1]);
搞不太明白,有的朋友说要我用textreader 我也用了 但还是遇到同样的问题。 --------------------编程问答-------------------- 如果是实际数据可以,但从文件中读取出来的不可以的话,那唯一的解释可能就是文件的编码问题 --------------------编程问答-------------------- 因为还没有听说过split()区分汉字,如果这样的话那微软的这个方法也太失败了 --------------------编程问答-------------------- 我把文本文件保存为Unicode文件类型的文件也还是同样的问题
索引超出了数组界限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。
源错误:
行 299: // cmd.Parameters["@person_guid"].Value = guidList[guidList.Count-1].ToString ();
行 300: // cmd.ExecuteNonQuery();
行 301: Response.Write(strData[0]+ strData[1]);
然后就是红色指向 Response.Write(strData[0]+ strData[1]);
求救啊。。 --------------------编程问答-------------------- --------------------编程问答-------------------- string[] strData = strLine.Split( ', ');
if(strData.length==4) {
guidList.Add(Guid.NewGuid());
cmd.Parameters[ "@ssn_id "].Value =strData[0];
cmd.Parameters[ "@name "].Value = strData[1];
cmd.Parameters[ "@loginname "].Value =strData[2];
cmd.Parameters[ "@loginpassword "].Value = "sa ";
cmd.Parameters[ "@person_guid "].Value = guidList[guidList.Count-1].ToString ();
cmd.ExecuteNonQuery();
}
--------------------编程问答-------------------- 关键是在你构造StreamReader时,提供编码格式。
test.txt:
260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26
测试代码:
public static void Main(string[] args)
{
string file = @".\test.txt";
StreamReader stream = new StreamReader(file, UnicodeEncoding.Default);
string source = stream.ReadLine();
string[] result = source.Split(',');
foreach (var item in result)
Console.WriteLine(item);
}
结果:
260462221000--------------------编程问答-------------------- 没遇到过类似问题,顶下 --------------------编程问答-------------------- 以逗号分割。。。代码如下
陈丽雄
考场1
1
SCAN/KUNLIGONG/26/046/26046222_
1
26
--------------------编程问答-------------------- 还有就是,你截取前要判断,你所读取文件,该行时,数据不能为空。
string strLine = "260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26";
string[] strData = strLine.Split(new char[] { ',' });
和你分割时的数组长度(索引)必须大于或等于,你所要赋值时的索引长度。 --------------------编程问答--------------------
他的问题,不在Split(),而是StreamReader.ReadLine()后,读出来的就不是
260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26
而是
260462221000,??????,????1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26
中文全部为乱码。解决办法就是设置StreamReader的编码格式为UnicodeEncoding.Default --------------------编程问答-------------------- 你的 数组定义写在 循环里边。。每轮循环 都是新的 数组。。只可能会有 [0]的值。。哪里会有 [1]?????????? --------------------编程问答-------------------- --------------------编程问答-------------------- 11楼正解,测试通过。 --------------------编程问答--------------------
--------------------编程问答-------------------- ++
Stream stream = UploadFile.FileContent;
StreamReader streamrd = new StreamReader(stream,Encoding.GetEncoding("gb2312"));
补充:.NET技术 , ASP.NET