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

25. February 2009

เขียนมาหลายครั้งแล้วไม่เคยจำซักที 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);
                }

.NET ,

Comments

กร
กร
2/26/2009 9:20:53 AM #
ขอเป็นภาษาซีด้วยได้มั้ย
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 ดูเว่อมาก
3/1/2009 1:21:54 AM #
@chakrit แฮะๆ เพิ่งจะรู้เรื่อง overload ตัวนั้นครับ ปล่อยไก่เลย
ส่วน LINQ to Text files ยังไม่เคยลอง เมื่อกี้ไปแอบดูมาคร่าวๆแล้ว ดูใช้ง่ายน่าดู
Accept ครับ แต่ที่นี่ไม่มี reputation score ให้นะ Tong
Comments are closed