[\x80-\xFF]{2}
를 이용한 영문 이외의 문자 검출방법에서힌트를 얻었다.

유니코드에서 한글은 u+1100(첫가끝영역), u+ac00(한글완성형영역), u+3130(한글자모영역) 이렇게 세가지 영역에 분포되어 있습니다...
http://www.unicode.org/charts/PDF/UAC00.pdf http://www.unicode.org/charts/PDF/U1100.pdf http://www.unicode.org/charts/PDF/U3130.pdf
라는 귀중한 정보를 바탕으로
([\uac00-\ud7af\u3130-\u318f\u1100-\u11FF])*식을 만들고
그리고 ASCII영역중 기호 숫자 알파벳 영역
([\x20-\x7e])*을 추가

다음은 일본어 검출

[\x20-\x7e]     //JISローマ字(ASCII)・文字コード表
[\uff61-\uff9f] //JISカナ(半角カナ)・文字コード表
확인결과
일본어 한자는 코드가 산재해있어 식으로 만드는것은 무리가 있어보인다. =.=

참고사이트
http://ash.jp/code/index.htm
http://kldp.org/node/63910

-----------------------------------------------------------------------------------------------------------------
라고 알고 있었는데..

IsCJKUnifiedIdeographs 라는 녀석이 있었다..
뭐 간단히 말하면 한자 영역..
여기에 히라가나 카다카나 영역등을 넣어서 버무리면 뭔가 만들어지겠지..

다음에 혹시 필요할까봐 첨부해둠 ㅋ

AND

이번에 영문문서대응 작업때문에 로마숫자의 점검용 코드를 줃었다.;;;(머리싸매서 하는것도 좋지만 시간대비 효용이..)

로마숫자에 대한 개요는 이걸 참조하고..

Roman Alternative Arabic Notes
없음 없음 0 0을 표시할 수 없음.
I 1  
II ⅠⅠ (or Ⅱ) 2  
III ⅠⅠⅠ (or Ⅲ) 3  
IV ⅠⅤ (or Ⅳ) 4 시계 문자판 등에서는 IIII (ⅠⅠⅠⅠ)이 쓰임.
V 5  
VI ⅤⅠ (or Ⅵ) 6  
VII ⅤⅠⅠ (or Ⅶ) 7  
VIII ⅤⅠⅠⅠ (or Ⅷ) 8  
IX ⅠⅩ (or Ⅸ) 9  
X 10  
XI ⅩⅠ (or Ⅺ) 11  
XII ⅩⅠⅠ (or Ⅻ) 12  
XIII ⅩⅠⅠⅠ 13  
XIV ⅩⅠⅤ 14  
XV ⅩⅤ 15  
XIX ⅩⅠⅩ 19  
XX ⅩⅩ 20  
XXX ⅩⅩⅩ 30  
XL ⅩⅬ 40  
L 50  
LX ⅬⅩ 60  
LXX ⅬⅩⅩ 70  
LXXX ⅬⅩⅩⅩ 80  
XC ⅩⅭ 90  
C 100 미국의 100달러 지폐를 "C-bill"이나 "C-note"라고 부르는 연유이다.
CC ⅭⅭ 200  
CD ⅭⅮ 400  
D 500 IↃ또는 1000 표기의 절반이란 의미에서 유래.
DCLXVI ⅮⅭⅬⅩⅤⅠ 666 짐승의 수에는 M 이외의 다른 모든 기본 부호가 한번씩 나타난다.
CM ⅭⅯ 900  
M 1000 예전엔 ↀ을 쓰기도 했다.
MCMXLV ⅯⅭⅯⅩⅬⅤ 1945  
MCMXCIX ⅯⅭⅯⅩⅭⅠⅩ 1999 IMM (ⅠⅯⅯ)이나 MIM (ⅯⅠⅯ)으로 줄여서 쓸 수 없다.
MM ⅯⅯ 2000  
MMM ⅯⅯⅯ 3000  
ⅠↃↃ 5000 I 뒤에 C를 두번 거꾸로 쓴 모양.

이 모든걸 점검할 수 있는 식이
^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$
이다.

위의 코드중 특수문자에서 대응되는 범위는 1-10까지이다.
ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ (일본어 비스타 폰트는 12까지 지원)
시간나면 컨버터도 만들어야겠다..

참고자료 :

http://ko.wikipedia.org/wiki/%EB%A1%9C%EB%A7%88_%EC%88%AB%EC%9E%90
http://diveintopython.org/regular_expressions/roman_numerals.html
http://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression
http://www.crowes-nest.com/CrowesNest/Library/RomanConv/roman.html
http://www.csharphelp.com/archives/archive144.html

AND

간혹 세팅을 잘못(?)하여
소스에 행번호가 표시가 안되는탓에 동료가 고생하는것을 보고
해결하기 위해 옵션(툴-옵션)을 좀 뒤볐다.

전자가 나의VS
후자가 동료의VS

후자의 경우가더 많은 옵션이 생겼고 전반에 표시되던 행번호 설정이 [에디터-언어-전반]안으로 들어가버렸다.
하나씩 체크하다보니 모든 언어라는 분류가 보인다.
여길 체크하면 모든 소스에디터상에 행번호가 표시되는듯하다.


생각보다 눈에 잘 안띄는 옵션이라 적어놓음..
물론 내머리는 여전히 플래시 메모리 ㅠ_ㅠ
AND

정규식의 [ア-ン]의 경우
アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモラリルレロヤユヨン
ァィゥェォャュョ
ガギグゲゴ
ザジズゼゾ
ダヂヅデド
バビブベボ

RangeValidator의 minValue:ア maxValue:ン 의 경우
アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモラリルレロヤユヨン
ガギグゲゴ
ザジズゼゾ
ダヂヅデド
バビブベボ

약간의 차이가 생긴다..

고로..
내가 써야할것은
[アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモラリルレロヤユヨン]

그나저나 CustomValidator는 ClientScript로 먹어주려나 모르겠군..
AND

오피스 문서 처리

DEVELOP/XML 2008. 12. 14. 21:58

지난 금요일 VSUG의 첫번째 주제였던 VSTO 3.0에 관한 내용을 적어둔다.(까먹지말라고)

오피스 2007과 VS2008을 이어주는 녀석이 VSTO 3.0이다.

좀더 원활히 다루기위해 Open Xml Format SDK 1.0(2.0은 현재 CTP판)과 CodeSnippet

도 설치하자.

.netFramework 3.0이후로 오면서 좋아진점이.. Zip을 안까고 접근이 가능해졌다.
System.IO.Packaging 을 이용한것인데, 많이 편하다 (파일및 디렉토리 제어권이 안풀려서 예외 날아오지도 않고..)^^

        private void doWork(string fileName)
        {
            WordprocessingDocument doc = WordprocessingDocument.Open(fileName,true);

            MainDocumentPart mdp = doc.MainDocumentPart;
            WordprocessingCommentsPart cmtPart = mdp.WordprocessingCommentsPart;

            XmlDocument docXml = new XmlDocument();
            docXml.Load(mdp.GetStream());
            
            XmlNodeList xnl = docXml.GetElementsByTagName(@"w:t");
            
            int i = 0;
            
            foreach (XmlNode node in xnl)
            {
                node.InnerText = "text" + i;
                i++;
            }

            docXml.Save(mdp.GetStream(FileMode.Create,FileAccess.Write));
            doc.Close();
        }

다음에 갈아엎을때 도입하고 싶네.. ^^

추가 : http://msdn.microsoft.com/ko-kr/magazine/cc164242.aspx 

AND

쉬우면서도 찾기 힘들었던...

         private void fileSelector_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
            {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

                FileInfo _fi = new FileInfo(files[0]);
                if (_fi.Exists)
                {
                    if (_fi.Extension.ToLower() == ".[ExtentionName]")
                    {
                        fi = _fi;
                        tbxFileName.Text = _fi.FullName;
                    }
                }
            }
        }

        private void fileSelector_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }

AND

종종보면 다중네임스페이스를 지닌 xml개체를 보게되는데
가지고 있는 책에는 예제가 없어 구글링 하다 알게된 자료..

두가지방법중 난 후자를 선택해서 코딩했다..

Samples are bellow.

As you can see populating XmlDocument with XmlWriter.Write*() methods is much simpler.

string myNS = "http://www.xyz.space.com/land";

// Populating XmlDocument using DOM API:
XmlDocument xdoc1 = new XmlDocument();
XmlElement rootABC = xdoc1.CreateElement("rootABC", myNS);
xdoc1.AppendChild(rootABC);
XmlElement ele1 = xdoc1.CreateElement("ele1", myNS);
rootABC.AppendChild(ele1);
XmlAttribute xsd = xdoc1.CreateAttribute("xmlns", "xsd", "http://www.w3.org/2000/xmlns/");
xsd.Value = "http://www.xyz.space.com/Airschemas";
ele1.Attributes.Append(xsd);
XmlAttribute xsi = xdoc1.CreateAttribute("xmlns", "xsi", "http://www.w3.org/2000/xmlns/");
xsi.Value = "http://www.xyz.space.com/AirschemaInst";
ele1.Attributes.Append(xsi);
XmlElement ObjVal = xdoc1.CreateElement("ObjVal", myNS);
ele1.AppendChild(ObjVal);
XmlElement Name = xdoc1.CreateElement("Name", myNS);
ObjVal.AppendChild(Name);
Name.AppendChild(xdoc1.CreateTextNode("POC2"));

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter w1 = XmlWriter.Create(Console.Out, settings);

xdoc1.WriteTo(w1);
Console.WriteLine();
Console.WriteLine();

// Populating XmlDocument using XPathNavigator API:
XmlDocument xdoc2 = new XmlDocument();
XmlWriter docWriter = xdoc2.CreateNavigator().AppendChild();
docWriter.WriteStartElement("rootABC", myNS);
docWriter.WriteStartElement("ele1", myNS);
docWriter.WriteAttributeString("xmlns", "xsd", "http://www.w3.org/2000/xmlns/", "http://www.xyz.space.com/Airschemas");
docWriter.WriteAttributeString("xmlns", "xsi", "http://www.w3.org/2000/xmlns/", "http://www.xyz.space.com/AirschemaInst");
docWriter.WriteStartElement("ObjVal", myNS);
docWriter.WriteElementString("Name", myNS, "POC2");

docWriter.WriteEndElement();
docWriter.WriteEndElement();
docWriter.WriteEndElement();
docWriter.Close();

XmlWriter w2 = XmlWriter.Create(Console.Out, settings);
xdoc2.WriteTo(w2);
Console.WriteLine();
Console.WriteLine();
w2.Flush();




WebData/Sergey

출처 : http://www.bokebb.com/dev/english/1932/posts/19324822.shtml
AND

아이콘

DEVELOP/C# 2008. 5. 20. 14:52
큰아이콘과 작은아이콘..
난 이게 별개의 아이콘파일로 구성된줄 알았다... 30분전까지..

내가 이전에 쓰던 프로그램들은 멀티 아이콘을 지원 안했던거다..

괜시리 삽질만..

결국 검색해서 찾아낸넘..

http://www.gigafree.net/tool/encode/iconhenkan.html


16및 32 사이즈의 그림파일을 읽은후 멀티아이콘으로 저장

프로젝트에서 아이콘을 설정하면
아이콘크기가 자동으로 맞춰서 표현됨..
AND

http://www.thescripts.com/forum/thread256146.html
Process.Start (@"C:\Program Files\");
AND

메시징큐

DEVELOP/C# 2007. 7. 30. 21:35
AND

DataBound Control








^|

ASP.NET
(웹용)







DataSource Control<-
Client

HTTP
->
->
WebService

DB


DataSet
(DataTable)

SOAP
(XML)
<-
DataSet
DataTable
WebMethod()
{

}
WebMethod(DataSet)
{

}
->
<-
fill()














->
HTTP
->
->



변경/삽입/삭제
<->

SOAP
(XML)





AND

3 Teir

DEVELOP/C# 2007. 3. 5. 15:56
웹서비스의 세션을 웹페이지에서 이용하기

1 tier|
2 tier

HTTP

3 tier

Web Browser
->
IIS
->
(SOAP)
->
IIS
session["변수"]
=저장개체

<-
ASP.NET Runtime
<-
(XML)
<-
ASP.NET Runtime클래스명 변수명
=(클래스)session["변수"]

|
~.aspx ->Session(웹서비스의 프록시개체)

|

ShopService
SesstionApplication

|
<-

|

WebMethod1()
WebMethod2()
save->Cart
load<-

application 도 동일
AND

웹서비스 개요

DEVELOP/C# 2007. 2. 27. 15:25
웹서비스의 클라이언트  
인터넷  
웹 서비스(WebServices) |  
 
 
응용프로그램에서 HTTP 프로그래밍이 가능한
 컴포넌트(java/.NET)
| Java App 서버
EJB서버/RMI서버
컴포넌트들  
SOAP/XML  
 
|  
 
 
OS/Language 무관하게  
 
 
 
| Windws
VB,VC++
서버
COM++/리모팅


웹서비스 작성후
Client엔 웹 참조로 추가
->(프록시클래스 추가됨)

AND

XML기초
1장XML소개

2장
XML학습준비

3장
DTD(X)

4장
Namespace

5장
XML Schema

6장
XPath

7장
XSL
C#+XML
8장
XML문서읽기

9장
XML문서작성

10장
DOM

11장
XSLT

12장

AND

※Remoting(원격작업)
1) 개념 : 원격서버에 있는 개체를 사용하는 기술
=> 분산개체기술 (DCOM(ms), RMI(java))
여러대의PC에서 존재하는 개체를 사용하는 기술
로컬                              개체의 메소드를 호출/ 개체의 데이터를 변경

2) Remoting(원격개체의 메소드 호출) 개발순서
(1) 서버채널생성

TcpChannel : TcpServerChannel(Binary)
HttpChannel : HttpServerChannel(http-soap)

TcpServerChannel channel = new TcpServerChannel(포트번호);

(2) 리모팅 시스템 구동 (=채널 서비스에 채널 등록)
ChannelServices.RegisterChannel(channel);

(3) 원격개체를 등록(여러개가 가능)
가.원격클래스 작성방법
public class 클래스명 : MarshalByRefObject
{
   public 반환형 메소드명(매개변수 리스트) {.....}
   //반환형과 매개변수 리스트는 [Serializable]이 가능해야함
}
나.원격개체를 등록
RemotingConfiguration.RegisterWellKnownServiceType(원격개체를 등록 (1 or 3개));
//1개의 경우 XML파일경로
//3개의 경우 Type, String, WellKnownObjectModel <- 열거형
Type개체 : 원격 클래스의 Type개체
String개체 : 클라이언트가 원격개체 참조를 얻기위한 URL
WellKnownObjectModel  : 원격개체수
ex) RemotingConfiguration.RegisterWellKnownServiceType(
           typeof(원격클래스명),
           "원격클래스명",
           WellKnownObjectModel.SingleTon);//공통으로 액세스 /SingleCall//개별엑세스
tcp://ServerIP:Port/원격클래스명  으로 접속

(4) 원격메소드를 호출하는 클라이언트 개발
가. 클라이언트용 채널 생성
TcpChannel : TcpClientChannel
HttpChannel : HttpClientChannel
//둘중 하나로 서버와 클라이언트가 같게
TcpClientChannel channel = new TcpClientChannel();
ChannelServices.RegisterChannel(channel,true);

나.원격개체 참조얻기
원격 클래스명 -> Calculator calcu = Activator.GetObject(typeof(Calculator),"tcp://localhost:50001/Calculator",)  //Calculator <-원격 클래스명

다. 원격 메소드 호출
double result = calcu.Minus(100,50);
AND