วิธีการใช้ regular expression เพื่อ parse ไฟล์ข้อความใน C#

by m3rLinEz 25. February 2009 20:51

เขียนมาหลายครั้งแล้วไม่เคยจำซักที T_T เอามาลงไว้เตือนความจำซักหน่อย

หน้าตาของบรรทัดใน Text File มันคั่นด้วย Space หลายตัวติดกัน ใช้ string.Split(‘ ‘) อาจจะไม่เวิร์คเท่าไหร่ เพราะจะได้ empty string ติดมาด้วย

:
1.0000000e+000  2.4924448e+000  2.6646541e+000  ..
1.0000000e+000 -2.6678309e+000 -1.0957386e+000  ..
1.0000000e+000 -2.6132891e+000 -1.6032095e+000  ..
:

ส่วนอันนี้เป็นโค้ดสำหรับ parse ตัดมาเฉพาะใจความสำคัญ

                 string line;
                int count = 0;
                Regex regex = new Regex("[0-9e+-.]+");
                while (count < maxLines && (line = tr.ReadLine()) != null)
                {
                    int type = -1;
                    List<double> values = new List<double>();
                    MatchCollection matches = regex.Matches(line);
                    foreach (Match m in matches)
                    {
                        double d = double.Parse(m.Groups[0].Value);
                        if (type == -1) type = (int)d;
                        else values.Add(d);
                    }
                    count++;

                    Entry e = new Entry()
                    {
                        Type = type,
                        Data = values.ToArray()
                    };

                    list.Add(e);
                }

Tags: , Category: .NET

Comments (4) -

กร
กร
2/26/2009 9:20:53 AM #

ขอเป็นภาษาซีด้วยได้มั้ย

m3rlinez
m3rlinez
2/26/2009 1:35:48 PM #

เอาจริงเด่วจัดให้ Smile

chakrit
chakrit
2/28/2009 11:02:30 PM #

Split มันมี Overload ที่เอา entry ว่างออกให้เองนะ

Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);

จริงๆ ใช้ LINQ ไม่ง่ายกว่ารึ ใช้ Regex ดูเว่อมาก

m3rlinez
m3rlinez
3/1/2009 1:21:54 AM #

@chakrit แฮะๆ เพิ่งจะรู้เรื่อง overload ตัวนั้นครับ ปล่อยไก่เลย
ส่วน LINQ to Text files ยังไม่เคยลอง เมื่อกี้ไปแอบดูมาคร่าวๆแล้ว ดูใช้ง่ายน่าดู
Accept ครับ แต่ที่นี่ไม่มี reputation score ให้นะ Tong

Add comment




biuquote
  • Comment
  • Preview
Loading






Most comments

khimkhim khimkhim
1 comments
weaw weaw
1 comments
domehuhu domehuhu
1 comments

RecentComments

Comment RSS