当前位置:编程学习 > C#/ASP.NET >>

请教关于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[] { ',' });
--------------------编程问答-------------------- 还有就是,你截取前要判断,你所读取文件,该行时,数据不能为空。
和你分割时的数组长度(索引)必须大于或等于,你所要赋值时的索引长度。 --------------------编程问答--------------------
引用 14 楼 tashiwoweiyi 的回复:
还有就是,你截取前要判断,你所读取文件,该行时,数据不能为空。
和你分割时的数组长度(索引)必须大于或等于,你所要赋值时的索引长度。

他的问题,不在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")); 
--------------------编程问答--------------------
引用 13 楼 tashiwoweiyi 的回复:
以逗号分割。。。代码如下

C# code

 string strLine = "260462221000,陈丽雄,考场1,1,SCAN/KUNLIGONG/26/046/26046222_,1,26";
        string[] strData = strLine.Split(new char[] { ',' });
++
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,