이름을 잘짓자! 한글로 코딩을...
한글로 만들었더니 대박!!! 지저분함. ㅡ.,ㅡ;
----------------------------------------------------------- 훈스 팁게시판에 올린 글! 그대로..
소스를 보시고 대체 이건 뭥미? 하실텐데요...
오늘 질문게시판에 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
}
'# 1) 프로그래밍' 카테고리의 다른 글
피벗 메서드 (0) | 2010.08.26 |
---|---|
새로운 프로젝트 & 6월에 나의 프로젝트! (0) | 2010.06.03 |
변수명, 메서드명... 이름짓기어렵다!! (0) | 2010.05.26 |
나는 펜으로 종이에 글을 쓴다. 를 프로그래밍한다묜??? (0) | 2010.05.20 |
TCP.IP 초기 구상 모델... (0) | 2010.05.09 |
변수명, 메서드명... 이름짓기어렵다!!
아래 소스는 훈스게시판에 중복문자열을 찾아서 지우는 질문이 있었는데
숫자타입만을 제거한다고 된걸 못보고 만들었다. 질문을 대충보는 버릇때문인지...
아래는 변수명을 억지로 한글로 바꾸어봤는데... 대충 대충 지었더니... 영어보다 더 보기 어렵다...
집에서 다시 고쳐보자!! 한글로 뭔가 객체지향느낌이 나도록....
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);
}
}
}
'# 1) 프로그래밍' 카테고리의 다른 글
새로운 프로젝트 & 6월에 나의 프로젝트! (0) | 2010.06.03 |
---|---|
이름을 잘짓자! 한글로 코딩을... (0) | 2010.05.26 |
나는 펜으로 종이에 글을 쓴다. 를 프로그래밍한다묜??? (0) | 2010.05.20 |
TCP.IP 초기 구상 모델... (0) | 2010.05.09 |
미스테리... vs2008 오류.. (2) | 2010.04.19 |
JsFW20.Win 일부 기능 소개( 그리드뷰 , 디버그폼 )
DB Select했던것을 좀더 추가해서 구성한다.
목적 : DebugForm활용법.
GridView 바인딩 및 표시설정 방법
UniList 소개.
디버그 활성화!
JsFW.DEBUG.DebugQueryForm.SetDebugAuthority();
디버그 비즈 등록
base.ShowDebugWindow(tb, this); // 디버그 창에 호출전 디버그 등록!
끝... 넘 쉬운가?
디버그 창 뜬모습을 볼까낭
디버그 윈폼에 보면 사용한 쿼리 와 우측엔 파라미터가 나온다.
아래는 해당 쿼리와 파라미터로 결과를 다시 쿼리 할수 있다.
파라미터를 사용시.. 쿼리 합성을 통해 쿼리를 파라미터와 치환도 가능하다.
또. 쿼리할때마다 쌓인다!
그리드 뷰
기본 그리드 뷰를 래핑한클래스로 프레임웍 내 표준 데이타 UniList로 데이타 I/O를 적용한 것임.
아래 보면 데이타 바인딩을 하고
컬럼을 지정해서 변경할수 있다.
DataSet ds = tb.List(null);
gridView1.Bind(ds.Tables[0]);
using (JsFW.Win.Controls.GridView_ColumnAtt att = new GridView_ColumnAtt())
{
att.Add(new GridView_ColumnInfo("object_id", "ID", 100f, DataGridViewContentAlignment.MiddleCenter));
att.Add(new GridView_ColumnInfo("name", "프로시져명", 400f, DataGridViewContentAlignment.MiddleCenter));
att.Setting( gridView1.SetColumnAtt ); // 대리자 등록.
gridView1.SetConfig(true, true);
}
gridView1.SetConfig(true, true); // 그리드 읽기전용, Numbering
** 체크박스가 추가된 그리드, 그리드 두개짜리를 TwoGridView 가 존재한다 ( 추후에.. )
선택된 Row데이타 뽑기
UniList selectData = gridView1.DataParameters;
Alert( selectData.ToString("@name") );
selectData.Clear();
selectData = null;
** @name은 데이타의 Key로써 쿼리 파라미터로 바로 변환 되도록 정한 규칙이다.
전체 소스!!
public partial class Form1 : BaseForm
{
Table_1 tb = new Table_1();
public Form1()
{
InitializeComponent();
this.NotifyIcon = Resources.Icon1;
this.NotifyIcon_Visible = true;
this.NotifyIcon_Menu = new ContextMenu();
this.NotifyIcon_Menu.MenuItems.Add(new MenuItem("종료하기", delegate { this.Close(); }));
JsFW.DEBUG.DebugQueryForm.SetDebugAuthority();
gridView1.UniGriView_Click_Delegage += new UniGridView_Click(gridView1_UniGriView_Click_Delegage);
}
void gridView1_UniGriView_Click_Delegage()
{
// 그리드 클릭시..
UniList selectData = gridView1.DataParameters;
Alert( selectData.ToString("@name") );
selectData.Clear();
selectData = null;
}
private void button1_Click(object sender, EventArgs e)
{
Alert("하이! ", 10);
}
protected override void OnUniButton_Click(object sender, JsFW_ButtonEventArgs e)
{
base.OnUniButton_Click(sender, e);
switch (e.Code)
{
case Button_Codes.등록: break;
case Button_Codes.닫기: break;
case Button_Codes.Special :
switch (e.Special)
{
case Button_Codes_Special.SpecialBtn1: break;
case Button_Codes_Special.없다: break;
}
break;
}
}
private void button2_Click(object sender, EventArgs e)
{
base.ShowDebugWindow(tb, this); // 디버그 창에 호출전 디버그 등록!
DataSet ds = tb.List(null);
gridView1.Bind(ds.Tables[0]);
using (JsFW.Win.Controls.GridView_ColumnAtt att = new GridView_ColumnAtt())
{
att.Add(new GridView_ColumnInfo("object_id", "ID", 100f, DataGridViewContentAlignment.MiddleCenter));
att.Add(new GridView_ColumnInfo("name", "프로시져명", 400f, DataGridViewContentAlignment.MiddleCenter));
att.Setting( gridView1.SetColumnAtt ); // 대리자 등록.
gridView1.SetConfig(true, true);
}
}
}
public class Table_1 : JsFW.ADONET.DataBase_Business
{
public override DataSet List(JsFW.BasicObjects.IUniDataParameter iDataPrms)
{
return ExcuteDataSet("Select * From sys.procedures", CommandType.Text, new System.Data.SqlClient.SqlParameter[0]);
}
}
'# 9) My Program(.NET) > JsFW20' 카테고리의 다른 글
JsFW20 에 로그 남기기... (0) | 2010.05.28 |
---|---|
JsFW20.ADONET ( new 버젼 ) 2010 0527 (0) | 2010.05.27 |
JSFw20.Win.Controls에 BaseForm이용하기.. (0) | 2010.05.26 |
JsFW20.XML 을 이용한 예제 2 (0) | 2010.05.24 |
JsFW20.XML을 이용한 예제. (0) | 2010.05.24 |