퇴근5분전




 기존 : DB 1개를 타겟으로 했었으나... 
 새로운 놈 : DB를 여러개로 설정가능하다. 

기본 DB와 함께 Excel 지원을 한다면... 두개의 DB로... 타겟을 설정할수 있다는 얘기!!

추가적으로 Factory를 만들어서 만든다.
 
예제는 천천히..
 
 


한글로 만들었더니 대박!!! 지저분함. ㅡ.,ㅡ;

----------------------------------------------------------- 훈스 팁게시판에 올린 글! 그대로..

소스를 보시고 대체 이건 뭥미? 하실텐데요...

오늘 질문게시판에 TextBox에 들어온 숫자의 갯수가 4개가 연속이면 제거해야된다는 글을

들어온 문자열중 4개가 중복되면 제거로 잘못보고 ㅡ.,ㅡ;;; 아래 클래스를 만들었었습니다.  난독증...

처음 클래스명과 변수명들은 모두 영문자로 늘 하던데로 대충.. 때려맞춰서 만들어놓고 보니

이걸 미친척 한글로 바꿔보고 싶은 생각이 문득 들어... 만들어보았습니다.

어떤가요?잘 지었는지? 검사와 검색이란 단어를 적용하려니.. 한글 사전없이는 힘든것 같네요.(아래도 불분명합니다. )

한글로 지어놓으니 대략 난감하네요. 하하하.

한글로 써놓으니 글씨 폰트도 영문자랑 안맞아서 그런지 많이 지저분하네요.

만들어본 목적

객체지향 <-- 을 되새기며 객체이름을 명시하고 기능을 명시하면서 코드를 문장으로 볼수 있다면... 이란 오랜

생각끝에 영어로 안되서 ㅡ.,ㅡ;; 한글로 도전해봤습니다.

중복문자처리객체.제거실행(  this.textBox1.Text  );

조금은 억지스럽지만 ^^ 미천한 실력으로 만들다보니 역시 미흡해보이는게 눈에 너무 띠네요.

이팁을 보시는 여러분들은 어떠신가요?

코드자체를 직독직해?  가능하신지요?? 객체를 얼마나 자연스러운 코드로 만드시는지요?

영어잘하시는분 넘 부러워요!!

사용법          

  만약 ) this.textBox1.Text = "aa abbccc c d e11 ffffc a aabbbbbb 22b 4444 66";

 데이타가 존재시... 아래와 같이 중복을 제거할수 있습니다.

숫자 2는 2개씩 체크합니다.

            using (중복문자제거클래스 중복문자처리객체 = new 중복문자제거클래스(2))
            {
                this.textBox1.Text = 중복문자처리객체.제거실행(this.textBox1.Text);
            }

    public class 중복문자제거클래스 : IDisposable
        {
            int 체크문자개수 = 0;

            int 현재위치 = 0;
            List<char> 검사문자저장소 = new List<char>();
            List<string> 중복문자목록 = new List<string>();

            public 중복문자제거클래스(int _체크문자갯수)
            {
                체크문자개수 = _체크문자갯수;
            }

            public string 제거실행(string 검사소스문자열)
            {
                string 제거된문자열 = "";
                현재위치 = 0;
                for (int loop = 0; loop < 검사소스문자열.Length; loop++)
                {                   
                    char? 검색대상문자 = 검색대상문자얻어내기(검사소스문자열);
                    if (검색대상문자 != null)
                    {                     
                        bool 검사여부 = 문자체크여부(검색대상문자.Value);

                        if (검사여부 == false)
                        {
                            중복문자체크(검사소스문자열, 검색대상문자.Value);
                        }
                        현재위치++;
                    }
                    if (현재위치 >= 검사소스문자열.Length - 1)
                    {
                        제거된문자열 = 문자변환(검사소스문자열).Replace("  ", " ");
                    }
                }
                return 제거된문자열;
            }

            private string 문자변환(string 검사소스문자열)
            {
                foreach (string 중복문자항목 in 중복문자목록)
                {
                    검사소스문자열 = 검사소스문자열.Replace(중복문자항목, "");
                }
                return 검사소스문자열;
            }

            private void 중복문자체크(string 검사소스문자열, char 검사대상문자)
            {
                try
                {
                    string 중복검사문자열 = new string(검사대상문자, 체크문자개수);
                    if (검사소스문자열.IndexOf(중복검사문자열, 현재위치) >= 0)
                    {
                        중복문자목록.Add(중복검사문자열);
                    }
                }
                catch{ }
            }

            private bool 문자체크여부(char 검색대상문자)
            {
                bool 체크여부 = false;
                if (검사문자저장소.Contains(검색대상문자))
                {
                    체크여부 = true;
                }
                else
                {
                    체크여부 = false;
                    검사문자저장소.Add(검색대상문자);
                }
                return 체크여부;
            }

            private char? 검색대상문자얻어내기(string 검사소스문자열)
            {
                char? 검색대상문자 = null;
                try
                {
                    검색대상문자 = 검사소스문자열[현재위치];
                }
                catch { }
                return 검색대상문자;
            }

            #region IDisposable 멤버

            public void Dispose()
            {
                검사문자저장소.Clear();
                중복문자목록.Clear();
                중복문자목록 = null;
                검사문자저장소 = null;
            }

            #endregion
        }


아래 소스는 훈스게시판에 중복문자열을 찾아서 지우는 질문이 있었는데 

숫자타입만을 제거한다고 된걸 못보고 만들었다. 질문을 대충보는 버릇때문인지...

아래는 변수명을 억지로 한글로 바꾸어봤는데... 대충 대충 지었더니... 영어보다 더 보기 어렵다...

집에서 다시 고쳐보자!! 한글로 뭔가 객체지향느낌이 나도록....


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.textBox1.Text = "aa a bb c d e ffff c a aa bbbbbb b";
        }

        public class 중복문자제거 : IDisposable
        {
            int 중복체크문자갯수 = 0;

            int 인덱스 = 0;
            List<char> 문자히스토리 = new List<char>();
            List<string> 중복문자 = new List<string>();

            public 중복문자제거(int 문자갯수 )
            {
                중복체크문자갯수 = 문자갯수;
            }

            public string 실행(string 문자열소스)
            {
                string 반환문자열 = "";
                인덱스 = 0;
                for (int loop = 0; loop < 문자열소스.Length; loop++)
                {
                    // 검색문자 뽑기 
                    char? c = 검색문자뽑기(문자열소스);
                    if (c != null)
                    {
                        // hist와 체크
                        bool b = 문자체크(c.Value);

                        if (b == false)
                        {
                            중복문자체크(문자열소스, c.Value);
                        }
                        인덱스++;
                    }
                    if (인덱스 >= 문자열소스.Length - 1)
                    {
                        반환문자열 = 문자변환(문자열소스).Replace("  ", " ");
                      
                    }
                }
                return 반환문자열;

            }

            private string 문자변환(string 문자열소스)
            {
                foreach (string s in 중복문자)
                {
                    문자열소스 = 문자열소스.Replace(s, "");
                }
                return 문자열소스;
            }

            private void 중복문자체크(string 문자열소스, char 체크문자)
            {
                try
                {
                    string s = new string(체크문자, 중복체크문자갯수);
                    if (문자열소스.IndexOf(s, 인덱스) >= 0)
                    {
                        중복문자.Add(s);
                    }
                }
                catch
                {}
            }

            private bool 문자체크(char c)
            {
                bool ret = false;
                if (문자히스토리.Contains(c))
                {
                    ret = true;
                }
                else
                {
                    ret = false;
                    문자히스토리.Add(c);
                }
                return ret;
            }

            private char? 검색문자뽑기(string 문자열소스)
            {
                char? 뽑기문자 = null;
                try
                {
                    뽑기문자 = 문자열소스[인덱스];
                }
                catch { }
                return 뽑기문자;
            }

            #region IDisposable 멤버

            public void Dispose()
            {
                문자히스토리.Clear();
                중복문자.Clear();
                중복문자 = null;
                문자히스토리 = null;
            }

            #endregion
        }


        private void button1_Click(object sender, EventArgs e)
        {
            using (중복문자제거 cc = new 중복문자제거(2))
            {
                this.textBox1.Text = cc.실행(this.textBox1.Text);
            }
        }
    }