01/10/2018, 00:59

Lọc chuỗi trong asp.net C#

Mình có vấn đề này xin các bạn bên công nghệ thông tin giúp cho. Mình tạo 1 Webservice đơn giản bằng ASP.NET. Mình co 1 file .txt. Nội dung như sau:

<Anh A>	<1000>
<Chi B>	<2000>
<Anh C>	<3000>
<Anh D>	<4000>

Mình muốn lấy tên và lương tháng của từng người và lưu vào 1 lớp gọi là Company.

public class Company
    {
        public string Name { get; set; }
        public string Salary { get; set; }
    }

Đây là code của mình viết trên VS2015:

[WebMethod]
        public List<Company> CompanyGetInformation()
        {
            List<Company> company = new List<Company>();
            //List<string> information = new List<string>();
            string name = " ";
            string salary= " ";
            int startSubName, startSubSalary;
            int endSubName, endSubSalary;
            string path = "D:/Bi/Company.txt";
            StreamReader reader = File.OpenText(path);
            while(!reader.EndOfStream)
            {
                //information.Add(reader.ReadLine());
                for (int i = 0; i <reader.ReadLine().Length;i++)
                {
                    startSubName = reader.ReadLine().IndexOf("<");
                    startSubSalary = reader.ReadLine().LastIndexOf("<");
                    endSubName = reader.ReadLine().IndexOf(">");
                    endSubSalary = reader.ReadLine().LastIndexOf(">");
                    name = reader.ReadLine().Substring(startSubName + 1, endSubName);
                    salary = reader.ReadLine().Substring(startSubSalary + 1, endSubSalary);
                }
                company.Add(new Company() { Name = name, Salary = salary });
            }
            return company;
        }

Khi mình chạy lên thì nó báo lỗi thế này:

System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.Substring(Int32 startIndex, Int32 length)
at web.topicaservice.CompanyGetInformation() in D:BiBai 3 Webwebweb opicaservice.asmx.cs:line 100

Các bạn cho mình hỏi giờ mình phải giải quyết như thế nào?

Hoàng Nguyễn Lê viết 03:03 ngày 01/10/2018

Đoạn substring kia bạn phải endSubSalary-1 mới đúng chứ

Mênh Mông viết 03:06 ngày 01/10/2018

Ý tưởng của bạn là:

  1. Đọc từng dòng trong file.
  2. Dùng vòng lặp trong for để quét các ký tự tìm ký tự “>” “<” và lấy chỉ số để SubString nó
    Thật tuyệt vời ! ý tưởng tốt khà khà.
    Mà hơi tiếc! Bạn đã quên kiến thức cơ bản rằng: Read() đọc 1 ký tự hoặc được chỉ định và ReadLine() thì chơi luôn nguyên hàng nhé!

Tự biết ko ổn chổ nào chưa ? À phong cách viết code của bạn khá tốt đấy

BiNa2605 viết 03:03 ngày 01/10/2018

Cảm ơn bạn nhé. Mình học bên điện tử nên kiến thức về lập trình bên IT không được tốt lắm. Mình sẽ kiểm tra lại xem sao.

BiNa2605 viết 03:05 ngày 01/10/2018

Mình đã làm được rồi. Thanks. Nhưng mình vẫn dùng ReadLine.

Mênh Mông viết 03:10 ngày 01/10/2018

Đúng rồi có nhiều cách để giải quyết mà. Mình thấy vòng lặp for nên hiểu ý tưởng của bạn là quét qua từng ký tự.
Mà sao bạn ko dùng file XML cho tiện ?

BiNa2605 viết 03:00 ngày 01/10/2018

Mình học bên điện tử nên mình không rành bên công nghệ thông tin lắm. Mình muốn có tạo 1 cái server tử máy tính. Mình dùng chip, cảm biến đo dữ liệu rồi chuyển hết data lên server. Sau đó dùng điện thoại để giám sát hoặc theo dõi.
Mình lên mạng tìm thì thấy ASP.NET và C# nên học và làm theo.

Ng Tr Lanh viết 03:04 ngày 01/10/2018

OutOfRangeException

theo kinh nghiệm của mình thì lỗi này thường gặp nếu bạn làm gì đó liên quan đến index, ví dụ bạn subString ở 1 vị trí index vượt quá độ dài chuổi, nên nếu gặp từ khóa này thì bạn có thể check lại index.
Góp ý thêm vậy thôi chứ cũng không biết gì nhiều

Bài liên quan
0