C# 숫자를 한글로 변환, 문자열을 정수로 변환, 문자열안 리턴값 추출, 한글문자열 길이 등 문자열 함수
숫자를 한글 문자열로 변환
/// <summary> /// 아라비안 숫자를 한글 문자열로 변환 /// </summary> /// <param name="num">변환할 숫자값(123)</param> /// <returns>반환될 문자열(일백이십삼)</returns> public string TransNum2Han(long num) { string[] han = new string[] { "", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" }; string[] unit = new string[] { "천", "백", "십", "" }; string[] unit2 = new string[] { "", "만", "억", "조" }; string result = num.ToString(); if (result.Length > 16) return "금액이 너무 많습니다."; // 네자리마다 단위수2(만,억,조)가 바뀌고 네자리마다 단위수1(천,백,십)이 바뀌므로 네자리씩 나눈다. ArrayList spilt = new ArrayList(); for (int i = 0; result.Length > 0; i++) { int spiltLength; if (result.Length > 4) { spiltLength = 4; } else { spiltLength = result.Length; } spilt.Add(result.Substring(result.Length - spiltLength, spiltLength)); result = result.Substring(0, result.Length - spiltLength); } for (int i = 0; i < spilt.Count; i++) { string str = (string)spilt[i]; // 네자리씩 나눌때 네자리가 되지않으면 원만한 처리를 위해서 '0'을 채워 네자리로 만든다. if (str.Length < 4) str = str.PadLeft(4, '0'); if (Int32.Parse(str) != 0) result = unit2[i] + result; // 네자리로 나뉜값을 '천','백','십'단위를 구분하는 루틴 for (int j = 3; j >= 0; j--) { string unitFlag = unit[j]; if (str.Substring(j, 1) == "0") unitFlag = ""; result = han[Int32.Parse(str.Substring(j, 1))] + unitFlag + result; } } return " 一金." + result + "원整."; }
문자열 타입을 정수형으로 변환
/// <summary> /// 문자열을 정수로 변경(1~9자리) /// 문자열내에 ,가 있는 경우 삭제함 /// </summary> /// <param name="sInteger">정수형 문자열('4,512')</param> /// <returns>정수(4512)</returns> public int Str2Int(string sInteger) { int nResult = 0; if(sInteger == null) return nResult; sInteger = sInteger.Replace(",",""); if (Empty(sInteger)) return nResult; try { string[] sNum = sInteger.Split('.'); nResult = Int32.Parse(sNum[0]); } catch (Exception) { nResult = 0; } return nResult; }
문자열 안에 리턴값 개수 추출
/// <summary> /// 문자열 안의 캐리지 리턴 개수 반환 /// </summary> /// <param name="sString">분석할 문자열</param> /// <returns>라인 개수</returns> public ArrayList LineInMemoChk(string sString) { int nPos = 1; int nOldPos = 0; ArrayList alStrings = new ArrayList(); if (sString.Trim() == "") return null; while (nPos > 0) { nPos = sString.IndexOf("\r\n", nPos); if (nPos > 0) { if (nPos == 1) alStrings.Add(sString.Substring(nOldPos, nPos)); else alStrings.Add(sString.Substring(nOldPos, nPos - nOldPos)); nOldPos = nPos += 2; } else alStrings.Add(sString.Substring(nOldPos, sString.Length - nOldPos)); } return alStrings; }
문자열을 특정 포맷으로 변환
/// <summary> /// 문자열을 특정한 포맷으로 설정 /// </summary> /// <param name="sData">문자열</param> /// <param name="sSpec">포맷</param> /// <returns>포맷으로 설정된 문자열</returns> /// <example> StrFormat("ABCDEFGHIJKL", "999-99/9999~999") => ABC-DE/FGHI~JKL</example> public string StrFormat(string sData, string sSpec) { int nDataCnt, nSpecCnt; StringBuilder tempRet = new StringBuilder(); nSpecCnt = nDataCnt = 0; while (true) { if ((nSpecCnt >= sSpec.Length) || (nDataCnt >= sData.Length)) return tempRet.ToString(); if (sSpec.Substring(nSpecCnt, 1) == "9") { tempRet.Append(sData.Substring(nDataCnt, 1)); nSpecCnt++; nDataCnt++; } else { tempRet.Append(sSpec.Substring(nSpecCnt, 1)); nSpecCnt++; } } }
한글포함 문자열 길이 계산 함수
/// <summary> /// 문자열의 길이를 리턴 /// 한글은 2byte로 계산됨. /// </summary> /// <param name="sString">문자열</param> /// <returns>길이</returns> public int Length(string sString) { int nLength = 0; int nUnicodeHangulStart = 0xac00; int nUnicodeHangulEnd = 0xD7A3; for (int nLoopI = 0; nLoopI < sString.Length; nLoopI++) { char Hangul = sString[nLoopI]; if (nUnicodeHangulStart <= Hangul && Hangul <= nUnicodeHangulEnd) nLength += 2; else nLength += 1; } return nLength; }
문자열 잘라내기 함수
/// <summary> /// 문자열을 잘라옴. 잘리는 끝이 한글의 중간일 경우 1byte더 짧게 끊는다. /// 시작위치가 한글의 중간일 경우 1byte 이전부터 시작한다. /// </summary> /// <param name="sString">문자열</param> /// <param name="nStart">시작위치(0 Base)</param> /// <param name="nCnt">자를 문자수</param> /// <returns>잘린 문자열</returns> public string Substring(string sString, int nStart, int nCnt) { int nPos = 0; int nUnicodeHangulStart = 0xac00; int nUnicodeHangulEnd = 0xD7A3; StringBuilder sResult = new StringBuilder(""); for (int nLoopI = 0; nLoopI < sString.Length; nLoopI++) { char Hangul = sString[nLoopI]; if (nUnicodeHangulStart <= Hangul && Hangul <= nUnicodeHangulEnd) nPos += 2; else nPos += 1; if (nPos > nStart && nPos <= nStart + nCnt) { sResult.Append(sString.Substring(nLoopI, 1)); } } return sResult.ToString(); }