2022년 1월 24일 월요일

C 문자열 분리 방법 1강

 오늘 포스팅 할 내용은 C 언어에서 문자열을 특정 기호로 분리한는 방법을 알아 보겠습니다.

​

단순 문자로 분리하여 출력까지 하는것을 이야기 하겠습니다.

​

작성 방법은 API를 안쓰는 방법(무식한 방법?)과 API를 쓰는 방법 두가지를 알아 보겠습니다.

​

작성을 위해서 기본적인 문자열 예시를 들겠습니다.

​

"Title=Blog@Writer=Berdo@PostDate=20220120"

​

기본 문자열은 위와 같습니다.

그냥 읽어보면 3개의 항목으로 키/값으로 분리 된것으로 보일겁니다.

일단 첫번째로 3개의 항목을 분리하여 간단히 출력하는 프로그램을 작성합니다.

​

프로그램 작성은 Windows에 Visual Studio Code 설치후 gcc 기반으로 작성 됩니다.

기본 프로그램 환경 구축은 아래 제 블러그 링크에서 확인하고 구성 하시면 됩니다.

Window GCC 환경구축

코드를 먼저 보고 설명을 시작 하겠습니다.


#include <stdio.h>
#include <string.h>

void main()
{
    char* sOrgSrc = "Title=Blog@Writer=Berdo@PostDate=20220120";

    //일반 구문으로 아이템 분리.
    int nOrgSrcLen = strlen(sOrgSrc);

    int nSTItem=0, nIdx=0;
    char szPrt[128]={0};
    for (nIdx = 0; nIdx < nOrgSrcLen; nIdx++)
    {
        if (sOrgSrc[nIdx] == '@')
        {
            strncpy(szPrt, sOrgSrc+nSTItem, nIdx-nSTItem);
            printf("[Item:%s]\n", szPrt);
            memset(szPrt, 0x00, 128);
            nSTItem = nIdx+1;
        }        
    }

    //마지막항목 출력.
    strncpy(szPrt, sOrgSrc+nSTItem, nOrgSrcLen-nSTItem);
    printf("[Item:%s]\n", szPrt);
}

API를 안쓰게 되면 문자열을 길이만큼 for 문을 이용하여 반복하다 '@' 문자를 만나면

길이만큼 짤라서 출력하는 구조 입니다.

​

출력을 위해서 szPrt 변수를 별도로 이용했구요.

strncpy 를 이용해서 문자열 복사를 했는데 마지막 인자값이 주어진 길이만큼만 복사 하는것 입니다.

하나의 아이템을 잘라서 출력한다음 다음 구문 분석을 위해서 시작 위치를 잡아 주기 위해서 nSTItem 변수를

사용했습니다.

​

마지막 항목을 출력하기 위해서 for문이 종료되고 난후 마지막 항목을 출력했습니다.

​

두번째 코드는 'strstr' API를 이용하여 문자열 분리 하는 방법입니다.

​

코드를 먼저 보고 설명을 시작 하겠습니다.

#include <stdio.h>
#include <string.h>

void main()
{
    char* sOrgSrc = "Title=Blog@Writer=Berdo@PostDate=20220120";

    //strstr 을 사용하여 아이템 분리.
    int nSTPos = 0, nLen;
    char szPrt[128]={0};
    while (1)
    {
        char* pFind = strstr(sOrgSrc+nSTPos, "@");
        
        if (pFind != NULL)
        {
            nLen = pFind - (sOrgSrc+nSTPos);
            strncpy(szPrt, sOrgSrc+nSTPos, nLen);
            printf("[Item:%s]\n", szPrt);
            memset(szPrt, 0x00, 128);
            nSTPos += nLen + 1;
        }
        else
        {
            strncpy(szPrt, sOrgSrc+nSTPos, strlen(sOrgSrc) - nSTPos);
            printf("[Item:%s]\n", szPrt);
            break;
        }                    
    }
}

'strstr' 사용은 처음인자에 검색대상 문자열 포인터를 지정합니다.

두번째 인자에는 검색할 문자열을 입력합니다.

​

'strstr'을 실행하고 나온 결과값은 검색된 문자열 포인터 위치를 리턴하게 됩니다.

말로만 설명을 하면 이해하기 어려우니 아래 그림으로 보시면 이해가 가실거에요.





위 그림에서 보시듯이 pFind 주소값이 sOrgSrc 보다 뒤에 있기 때문에

pFind 에서 검색 시작점을 빼주면 실제 분리될 아이템의 길이가 됩니다.

그러면 szPtr 에 복사한후 출력합니다.

​

마지막값은 검색하면 'NULL' 이 나오기 때문에 문자열의 마지막까지 복사한후

출력하면 됩니다.

​

기본적인 C 언어를 이용한 문자열 파싱을 알아 봤습니다.

​

다음번에는 분리된 아이템(Key=Value)을 다시 분리하여 구조체에 저장한후 출력하는것을 알려 드리겠습니다.

그럼 이만.

2022년 1월 23일 일요일

Visual Studio Code Java Console 개발환경 구축(Windows)

 간단히 Java Console 개발환경 구축하는 법을 설명할까 합니다.

​

일단 첫번째로 Visual Studio Code 를 설치 합니다.

https://code.visualstudio.com/download

위 링크로 가셔서 설치 하세요.

​

두번째 Java SDK 를 설치 합니다.

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

위링크로 가셔서 Windows 탭을 선택 하신후 x64 Installer 를 다운로드 받아서 설치 하세요.














설치 하실때에는 기본 경로로 설치 하신후 마지막에 Next Step 은 안하셔도 되니 Close 누르고 빠져 나오면 됩니다.

​

기본적인 프로그램들은 다 설치 되었으니 이제 "Hello World" 를 출력하여 프린트 하는 프로그램을 만들어 보겠습니다.

​

저는 소스 경로를

​

문서/Source/Java/Test01 으로 만들어 놓았습니다.

​

이제 Visual Studio Code(이후 VSCode라 명칭 하겠습니다) 를 실행합니다.


















실행하고 나면 위 그림과 같은 화면이 나올겁니다.

거기서 "폴더열기" 를 클릭하고 아까 만들어 놓은 폴더를 지정하여 오픈 하세요.


















오픈하고 나면 위 화면 같은 화면이 나올겁니다.

거기에서 폴더 옆에 빨간색 동그라미 아이콘을 클릭하여 새파일을 생성하면

입력창이 뜰거고 거기에 Hello.java 라는 파일을 생성합니다.

​

java 파일을 생성했기 때문에 VSCode 에서 java 프로젝트 활성화를 진행 할겁니다.

​

파일 안에 아래와 같은 코드를 입력하세요.


public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

코드 입력이 끝나고 나면 저장을 합니다. (Ctrl + S)

​

입력된 코드를 간단히 실행하여 결과를 확인 하려면 VSCode 왼쪽 하단에 추가된 "JAVA PROJECT" 를 눌러 트리를 펼칩니다.




















펼치고 나면 위화면 같이 나올겁니다. 거기서 프로젝트 명이 Test01 로 나올거고 그 옆에 실행 버튼이 보일겁니다.

그것을 실행하면 Compile 후 실행하여 결과가 콘솔에 나오는것을 확인할수 있습니다.