public class Program
{
    public static void Main()
    {
        DateMN nm = new DateMN();
        nm.running();
    }
}
public class DateMN
{
    DateTime now;
    string manualDT = "20230901070000";
    double rate = 0.0586;
    int middle_pay = 95000000;
    double rate_sum = 1300000;

    public void running()
    {
        int kk = 0;
        now = DateTime.ParseExact(manualDT, "yyyyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);

        while(true)
        {
            DateTime manual = now.AddDays(kk);
            if("2023-12-15" == manual.ToString().Substring(0,4+2+2+2)) middle_pay = middle_pay + 60000000;
            rate_sum = rate_sum + rate * middle_pay / 365.0;

            kk++;
            Console.WriteLine("[" + kk.ToString("0000") + "]" + manual.ToString() + "/" + middle_pay + "/" + rate_sum);

            if(kk > 200) break;
        }
    }
}



/*
람다식 문법 : (입력 파라미터) => { 실행문장 블럭 };

C# 3.0부터 지원하는 => 연산자는 C#에서 람다식(Lambda Expression)을 표현할 때 사용한다. 
람다식은 무명 메서드와 비슷하게 무명 함수(anonymous function)를 표현하는데 사용된다. 
람다식은 아래와 같이 입력 파라미터(0개 ~ N개)를 => 연산자 왼쪽에, 실행 문장들을 => 연산자 오른쪽에 둔다.
*/

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        Func<int, int> DoubleFunc = (num) => num * 2;

        int nummmm = 10;
        Console.WriteLine(DoubleFunc(nummmm));         
    }
}

/* 원본과 위는 람다식표현으로 바꾼,ㅡㅡㅡㅡ
class Program
{
    static int DoubleFunc(int num)
    {
        return num * 2;
    }
    static void Main(string[] args)
    {
        Console.WriteLine(DoubleFunc(10));
    }
}
*/



/*
public int CompareTo (Version? value);

매개 변수
현재 Version 개체와 비교할 Version 개체이거나, null입니다.

반환 값 의미
0보다 작음 현재 Version 개체가 value 이전의 버전입니다.
0 현재 Version 개체가 value와 같은 버전입니다.
0보다 큼 현재 Version 개체가 value 이후의 버전이거나 value이 null입니다.
*/
/*
설명

이 메서드는 인터페이스를 System.IComparable<T> 구현하고 매개 변수의 받은 편지함을 value 해제할 필요가 없으므로 메서드보다 CompareTo 약간 더 잘 수행합니다.
중요도를 줄이는 의 구성 요소는 Version 주, 부, 빌드 및 수정입니다. 
알 수 없는 구성 요소는 알려진 구성 요소보다 오래된 것으로 간주됩니다. 
예를 들면 다음과 같습니다.

버전 1.1은 버전 1.1.0보다 이전 버전입니다.
버전 1.1은 버전 1.1.1보다 이전 버전입니다.
버전 1.1은 버전 1.1.2.3보다 이전 버전입니다.
버전 1.1.2는 버전 1.1.2.4보다 이전 버전입니다.
버전 1.2.5는 버전 1.2.3.4보다 최신 버전입니다.
*/

using System;

class Program
{
    public static void Main()
    {
        VersionManage nm = new VersionManage();
nm.running();
    }
}
class VersionManage
{
    public void running()
    {
        Version serverVersion = new Version("23.06.07.01");
        Version localVersion = new Version("10.1.20");

if (serverVersion.CompareTo((object)localVersion) > 0)
{
    Console.WriteLine("UPDATE NEEDED!!");
}
else
{
    Console.WriteLine("SAME!!");
}
    }
}

/*
C:\Users\xterm\Downloads>aa12
UPDATE NEEDED!!
*/

    

APMFileDownLoadDlg.cpp
0.03MB
APMFileDownLoad.cpp
0.00MB
MM.cs
0.00MB


/*
텍스트파일을 모두 대문자로 바꾸어서 문자열을 찾을때에,ㅡㅡㅡㅡㅡㅡ
*/


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.ComponentModel;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Timers;
using System.Diagnostics;
using System.Xml.XPath;
using System.Reflection;
using System.Collections;
using System.Xml;
using System.IO;
using System.Net;


class Program
{
    public static void Main()
    {
        MMMMMMMM nm = new MMMMMMMM();
nm.running();
    }
}
class MMMMMMMM
{    
    void ____read_txt(string filename)
    {
        int kk, ii;
        string mmmText = "";
        string mmmsubText = "";
        string ____findStr = "SERVERINFO.XML";

        mmmText = Syste m.IO.File.ReadAllText(filename); 
        mmmText = mmmText.ToUpper();
        Console.WriteLine(mmmText);
    }
    public void running()
    {
        int kk;

        string folderName = Syste m.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); 
        string[] files = Directory.GetFiles(folderName, "*", SearchOption.AllDirectories);

        for(kk=0; kk<files.Length; kk++)
        {
            Console.WriteLine(files[kk]);

            if(files[kk].IndexOf(".cpp") >=0)
            {
                ____read_txt(files[kk]);
            }
        }
    }
}




/*
기존에 사용해왔던 방식대로, 구조체를 구성한다면, 아무런 문제없이 변수를 사용할수 있다.
즉 public만 사용해서, 코드를 구상한다고 생각하면, 기존처럼 코딩해도 아무런 문제가 없음,,,,,,,,,,,
그러나, 변수에 직접접근을 허락하지 않게 하려면, private, public의 기법을 사용해서 아래와 같이 접근할수 있다. 
*/

/*
private, public을 사용하면 좋은예제는, 
주식에서 삼성전자 현재가격을 내부  private 변수에 세팅하고, public 변수를 통해서 삼성전자현재 가격을 얻는다면
아주좋은 케이스일것 같다.
삼성전자현재가 가격은 마음대로 누구나가 셋팅할수 없는 변수라고 생각하면 된다.
웹페이지등에서 조회시에 public 변수로 조회하면 적당할듯하다.
*/

namespace TailCommon{
public class StockHyunPriceSearch
{
    private static StockHyunPriceSearch hyun;
    private StockHyunPriceSearch() { }
    public static StockHyunPriceSearch GetInstance
    {
        get
        {
            if (hyun == null)
            hyun = new StockHyunPriceSearch();
            return hyun;
        }
    }
    private IntPtr hyunValue;
    public IntPtr HyunValue
    {
        get { return hyunValue; }
    }
    public IntPtr SecurityNeededHyunValue
    {
        set { hyunValue = value; }
    }
}}

ex)
using namespace & DLL참조를해서 사용시에, 아래와 같은 코드는 허용될까(?),  곰곰히 한번 생각해보자.

using TailCommon;

TAILMemory.GetInstance.tailHandle = 10; (?)
Console.WriteLine(TAILMemory.GetInstance.tailHandle); (?)

/*
값의 입력은 private로
값의 조회는 public 으로,ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
*/



Remove item from Dropdownitems in a context menustrip(?)

void DeleteItem()
{
    foreach (ToolStripItem oSubitem in ListMenuItem.DropDownItems)
    {
        if (oSubitem is ToolStripMenuItem)
        {
            if (oSubitem.Text.StartsWith("Show"))
            {
                ListMenuItem.DropDownItems.RemoveAt(1);
            }
       }
   }
}

//Specific.FILE. 1 Line.Read & 1 Line Append Write,,,,,,


using System;
using System.IO;
using System.Text;

class Program
{
    public static void Main(string[] args)
    {
        if(args.Length == 1) 
        {
            RadioFileManage nm = new RadioFileManage();
            nm.open_radio_music(args[0]);
         }
    }
}       
class RadioFileManage
{
    public void open_radio_music(string fileName)
    {
            if (File.Exists(fileName))
            {
                using (StreamReader reader = new StreamReader(fileName, Encoding.Default))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        int kk = line.IndexOf("2부");
                        if( !( kk >= 0))
                        {
                            if (true)
                            {
                            string ____path = @"default_" + fileName;
                            using (StreamWriter sw = File.AppendText(____path))
                            {
                                sw.WriteLine(line);
                            }
                       }
                }
            }
        }
    }
}

/*
csc.exe 사용하기. 옵션포함
*/

-----,----,---- 왠만한건,다 된다.
ex)csc.exe /reference:APMPublicLib.DLL,Newtonsoft.Json.Net20.DLL /out:GoodMorning.exe /recurse:*.cs
ex)csc.exe /reference:APMPublicLib.DLL,Newtonsoft.Json.Net20.DLL /out:GoodMorning.exe /recurse:*.cs
ex)csc.exe /reference:APMPublicLib.DLL,Newtonsoft.Json.Net20.DLL /out:GoodMorning.exe /recurse:*.cs
ex)csc.exe /reference:APMPublicLib.DLL,Newtonsoft.Json.Net20.DLL /out:GoodMorning.exe /recurse:*.cs
ex)csc.exe /reference:APMPublicLib.DLL,Newtonsoft.Json.Net20.DLL /out:GoodMorning.exe /recurse:*.cs

우선 c# 컴파일러의 주요 옵션들에 대해 알아보자.

입력 플래그 정의
/recurse 프로젝트의 하위 디렉터리 구조에 있는 C# 파일을 컴파일하도록 csc.exe에 알린다.
이 플래그는 와일드카드 구문을 지원한다.
/reference (/r) 현재 컴파일에서 참조할 외부 어셈블리를 지정하는 데 사용된다.
/addmodule 다중 파일 어셈블리에 포함할 모듈을 지정하는 데 사용된다.

[ 1]c# 컴파일러 입력 옵션

출력 플래그 정의
/out 생성할 어셈블리 이름을 지정한다. 이 플래그를 생략하면 출력 파일 이름은 *.dll 어셈블리의 경우에는 초기 입력 파일 이름을 기반으로, *.exe 어셈블리의 경우에는 Main() 메서드를 정의하는 클래스를 기반으로 지정된다.
/target (/t) 만들 어셈블리의 파일 형식을 지정한다.
/doc XML 문서 파일을 생성하는 데 사용된다.
/delaysign 강력한 이름의 서명 연기를 사용하여 어셈블리를 빌드할 수 있도록 한다.
/keyfile 어셈블리에 강력한 이름을 지정하는 데 사용되는 *.snk 파일 경로를 지정한다.

+ Recent posts