GSI

stl을 사용해서 문자열의 토큰을 처리 하는 클래스 입니다.
물론 펌 입니다.
출처 : http://blog.naver.com/inobae?Redirect=Log&logNo=90025826561

사용법은 아래와 같아요.

1. 파싱할 sample.txt 파일

슈퍼맨, 2000, 23.5
홍길동, 3000, 45,6

2. 같은 형태의 포멧을 가진 txt 파일이 있을때
    아래와 같이 우선 파일을 로드 합니다.

ifstream file;
file.open("sample.txt");

3. 해당 파일을 한줄 단위로 읽습니다.
   그리고 나서 StringToKenizer 클래스를 사용해서 파싱합니다.

char buf[1024];
while(!file.eof())   // 다 읽었다면 빠져 나간다.
{
  // 한줄당 읽어 들입니다.
  file.getline(buf, 1024);

  // 토큰 분리
  StringTokenizer st = StringTokenizer(buf, ",");

  // 파싱된 문자열을 해당 값에 따라서 저장하면 됩니다.
  string name = st.NextToken();
  double value0 = atof(st.NextToken().c_str());
  double value1 = atof(st.nextToken().c_str());
}
Posted by gsi
:

13가지 주의 사항: Visual C++ .NET 프로그램을 Visual Studio 2005로 이식하기 전에 알아야 할 13가지 내용


Stanley B. Lippman

Microsoft Corporation


적용 대상:

   Microsoft Visual C++ .NET

   Microsoft Visual C++ 2005

   Microsoft Visual Studio 2005

   Microsoft Visual Studio .NET


요약: 개발자가 응용 프로그램을 Microsoft Visual Studio 2005로 이식할 때 주의해야 할 내용에 대해 Stan Lippman이 소개합니다.



Posted by gsi
:

Posted by gsi
:

Koders -

Etc 2008. 1. 8. 16:14 |

Searching 766,893,913 lines of open source code.
 
Posted by gsi
:

.Net WinForm DragAndDrop

C# 2008. 1. 7. 18:25 |

.Net WinForm에서 작업을 하다 보면 MFC의 확장성과는 비교도 되지 않을 만큼 좋은 컨트롤들로 무장되어 있는거 같다. 아직까지 다양한 확장 기능을 사용하고 .Net 의 좋은 기능들에 대해서 많이 모르지만 어느정도 선까지는 MFC의 생산성과는 비교가 안되는거 같다.

오늘 ListView 두개를 사용해서 드래그앤 드롭을 처리해 봤다.
참 쉽다고 느껴 진다.
코드 내용을 우선 정리해 볼려고 한다.

드래그 앤 드롭에는 몇가지 용어가 나오게 된다.

1. 소스(Source)
2. 타깃(Target)
3. 드롭 소스, 드롭 타깃

더 있지만. 큰 주제를 놓고 본다면 이것이 있을 것이다.

여기서 말을 풀어 보면 아래와 같을 것이다.
에플리케이션에서 드래그 앤 드롭(drag and drop) 기능을 추가 하려면 드롭 타깃(drop target)과 드롭 소스(drop source)를 고려 해야 한다. 우선, "무언가를 끌어다(drag) 놓을(drop)컨트롤" 이 하나 있어야 한다. 이런 종류의 컨트롤을 드롭 타깃(drop target)이라고 한다. 컨트롤의 AllowDrop 속성을 true로 설정하면 해당 컨트롤을 드롭 타깃으로 만들 수 있다.

작업 순서를 보겠다.
1. 두개의 ListView를 추가
2. 타깃이 될 ListView에 AllowDrop를 true로 설정
3. 소스 ListView에 MouseDown() 이벤트 등록
4. 타깃 ListView에 DragDrop(), DragEnter() 이벤트 등록
5. 코드 작성
6. 테스트

//
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
    try
    {
        // 전달할 객체를 난 구조체를 사용하였다.
        EffectInfo ef = new EffectInfo();

        // 멀티 선택이 될수 있기 때문에 collection 객체로 받도록 한다.
        ListView.SelectedListViewItemCollection breakfast = this.listView1.SelectedItems;

        // 하나만 사용하기 위해서 개수를 검사 하고 throw로 던진다.
        if (breakfast.Count != 1)
            throw new Exception("멀티 선택 되었네요");

        // 내부에서 하나만 연결후에 DoDragDrop()를 호출한다.
        foreach (ListViewItem item in breakfast)
        {
            ef.imageidx = item.ImageIndex;
            ef.itemname = item.Text;
            // 드래그앤 드롭 시작.
            DoDragDrop(ef, DragDropEffects.Copy);
        }
    }
    catch (ArgumentException nullex)
    {
    }
    catch (Exception ex)
    {
    }
}

private void listView2_DragEnter(object sender, DragEventArgs e)
{
    // 타입을 검사 해서 커서 모양을 선택해 준다.
    if (e.Data.GetDataPresent(typeof(EffectInfo)))
        e.Effect = DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
}

private void listView2_DragDrop(object sender, DragEventArgs e)
{
    // 드롭 했을때 값을 처리 한다.
    EffectInfo ef = (EffectInfo)e.Data.GetData(typeof(EffectInfo));
    ListViewItem listviewitem = new ListViewItem(ef.itemname, ef.imageidx);
    this.listView2.Items.Add(listviewitem);
}

Posted by gsi
: