Archive for the ‘.NET’ Category

Parsowanie e-maili w C#

Posted: 6 czerwca 2012 in .NET, C#, Parsing
Tagi: , ,

Poniżej przedstawiam prosty program w konsoli (można go rozbudować czy też dorobić do niego GUI) do parsowania e-maili
napisany w języku C#
using System;
using System.IO;
using System.Collections.Generic;

namespace BatchReader_01 {
        public class Message {
                public static int counter = 0;
                public static Dictionary<string, int> dict = new Dictionary<string, int>();
                public static List<Message> list = new List<Message>();

                int number;
                String mSubject;
                String mData;
                String mFrom;
                public Message(ref StreamReader sr) {
                        list.Add(this);
                        ++counter;
                        number = counter;

                        string strLine;
                        strLine = sr.ReadLine();
                        mData = strLine.Substring(6);
                        strLine = sr.ReadLine();
                        mFrom = strLine.Substring(6);
                        strLine = sr.ReadLine();
                        mSubject = "";
                        while (!strLine.StartsWith("To")) {
                                mSubject += strLine;
                                strLine = sr.ReadLine();
                        }
                        mSubject = mSubject.Substring(9);
                        mSubject = mSubject.Replace('t', ' ');

                        strLine = sr.ReadLine();
                        while (strLine != "------------------------------") {
                                strLine = sr.ReadLine();
                        }

                        if (!mSubject.StartsWith("Re: ")) {
                                dict.Add(mSubject.Replace(" ", ""), number);
                        } else {
                                strLine = mSubject.Substring(4).Replace(" ", "");
                                if (!dict.ContainsKey(strLine))
                                        dict.Add(strLine, number);
                        }
                }
                //
                public void dump() {
                        Console.WriteLine("Messge " + number.ToString()+":");
                        Console.WriteLine("t" + mSubject);
                        Console.WriteLine("t" + mData);
                        Console.WriteLine("t" + mFrom);
                }
                //
                public static void listDump() {
                        foreach (Message obj in list)
                                obj.dump();
                }
                //
                public static void subjectsDump() {
                        // Get a collection of the keys (names).
                        ICollection<String> c = dict.Keys;
                        foreach (String str in c)
                                Console.WriteLine("index: {0}, {1}  {2}", dict[str], list[dict[str] - 1].mSubject, str);
                }
        }

        class Program {
                //-------------------------------------------------------
                public static void Main(string[] args) {
                        try {
                                //List<Message> list = new List<Message>();
                                StreamReader sr = File.OpenText("GDAlgorithms-list Digest, Vol 28, Issue 1.MSG");
                                string strLine;
                                while (null != (strLine = sr.ReadLine())) {
                                        if (strLine.StartsWith("Message:")) {
                                                Message m = new Message(ref sr);
                                                //list.Add(m);
                                        }
                                }
                                sr.Close();

                                Message.subjectsDump();

                                Message.listDump();

                        } catch (FileNotFoundException e) {
                                Console.WriteLine(e.Message);
                        }
                }
                //-----------------------------------------------
        }
}
//---------------------------------------------------------------

Projekt w VS2008 Express Edition (download)

Jak użyjesz kodu w swoim programie to napisz. Tak z ciekawości chciałbym wiedzieć 🙂

Proszę o komentarze i uwagi 🙂