Пример #1
0
 /// <summary>
 /// thread run 메인
 /// </summary>
 /// <param name="fileWriter"></param>
 /// <param name="srcString"></param>
 /// <param name="delimiter"></param>
 /// <param name="fieldNumber"></param>
 private void RealStart(MyClass_Files_Writer fileWriter, string srcString, char delimiter, int fieldNumber)
 {
     MyClass_Strings strClass = new MyClass_Strings();
     // convert and write to file
     string convertedStr = strClass.convertStringMsg(srcString, delimiter, fieldNumber);
     {
         //  file.WriteLine(convertedStr);
         fileWriter.WriteToFile(convertedStr); // thread safty한 file writer...
         //System.IO.File.AppendAllText(filePath, convertedStr);
     }
 }
Пример #2
0
        public void MyClass_Parse_And_Report4(string inputLog, string outputTxt)
        {
            // log 포맷 시간(19)#타입(2)#메시지코드(9)
            // 입력받은 text log 파일을 열어, #으로 split 한 후 각 type 별로 분리하고 카운팅한 결과를 output text에 저장
            MyClass_Files_Reader srcFile  = new MyClass_Files_Reader(inputLog);
            MyClass_Strings      strClass = new MyClass_Strings();
            string res = srcFile.readLine();             // 1 line read

            string[] line = srcFile.readLines(inputLog); // read all lines
            int      num  = line.Count();                // total count

#if DEBUG_PRINT_ENABLE
            MyClass_Dprint.debugPrint("read lines:" + num);
#endif
            int            typeCount = strClass.countingAllTypes(line, delimiter, 1);
            string[]       logTypes  = strClass.getAllTypes(line, delimiter, 1);
            MyClass_Thread myThread  = new MyClass_Thread();
            // Example #4: Append new text to an existing file.
            // The using statement automatically flushes AND CLOSES the stream and calls
            // IDisposable.Dispose on the stream object.
            using (System.IO.StreamWriter outFile = new System.IO.StreamWriter(outputTxt, false))
            {
                foreach (string s in logTypes)
                {
                    //string[] data = strClass.StringSplit(s, delimiter);
                    int cnt = strClass.getCountOfType(line, delimiter, 1, s);
                    // 타입별 출력 파일 생성
                    MyClass_Files_Writer fileWriter = new MyClass_Files_Writer("TYPELOG_4_" + s + ".TXT");
                    // file writer 클래스에 thread safty하도록 lock 추가. (여러 thread에서 동시에 write의 경우 처리)


                    string[] strResult = strClass.getLinesOfType(line, delimiter, 1, s);// 입력된 타입에 해당되는 로그 만 추출한다.
                    foreach (string _line in strResult)
                    {
                        // 이부분 multi thread로 바꾼다.
#if DEBUG_PRINT_ENABLE
                        MyClass_Dprint.debugPrint("type: " + s);
                        MyClass_Dprint.debugPrint("line: " + _line);
#endif
                        myThread.StartConvertAndWrite(fileWriter, _line, delimiter, 2);
                    }
#if DEBUG_PRINT_ENABLE
                    MyClass_Dprint.debugPrint("type:" + s + " total num:" + cnt);
#endif
                    outFile.WriteLine(s + "#" + cnt);
                }
            }
        }
Пример #3
0
 //private var semaphore = new System.Threading.Semaphore(this.max_thread, this.max_thread);
 public void StartConvertAndWrite(MyClass_Files_Writer fileWriter, string srcString, char delimiter, int fieldNumber)
 {
     System.Threading.ThreadPool.QueueUserWorkItem((state) =>
     {
         semaphore.WaitOne(); // 세마포어 wait
         try
         {
             //DownloadItem(item);
             var t = new System.Threading.Thread(() => RealStart(fileWriter, srcString, delimiter, fieldNumber));
             t.Start();
             //return t;
         }
         finally
         {
             semaphore.Release(); // 세마포어 end
         }
     });
 }
Пример #4
0
        //@ 심벌을 문자열 앞에 사용하면, 해당 문자열 안의 Escape 문자를 무시하고 문자 그대로 인식하도록 한다.
        //예를 들어, 파일 패스를 지정할 때, Backslash를 한번 지정하면 이는 Escape문자로 인식되기 때문에 2개의 Backslash를를 사용하게 되는데,
        //@ 심벌을 문자열 시작 부호전에 사용하면, Backslash를를 그대로 Backslash를로 인식하게 한다.
        public void run_Test()
        {
            MyClass_Math.testClass();
            Myclass_listData.testClass();
            //MyClass_ScanDirs.testClass();
            string        path = Directory.GetCurrentDirectory();
            StringBuilder sb   = new StringBuilder(path);

            sb.Append("\\dll_test.dll");
            MyClass_CallDll.testClass(sb.ToString());
#if false
            // 도서관리 sample
            MyClass_BookManager bm = new MyClass_BookManager();
            bm.Run();
#endif
#if false
            // 100의 bitcoins 전송 sample //
            List <MyClassBlockChain> blockchain = new List <MyClassBlockChain>();
            // Genesis block
            string[] transactions = { "Jone Sent 100 Bitcoins to Bob." };
            // 최초 노드 : genesisBlock
            myClassBlockChainHeader blockheader  = new myClassBlockChainHeader(null, transactions);
            MyClassBlockChain       genesisBlock = new MyClassBlockChain(blockheader, transactions);
            Console.WriteLine("Block Hash : {0}", genesisBlock.getBlockHash());

            Stopwatch         stopw         = new Stopwatch();//시간 측정 클래스
            MyClassBlockChain previousBlock = genesisBlock;
            for (int i = 0; i < 5; i++)
            {
                myClassBlockChainHeader secondBlockheader = new myClassBlockChainHeader(Encoding.UTF8.GetBytes(previousBlock.getBlockHash()), transactions);
                MyClassBlockChain       nextBlock         = new MyClassBlockChain(secondBlockheader, transactions);
                stopw.Start();
                int count = secondBlockheader.ProofOfWorkCount();
                stopw.Stop();
                Console.WriteLine("{0} th Block Hash : {1}", i.ToString(), nextBlock.getBlockHash());
                Console.WriteLine("   └ COUNT of Proof of Work : {0} th loop", count);
                Console.WriteLine("   └ Delay : {0} millisecond", stopw.ElapsedMilliseconds);
                previousBlock = nextBlock;
                stopw.Reset();
            }
#endif

            //중복되지 않는 첫번째 문자 구하기 // dictionary 사용
            string s  = "abcabdefe";
            char   ch = MyClass_Strings.GetFirstChar(s.ToCharArray());
            Debug.WriteLine(ch);
            MyClass_Strings.testClass();


            // recursive하게 sub folder에서 유일한 file 찾기 예
            string fullPath = MyClass_Files.findFileFromSubFolder(".", "test.txt");

            // 스트링내 캐릭터 조합 비교 예
            string res  = string.Empty;
            int    ress = MyClass_Strings.checkCharsInString("coffee", "fofeefac", ref res);

            // 라인브레이크 사용자설정 예  // append mode on/off 예
            MyClass_Files_Writer fileWriter = new MyClass_Files_Writer("fileWrite.TXT", false);
            fileWriter.customNewLine = "\r\n";
            fileWriter.WriteToFile("asdfasdfasdfasdf");
            fileWriter.WriteToFile("asdfasdfasdfasdf");
            fileWriter.WriteToFile("asdfasdfasdfasdf");
            // 소스의 라인브레이크 디텍션 예
            MyClass_Files_Reader reader = new MyClass_Files_Reader("fileWrite.TXT");
            string getNewLineChar       = reader.getNewLine(); // newLine 형식 읽어와서 file writer의 customNewLine에도 맞춰주면 된다.

            // 암호화 예
            string str_test  = "3#ABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string str_Enc   = MyClass_Security.CaesarCipherEncrypt(str_test, 20);
            string str_test2 = "21#abcdefghijklmnopqrstuvwxyz";
            string str_Enc2  = MyClass_Security.CaesarCipherEncrypt(str_test2, 20);

            //


            // 메서드로 바꿀것
            // ABC 부품을 갖고 A7 B7 C7이 순서대로 오면 제품 조립 ok
            // 총 완성 제품 counting
            string str_Product_struct   = "A2B3A7B7C7B2C7A9B4A9B8C7A2B7C9";
            char[] array_Product_struct = str_Product_struct.ToCharArray();
            int    status            = 0; //1:A ok, 2:B ok, 3:C ok
            int    totalProductCount = 0;
            for (int i = 0; i < array_Product_struct.Length; i = i + 2)
            {
                string num = string.Empty;
                num += array_Product_struct[i + 1];
                int part_count = Convert.ToInt32(num);
                //int level2 = Convert.ToInt32("-1024");
                //int level = (int)Char.GetNumericValue(array_Product_struct[i + 1]);//Convert.ToInt32(array_Product_struct[i + 1]);
                if (array_Product_struct[i] == 'A')
                {
                    if (part_count >= 7)
                    {
                        status = 1;
                    }
                    else
                    {
                        status = 0;
                    }
                }
                if (array_Product_struct[i] == 'B' && status == 1)
                {
                    if (part_count >= 7)
                    {
                        status = 2;
                    }
                    else
                    {
                        status = 0;
                    }
                }
                if (array_Product_struct[i] == 'C' && status == 2)
                {
                    if (part_count >= 7)
                    {
                        //status = 3;
                        // count up
                        status = 0;
                        totalProductCount++;
                    }
                    else
                    {
                        status = 0;
                    }
                }
            }
            Debug.WriteLine("totalProductCount: " + totalProductCount);

            // 구조체 타입 list의 정렬 예
            //MyClass_list_sort<int> lSortTest = new MyClass_list_sort<int>();
            MyClass_list_sort.test();
            //MyClass_array_sort sortTest = new MyClass_array_sort();
            MyClass_array_sort.test();

            // 헤시맵을 이용한 정렬 TODO
            MyClass_hashMap hashTest = new MyClass_hashMap();  // TODO...
            hashTest.test();

            // 링크드리스트 사용 예
            //MyClass_linkedList list = new MyClass_linkedList();
            MyClass_linkedList.test();

            // 동전바꿈 예
            MyClass_coinChangeCount cnt = new MyClass_coinChangeCount();
            cnt.Test();


            // MyClass_Parse_Log parse = new MyClass_Parse_Log('#'); // delimitor
            // 문제 sample //
            // parse.MyClass_Parse_And_Report1("LOGFILE_A.TXT", "REPORT_1.TXT");            // 문제 2
            // parse.MyClass_Parse_And_Report2("LOGFILE_B.TXT", "REPORT_2.TXT");
            //parse.MyClass_Parse_And_Report3("LOGFILE_B.TXT", "REPORT_3.TXT");
            //parse.MyClass_Parse_And_Report4("LOGFILE_B.TXT", "REPORT_4.TXT");


            // 암호/복호화 sample //
            String originalText = "plain text";
            String key          = "key";
            String en           = MyClass_Security.Encrypt(originalText, key);
            String de           = MyClass_Security.Decrypt(en, key);
            Debug.WriteLine("Original Text is " + originalText);
            Debug.WriteLine("Encrypted Text is " + en);
            Debug.WriteLine("Decrypted Text is " + de);
            MyClass_Networks.StartServerWithThread();
            //string testSend = MyClass_Networks.StartClientSync("1111111");
            string testSend2 = MyClass_Networks.StartClientSync("send data 111111 ", false);
            //testSend2 = MyClass_Networks.StartClientSync("222222 ", false);
            testSend2 = MyClass_Networks.StartClientSync("test <EOF>", true);
            // Debug.WriteLine("start StartAsyncClient");
            //MyClass_Networks.StartAsyncClient("test <EOF>");
            //MyClass_Networks.StartAsyncClient("<EOF>");
            Debug.WriteLine("abort socket server thread");

            MyClass_Networks.StopServerWithThread();

            // 폴더 스캔 샘플 //
            MyClass_Files.TreeScan(".\\..");
            // 지정한 확장자를 가진 파일을 폴더내에서 찾아 list로 update
            string[] resultt = MyClass_Files.scanFolderAndUpdate_Filelists(".", "cs");

            // 로그파일 쓰기 예 //
            MyClass_Logger log = new MyClass_Logger("restLog.txt");
            log.WriteEntry("TTTTTTTTTTTTTTTTTTTTTTTTT");

            // 링버퍼 샘플 //
            MyClass_RandomData rndData = new MyClass_RandomData();
            rndData.rnd = new Random();                          // random 초기화..
            var data = rndData.GenerateRandomData(10);           // 100개의 random 데이터 생성
            // MyClass_CircularBuffer<타입>(갯수)
            var buffer = new MyClass_CircularBuffer <byte>(100); // 링버퍼 생성
            buffer.Put(data);                                    // 10 byte push
            data = rndData.GenerateRandomData(10);
            buffer.Put(data);
            //TestTools.UnitTesting.CollectionAssert.AreEqual(data, buffer.ToArray());
            var ret = new byte[10]; //[buffer.Size];
            buffer.Get(ret);
            buffer.Get(ret);        // buffer size만큼 get

            //CollectionAssert.AreEqual(data, ret);
            //Assert.IsTrue(buffer.Size == 0);

            int test = 2;
        }