d

location.href 와 같은 명령어 사용시 뒤에 return false; 문을 붙여줘야 한다.

 

onclick="myLocationFunction()" 라는식으로 함수를 이용해 사용 했었다면

 

onclick="myLocationFunction(); return false;" 라고 사용해야 잘 먹힌다.

 

return 구문이 없을 경우 더블클릭을 해야만 작동이 되는 등의 오류가 생길 수 있다.

블로그 이미지

_Able

,

[C#] 서버 상태 체크

C# 2016. 8. 31. 08:42

서버가 살아 있나 죽어 있나를 확인해볼 수 있는 소스

 

 

 

'C#' 카테고리의 다른 글

[Windows Service] 디버깅  (0) 2016.08.05
[Windows Service] 파일 읽기  (0) 2016.07.14
[C#] 파일 경로  (0) 2016.07.14
[C#] ini 파일 모든 섹션 & 키 값 읽기  (0) 2016.07.08
[C#] DataGridView 크기 조절  (0) 2016.07.08
블로그 이미지

_Able

,

[Windows Service] 디버깅

C# 2016. 8. 5. 13:28

윈도우 서비스를 개발할 때 디버깅을 할 수 있는 방법

 

1. System.Diagnostics.Debugger.Launch()

 

프로그램을 돌다가 해당 구문을 만나면 Visual Stuido 와 연결되어 디버깅 모드로 진입할 수가 있다. 주의할 점은 서비스를 설치할 때의 소스와 디버그 모드에 진입할 때의 소스는 서로 동일해야 하며 수정되지 않은 상태이어야 한다.

 

원하는 지점에 해당 구문을 넣은 채로 서비스를 빌드 하고 설치하여 실행 시킨다면 디버그 모드에 진입할 수가 있다.

 

 

 

2. 디버그 모드 - 프로세스 연결

 

해당 기능은 Visual Studio 에서 제공되는 기능으로 다른 곳에서 제공 해주는지는 모르겠다. 위 방법과 마찬가지로 소스는 수정되지 않은 상태에서 서비스가 오류가 나지 않고 잘 돌아간다면 VS 에서 연결이 가능하다.

 

 

 

 

위와 같이 프로세스 목록이 뜨며 연결을 누르면 디버그모드에 진입 한다.

'C#' 카테고리의 다른 글

[C#] 서버 상태 체크  (0) 2016.08.31
[Windows Service] 파일 읽기  (0) 2016.07.14
[C#] 파일 경로  (0) 2016.07.14
[C#] ini 파일 모든 섹션 & 키 값 읽기  (0) 2016.07.08
[C#] DataGridView 크기 조절  (0) 2016.07.08
블로그 이미지

_Able

,

ASP 에서 콤보박스를 만든 후 선택된 인덱스 값을 이용하여 동작을 하고싶을 때가 있다. 그럴 경우 먼저 콤보박스를 선언한 곳에

이 명령어들을 추가시켜 주면 된다.

 

 

OnselectedIndexChanged 명령어는 콤보박스의 인덱스가 바뀌는 이벤트가 발생 했을 때 뒤에 나오는 함수를 실행시키라는 명령어 이다. 이를 이용하여 우리는 콤보박스의 이벤트 처리를 C# 에서 다룰 수 있다.

 

함수 부분은 .aspx.cs 부분에 선언하여 사용 할 수 있다. 가장 기본이 되는 구조는

 

 

이런 식으로 사용 할 수 있다.

 

콤보박스의 선택된 인덱스의 Value 값을 가져오는 간단한 소스이다.

 

 

이렇게 하면 선택된 값을 가져와서 이를 이용하여 프로그래머가 원하는 동작을 취할 수 있다.

블로그 이미지

_Able

,

[Windows Service] 파일 읽기

C# 2016. 7. 14. 14:18

Window Service를 작성할 때는 C# 에서 파일 읽기 와는 약간 다른 AppDomain.CurrentDomain.BaseDirectory 함수가 존재 한다. 

 

의미는 약간 다른데 실행파일의 위치라는 의미 보다 윈도우 서비스 파일이 설치된 디렉토리를 의미 한다는게 더 정확한 표현이다.

 

설치되는 디렉토리에 읽기 원하는 파일을 넣어 두고 파일을 읽으면 잘 돌아간다.

 

TIP. 설치 프로젝트에 읽을 파일을 추가 시켜 놓으면 같이 설치된다.

'C#' 카테고리의 다른 글

[C#] 서버 상태 체크  (0) 2016.08.31
[Windows Service] 디버깅  (0) 2016.08.05
[C#] 파일 경로  (0) 2016.07.14
[C#] ini 파일 모든 섹션 & 키 값 읽기  (0) 2016.07.08
[C#] DataGridView 크기 조절  (0) 2016.07.08
블로그 이미지

_Able

,

[C#] 파일 경로

C# 2016. 7. 14. 13:59

C# 에서 파일경로를 설정할 때 쓰이는 명렁어가 있다. 절대경로를 이용하여 파일을 읽을 수도 있지만 파일의 위치는 컴퓨터마다 다르므로 올바른 방법은 아니다.

 

Application.StartupPath 명령어는 응용프로그램이 실행되는 위치의 경로를 반환한다.

 

 

이렇게 작성한 다음 읽으려는 파일을 응용프로그램이 있는 디렉토리에 같이 놔두면 잘 읽힌다.

 

'C#' 카테고리의 다른 글

[C#] 서버 상태 체크  (0) 2016.08.31
[Windows Service] 디버깅  (0) 2016.08.05
[Windows Service] 파일 읽기  (0) 2016.07.14
[C#] ini 파일 모든 섹션 & 키 값 읽기  (0) 2016.07.08
[C#] DataGridView 크기 조절  (0) 2016.07.08
블로그 이미지

_Able

,

문제

특정 메시지를 암호화 하는 방법은 오랫 동안 다양하게 연구되었다.

그러한 방법들 중에서 가장 간단한 방법을 생각해보자.

특정 문자열을 입력받는다. 편의상 문자열에 공백은 없으며, 영문 대소문자가 입력으로 들어온다. 그러한 다음 문자열의 각 문자에 맨 왼쪽부터 하나씩 0, 1, 2, 3, ... 과 같이 번호를 매긴다.

만약 암호화 하려고 하는 문자열이 `HelloWorld' 가 들어왔을 경우, 다음과 같이 번호가 붙게 된다.

0 1 2 3 4 5 6 7 8 9
H e l l o W o r l d

그 다음 짝수 번호(2로 나눠 떨어지는 숫자, 0도 짝수에 포함한다.) 가 붙은 문자들을 번호가 빠른 순으로 다음과 같이 붙이고, 그 다음 홀수 번호가 가 붙은 문자들을 번호가 빠른 순으로 그 뒤에붙인다. 위의 `HelloWorld'에 적용할 경우 결과는 다음과 같다.

HloolelWrd

문자열을 입력받은 다음, 위에 소개한 암호화를 수행하는 프로그램을 작성하라.

 

입력

입력의 첫번째 줄에는 테스트 케이스의 개수 T(1<=T<= 10)이 입력된다.

그 다음 줄 부터 T개의 줄에는 암호화를 하고자 하는 문자열이 입력된다. 문자열에는 공백이 포함되지 않으며, 문자열의 길이는 100자를 넘지 않는다.

 

출력

각 테스트 케이스의 순서대로 문자열을 암호화 한 결과를 한줄에 하나씩 출력한다.

 

예제 입력

2
A
HelloWorld

예제 출력

A
HloolelWrd

어렵지 않게 풀어낼 수 있는 문제입니다. 문제에 나와 있는 대로 생각하여 풀 수도 있으나 좀 더 간소화 할 수 있는 방법으로 풀어봤습니다.

 

문자열을 받아서 짝수 인덱스를 출력하고, 홀수 인덱스를 출력하면 올바른 출력이 나옵니다.

 

문자열은 문자열 마지막에 '\0'이 입력됨으로 써 문자열의 끝을 알 수 있습니다. 따라서 주의해야 할 점은 문자열의 최대 길이가 100인 경우 101 자리에 '\0' 을 가져야 하므로 명시된 최대 길이 + 1 이상으로 잡아 두셔야 올바른 코딩이 가능합니다.

 

 

대체적으로 비슷한 형태 였으나 독특한 소스가 있어 한번 살펴보았습니다.

 

256 크기의 배열을 하나 만든 다음 포인터 char 형 변수 e, o 를 만들어 짝수와 홀수의 문자를 출력하기 위한 위치를 잡아뒀네요.

 

짝수의 이진수는 첫 자리가 0 이고 홀수는 1 인 것에 감안해서 i & 1 로 짝수와 홀수를 구분하였습니다. 그렇게 해서 짝수와 홀수를 구분하여 문자열을 집어 넣고 최종적으로 출력을 하였습니다.

'알고리즘 > Algospot' 카테고리의 다른 글

튜토리얼 [LECTURE]  (0) 2016.07.08
블로그 이미지

_Able

,

문제

Professor Lew teaches Algorithm course in Sonyusi University (소녀시대학교).
It is his first year as a professor, so he spends a lot of time making lecture notes.
He'll teach recursion and sorting algorithms in the next class,
and he wants to make some examples which will be included in his lecture note.

While making some examples for his lecture note, he noticed that one of his work was quite difficult.
The example was for sorting a string, and the exact process was as follows:
First, the original string of length 2n is divided into n substrings, each of length 2.
Then sort the n strings in lexicographic order, and then concatenate them to obtain the result string.
Note that the sorting process will be performed on n strings, but not each of the n strings.
The following example illustrates the process:


abbaaccb → ab ba ac cb → ab < ac < ba < cb → abacbacb

Since the process was quite confusing,

 

professor Lew decides to use a computer program for verification.
Given an alphabetic string of even length, write a program that prints the result of the sorting process.

 

입력

The first line of the input contains one integer T, the number of test cases.

The first line of each test case contains a string. The length of the string will not exceed 1000, and will only contain lowercase alphabet letters.

 

출력

For each test case, print the result in one line.

 

예제 입력

4
abbaaccb
dddcccbbbaaa
geegeegeegeebabybabybaby
oh

예제 출력

abacbacb
aababbccdcdd
babababybybyeeeeegeggege
oh


2n 의 길이를 갖는 문자열을 입력 받아 정렬하는 문제 입니다. 문제에 나와 있는 예제대로

 

abbaaccb → ab ba ac cb → ab < ac < ba < cb → abacbacb

 

2자리 씩 나눠서 앞자리 순으로 정렬 후 같은 알파벳 끼리 뒷자리를 기준으로 정렬합니다. 저는 가장 간단하고 많은 분들이 생각 해보셨을 것 같은 버블정렬을 이용하여 문제를 풀었습니다. 먼저 앞자리 알파벳으로 버블정렬 수행 후, 같은 자리 끼리 뒷자리 알파벳을 비교하여 정렬을 수행 했습니다.

 

 

가장 빠른 처리속도 분들의 소스를 봐보니 기수정렬을 이용해서 풀었더군요. 버블정렬보다 훨씬 간단하고 빨라 보입니다. 

 

혹시 기수정렬에 대해 모르시는 분들을 위해 간단하게 말씀드리고 자세한 내용은 따로 올리도록 할게요.

 

 

 

다른 분들의 소스 중 하나를 살펴볼게요.

 

 

먼저 첫 포문에서 cnt 배열을 초기화 하는데 이는 알파벳을 체크하기 위한 배열로 보입니다. 배열의 크기가 32인 이유는 잘 모르겠네요...

 

while문에서 해당하는 알파벳의 카운트를 해줍니다. 인덱스 값으로 -97을 해주는데 이는 ASCII 코드에 나오는 알파벳들의 값을 인덱스로 하여 집어넣어 주기 위합입니다.

 

예를 들어 소문자 a 는 10진수로 97이라는 값을 갖습니다. -97 을 모든 알파벳에 적용한다면 인덱스 0 의 자리 부터 a b c . . . 순으로 인덱스 값을 갖게 되겟죠.

 

다음으로 나오는 for문에서는 알파벳의 정렬 순서와 알파벳 위치를 설정하는 구문입니다.

 

전체적인 포문이 d = 1 , 0 순으로 실행됩니다. 이는 2자리 씩 끈은 알파벳 자리에서 뒷 자리 부터 비교하겠다는 의미가 됩니다.

 

dcba 라는 문자열을 입력 했을 경우 cnt배열은

 

첫번째로 c 와 a 를 비교하여

01122222... 라는 숫자 열을 갖게 됩니다.

 

여기서 0 1 2 라는 숫자는 각 알파벳이 표시되어야 하는 순서와 표시될 위치를 의미하죠.

0 1 1 2 2 2 2..

   a    c

순으로 표시 정보를 의미합니다.

 

두번째로 d b 를 비교하여

00112222... 라는 열이 나오고

위와 마찬가지의 정보를 가집니다.

 

각 cnt 배열 정보값을 이용하여 마지막 구문에서 표시를 해주면 정렬된 문자열이 표시됩니다.

'알고리즘 > Algospot' 카테고리의 다른 글

튜토리얼 [ENCRYPT]  (0) 2016.07.11
블로그 이미지

_Able

,

ini 파일 안의 모든 section 값과 해당하는 section의 모든 key 값을 한번에 가져오기 위한 소스

 

Form 클래스 안에

 

        [DllImport("kernel32")]
        static extern int GetPrivateProfileString(string Section, string Key,
               string Value, StringBuilder Result, int Size, string FileName);

     
        [DllImport("kernel32")]
        static extern int GetPrivateProfileString(string Section, int Key,
               string Value, [MarshalAs(UnmanagedType.LPArray)] byte[] Result,
               int Size, string FileName);


        [DllImport("kernel32")]
        static extern int GetPrivateProfileString(int Section, string Key,
               string Value, [MarshalAs(UnmanagedType.LPArray)] byte[] Result,
               int Size, string FileName);

 

        public string path;

 

        public string[] GetSectionNames()  // ini 파일 안의 모든 section 이름 가져오기
        {
            for (int maxsize = 500; true; maxsize *= 2)
            {
                byte[] bytes = new byte[maxsize];
                int size = GetPrivateProfileString(0, "", "", bytes, maxsize, path);

            
                if (size < maxsize - 2)
                {
                    string Selected = Encoding.ASCII.GetString(bytes, 0, size - (size > 0 ? 1 : 0));
                    return Selected.Split(new char[] { '\0' });
                }
            }
        }  

 

        public string[] GetEntryNames(string section)   // 해당 section 안의 모든 키 값 가져오기
        {
            for (int maxsize = 500; true; maxsize *= 2)
            {
                byte[] bytes = new byte[maxsize];
                int size = GetPrivateProfileString(section, 0, "", bytes, maxsize, path);

                if (size < maxsize - 2)
                {
                    string entries = Encoding.ASCII.GetString(bytes, 0, size - (size > 0 ? 1 : 0));
                    return entries.Split(new char[] { '\0' });
                }
            }
        }  

'C#' 카테고리의 다른 글

[C#] 서버 상태 체크  (0) 2016.08.31
[Windows Service] 디버깅  (0) 2016.08.05
[Windows Service] 파일 읽기  (0) 2016.07.14
[C#] 파일 경로  (0) 2016.07.14
[C#] DataGridView 크기 조절  (0) 2016.07.08
블로그 이미지

_Able

,

DataGridView 를 DataTable 크기에 맞춰 조정 하고 싶을 때

 

dataGridView.Height = dataGridView.Rows.GetRowsHeight(DataGridViewElementStates.None) + dataGridView.ColumnHeadersHeight + 2;

dataGridView.Width = dataGridView.Columns.GetColumnsWidth(DataGridViewElementStates.None) + dataGridView.RowHeadersWidth + 2;

'C#' 카테고리의 다른 글

[C#] 서버 상태 체크  (0) 2016.08.31
[Windows Service] 디버깅  (0) 2016.08.05
[Windows Service] 파일 읽기  (0) 2016.07.14
[C#] 파일 경로  (0) 2016.07.14
[C#] ini 파일 모든 섹션 & 키 값 읽기  (0) 2016.07.08
블로그 이미지

_Able

,