CSV 포맷(Format)의 문자열(String) 파싱(Parse, Parsing)

CSV 형태로 된 문자열을 파싱하기 위한 C#언어로 작성된 함수입니다. 예전에 XrGeocoder 프로그램을 개발할때 사용했던 함수로.. 또 다른 프로젝트에서 사용되면서 함수만을 분리해 정리해 봅니다.>/p>

private List SeperateStringWithComma(String value)
{
    bool inQuotes = false;
    char delim = ',';
    List strings = new List();

    StringBuilder sb = new StringBuilder();
    foreach (char c in value)
    {
        if (c == '\'' || c == '"')
        {
            if (!inQuotes)
                inQuotes = true;
            else
                inQuotes = false;
        }

        if (c == delim)
        {
            if (!inQuotes)
            {
                strings.Add(sb.Replace("'", string.Empty).Replace("\"", string.Empty).ToString());
                sb.Remove(0, sb.Length);
            }
            else
            {
                sb.Append(c);
            }
        }
        else
        {
            sb.Append(c);
        }
    }

    strings.Add(sb.Replace("'", string.Empty).Replace("\"", string.Empty).ToString());
    return strings;
}

위의 함수를 사용하는 예제는 다음과 같습니다.

String csv = "2011-01-01,18,2008,개인,인천,중구,~,2010-12-31,233400,남자";
List values = SeperateStringWithComma(csv);

int cntValues = values.Count;
for (int i = 0; i < cntValues; i++)
{
    MessageBox.Show(values[i]);
}

[GIS] 우리가 만들고, 우리가 직접 쓰는 솔루션, Xr

처음 GIS 분야에서 솔루션 개발로 사업을 하겠다고 했을때.. 솔루션을 기획하고 개발하면서 갖고 있던 생각 중에 하나는.. 이렇게 개발한 솔루션을 고객에게 제공하는 것에 머무르지 말고.. 직접 내부에서 사용하고, 우리가 기획한 서비스를 우리의 솔루션으로 개발하고.. 내부적으로 수행하는 GIS 업무에 필요한 작업 역시도 우리가 만든 솔루션으로 하는 것이였습니다.

공간 데이터 가공을 위한 듀라맵, 웹GIS 서비스를 위한 핑거아이즈, 모바일 GIS 개발을 위한 블랙포인트 등.. 직접 사용해 보고 직접 고객이 되어 불편한 것이 무엇인가.. 발생하는 오류는 무엇인지 등을 직접 경험해 보면서 그 품질을 높여 나가고 있습니다.


오늘도.. 프로젝트 수행에서 자체 개발한 솔루션만을 활용하여 공간 데이터를 구축하고 통계 데이터를 입력하고 있습니다. 문제 없이… 매우 편리하게.. 그리고 신속하게 물흐르듯… 작업을 할 수 있어 매우 기쁘네요.. ㅜ_ㅜ

솔루션에 문제가 발생하는 것을 해결할때의 그 고통스러움에 대한 댓가로.. 이러한 기쁨을 스스로 느껴 볼 수 있는 것도 큰 가치라고 생각합니다..

[GIS] SHP에 필드를 추가해 주는 XrAddFields 툴

기존의 SHP 파일에 속성 정보를 붙이기 위해서 부가적인 필드 몇가지를 정의해 추가할 필요가 있음으로 해서 만든 툴입니다. 듀라맵을 이용해 제작하였으므로 먼저 듀라맵을 등록하시기 바랍니다. 듀라맵에 대한 자세한 소개 및 다운로드는 http://www.gisdeveloper.co.kr/notice/574 를 참고하시기 바랍니다.

사용자 삽입 이미지
먼저 새로운 필드를 추가할 대상이 되는 SHP 파일을 지정하고 새로운 필드가 붙여 추가되어 새롭게 만들어질 SHP 파일을 지정합니다. 새롭게 만들어질 SHP 파일에는 기존의 SHP 파일의 속성값이 그대로 복사됩니다.

Flex에서 Timeline 애니메이션 주기

greenshock의 tween 라이브러리를 사용하여 타임라인 애니메이션을 주는 것에 대해 살펴보았습니다. 요즘 UI 디자인의 추세가 정적인 부분에서는 최대한 Simple하게.. 대신 동적인 효과를 주는 것이기에 추후 고객에게 제공할 시스템에서 적용해볼 요량으로 학습하여 정리해봅니다.

원하는 효과는 다음과 같습니다. 사각형 버튼을 0.4초간 수평으로 화면의 가로 가운데로 이동하고 다시 0.4초간 수직으로 화면의 세로 가운데로 이동한 뒤.. 끝으로 0.3초간 2배 확대하는 애니메이션입니다.

사용자 삽입 이미지
이에 대한 코드는 다음과 같습니다.

TweenPlugin.activate([TransformMatrixPlugin, BezierPlugin]); // 1번만 호출하면 됨

var myTimeline:TimelineLite = new TimelineLite({paused:true}); 
var w:Number = btn.width;
var h:Number = btn.height;

// 화면 중심 이동 및 확대를 위해 화면 크기(300, 300)의 반절값인 150 사용 
myTimeline.append(new TweenLite(btn, 0.4, {x:150-w/2})); 
myTimeline.append(new TweenLite(btn, 0.4, {y:150-h/2}));
myTimeline.append(
    new TweenMax(btn, 0.3, {transformMatrix:{tx:150-w,ty:150-h,scaleX:2, scaleY:2}})
);

myTimeline.play();

간단하게는 사용자 경험(UX)는 사용자에게 사용자 인터페이스(UI)와 동일하게 생각할 수 있습니다. 최근 Windows 8이나 Apple의 iOS의 UI를 살펴보면 과거 입체적인 UI에서 벗어나 보다 평면적인 UI로 디자인되어 있는 것을 볼 수 있습니다. 그러나 이 평면적인 UI에 사용자가 반응을 하게 되면 마치 생명체처럼 움직여 반응하게 됩니다.

UI 및 UX를 가장 효과적으로 학습하는 방법은 이러한 OS의 UI를 살펴보고 사용해 보는 것이 가장 좋다고 생각합니다. 개발자나 디자이너라면.. 이러한 사용에서 끝나는 것이 아니라 자신이 만드는 창작물에도 이러한 배움을 반영해 보는 것이 의미있는 일이라 생각합니다.

HELICOPTER AH-64


예전에 울 아들이랑 나와 단둘이, 마누라 약속으로 집 비운 날.. -“-; 여튼.. 토이저러스에 가서 아들꺼 장난감이랑.. 또 아들꺼 장난감이라는 명분으로 내 장난감이랑 사왔던 것을 오늘 조립을 해보았습니다. 어릴적에도 이와 비슷한 것이 있었는데.. 그때는 약간 두꺼운 종이에 인쇄된 것을 직접 가위로 오려 풀로 붙여가며 만들었던.. 그런데 지금은 종이가 아닌 두꺼운 플라스틱 소재로.. 풀로 붙일 필요 없이 쉽고 깔끔하게 조립이 가능하게 나왔네요.. 어릴적 생각하며, 머리 식힐 겸 해서 만들어 올려 봅니다..