Dataset 오브젝트 데이터를 SSV(Simple Separated Values) 형태로 처리하기 위한 레이아웃을 설명합니다.
본문에서 주요 용어는 아래와 같이 줄여서 표시합니다.
(RS): RS(Record Seperator) / 0x1E(30)
(US): US(Unit Separator) / 0x1F(31)
운영 환경에 따라 (RS), (US)는 넥사크로 스튜디오에서 다른 코드로 변경할 수 있습니다.
Environment.ssvrecordseparator
Environment.ssvunitseparator
Dataset SSV layout
Dataset SSV는 아래와 같은 형식으로 구성합니다.
항목 | 필수 |
---|---|
Stream Header | O |
Variables | X |
Datasets | X |
Stream Header
SSV{:CodePage}(RS)
Stream Header는 "SSV"로 시작하고 필요한 경우 콜론(:) 다음에 CodePage 값을 추가할 수 있습니다. (RS)로 다음 항목(Variables 또는 Datasets)과 구분합니다.
항목 | 필수 | 설명 |
---|---|---|
SSV | O | "SSV"로 고정된 값입니다. |
CodePage | X | ":" 문자로 시작하며 인코딩 정보입니다. |
SSV(RS) SSV:en_US(RS) SSV:utf-8(RS)
Variables
생략하거나 1개 이상의 Variable을 가질 수 있습니다. n개의 Variable은 (RS)로 구분하며 (RS)로 Datasets와 구분합니다.
Variable
Variable ID{:Type(Length)}{=Value}(RS) Variable ID{:Type}{=Value}(RS)
항목 | 필수 | 설명 |
---|---|---|
Variable ID | O | 고유 ID로 중복된 값이 들어오면 마지막에 들어온 값만 처리합니다. |
Type | X | ":" 문자로 시작하며 Length 정보를 포함할 수 있습니다. 생략한 경우 "STRING"으로 처리합니다. |
Length | X | "("문자와 ")"문자 사이의 값으로 처리합니다. 생략한 경우 Type에 따른 임계치로 처리합니다. 단, Type이 "STRING"인 경우에는 255로 처리합니다. |
Value | X | "="문자로 시작하며 (RS)가 나오기 전까지 Value로 처리합니다. |
name1=value(RS) name1=value1(RS)name2=value2(RS) name1:STRING=value1(RS)name2=value2(RS) name3=value3(RS)name4:STRING(10)=value4(RS)
Datasets
생략하거나 1개 이상의 Dataset을 가질 수 있습니다.
Dataset
Dataset은 아래와 같은 형식을 가집니다.
항목 | 필수 |
---|---|
Dataset Header | O |
Const Column Infos | X |
Column Infos | O |
Records | X |
Null Record | O |
Const Column Infos가 있을 경우 Column Info보다 먼저 나열해야 합니다.
순서가 바뀌거나 Column Info 뒤에 다시 Const Column Infos 정보를 나열하는 경우 정상적인 동작을 보장하지 않습니다.
Dataset 형식 상세
Dataset의 각 항목을 설명합니다.
Dataset Header
Dataset:Dataset ID(RS)
Dataset Header는 "Dataset"로 시작하고 콜론(:) 다음에 Dataset ID를 작성합니다. (RS)로 다음 항목과 구분합니다.
Const Column Infos
_Const_(US)Const Column ID{:Type(Length)}{=Value}(RS) _Const_(US)Const Column ID{:Type}{=Value}(RS)
"_Const_"로 시작하고 1개 이상의 Const Column Info를 가질 수 있습니다. n개의 Const Column Info는 (US)로 구분하며 (RS)로 다음 항목과 구분합니다.
항목 | 필수 | 설명 |
---|---|---|
_Const_ | O | "_Const_"로 고정된 값입니다. |
Const Column ID | O | Dataset에서 Const Column ID로 사용할 ID 값입니다. |
Type | X | ":" 문자로 시작하며 Length 정보를 포함할 수 있습니다. 생략한 경우 "STRING"으로 처리합니다. |
Length | X | "("문자와 ")"문자 사이의 값으로 처리합니다. 생략한 경우 Type에 따른 임계치로 처리합니다. 단, Type이 "STRING"인 경우에는 255로 처리합니다. |
Value | X | "="문자로 시작하며 (US) 또는 (RS)가 나오기 전까지 Value로 처리합니다. |
Column Infos
_RowType_(US)Column ID{:Type(Length)}{:Sum Type}{:Sum Text}(RS) _RowType_(US)Column ID{:Type}{:Sum Type}{:Sum Text}(RS)
"_RowType_"로 시작하고 1개 이상의 Column Info를 가질 수 있습니다. n개의 Column Info는 (US)로 구분하며 (RS)로 다음 항목과 구분합니다.
항목 | 필수 | 설명 |
---|---|---|
_RowType_ | O | "_RowType_"로 고정된 값입니다. |
Column ID | O | Dataset에서 Column ID로 사용할 ID 값입니다. |
Type | X | ":" 문자로 시작하며 Length 정보를 포함할 수 있습니다. 생략한 경우 "STRING"으로 처리합니다. |
Length | X | "("문자와 ")"문자 사이의 값으로 처리합니다. 생략한 경우 Type에 따른 임계치로 처리합니다. 단, Type이 "STRING"인 경우에는 255로 처리합니다. |
Sum Type | X | ":"문자로 ColumnInfo 오브젝트의 prop 속성값을 설정합니다. |
Sum Text | X | ":"문자로 ColumnInfo 오브젝트의 sumtext 속성값을 설정합니다. |
Records
RowType(US)Column Value(RS)
첫 번째 필드값은 RowType이고 그 이후 필드값은 Column Infos에서 설정한 Column 순서대로 작성합니다. 각 필드값은 (US)로 구분합니다.
항목 | 필수 | 설명 |
---|---|---|
RowType | O | 레코드 형태를 작성합니다. N: Normal Record I: Inserted Record U: Updated Record D: Deleted Record O: Original Record (Update Record의 원본 레코드입니다. Update Record가 있는 경우 사용할 수 있습니다). |
Column Value | O | Dataset에서 Column Value로 사용할 값입니다. Column Value를 undefined로 처리하고자 한다면 "ETX (End of Text) / 0x03(03)"을 사용합니다. |
Null Record
(RS)로 Dataset의 끝을 구분합니다.
참고
Type
Variable, Const Column Infos, Column Infos에서 Type 항목에 사용할 수 있는 값은 아래와 같습니다.
Type | 설명 |
---|---|
STRING | 문자열. 최대값은 system에서 한번에 할당 가능한 크기인 2GB로 제한됨 Column의 size와 관계없이 최대치까지 사용될 수 있다. |
INT | 정수형 (-231 ~ 231-1) |
FLOAT, DECIMAL | 실수형 (±2.2X10-308 ~ ±1.7X10308) |
BIGDECIMAL | 실수형(문자열로 저장) (±10-1056 ~ ±10+1056) |
DATE | 날짜형 YYYYMMDD (-8192/01/01 ~ 8191/12/31) |
DATETIME | YYYYMMDDHHmmssuuu (msec포함가능) |
TIME | 6자리 HHmmssuuu(msec포함가능) |
BLOB | 이진 데이터 |
예제
(RS), (US)는 아래 기호로 표시했습니다.
▼ = Record Seperator(RS)
• = Unit Seperator(US)
쉽게 읽기 위해 줄바꿈을 추가했습니다. 실제 SSV 구성 시에는 줄바꿈을 추가하지 않습니다.
Dataset이 1개 존재하는 경우
SSV:utf-8▼ Dataset:dataset0▼ _RowType_•Col1:String(20)•Col2:Int:SUM•Col3:Decimal:AVG▼ N•Test•0•1•1▼ I•Abc•1•2•2▼ U•Def•2•3•3▼ O•Chk•2•3•3▼ D•Ghi•3•4•4▼ ▼
Const Column이 존재하는 Dataset이 1개 존재하는 경우
SSV:utf-8▼ Dataset:dataset0▼ _Const_•ConstCol1:STRING(20)=Name•ConstCol2:INT=1•ConstCol3:DECIMAL=0.8▼ _RowType_•Col1:STRING(20)•Col2:INT:SUM•Col3:DECIMAL:AVG▼ N•Test•0•1•1▼ I•Abc•1•2•2▼ U•Def•2•3•3▼ O•Chk•2•3•3▼ D•Ghi•3•4•4▼ ▼
Dataset이 여러 개 존재하는 경우
SSV:utf-8▼ Dataset:dataset0▼ _Const_•ConstCol1:STRING(20)=Name•ConstCol2:INT=1•ConstCol3:DECIMAL=0.8▼ _RowType_•Col1:STRING(20)•Col2:INT:SUM•Col3:DECIMAL:AVG▼ N•Test•0•1•1▼ I•Abc•1•2•2▼ U•Def•2•3•3▼ O•Chk•2•3•3▼ D•Ghi•3•4•4▼ ▼ Dataset:dataset1▼ _RowType_•Col1:INT(4):Summ,Col2:STRING(30):Text▼ N•0•test▼ I•1•test1▼ U•2•test3▼ O•2•test3-1▼ D•3•test4▼ ▼
Variable만 존재하는 경우
SSV:utf-8▼ Var4=10▼Var5=20▼ ▼
Variable과 Dataset이 존재하는 경우
SSV:utf-8▼ Var4=10▼Var5=20▼ Dataset:dataset0▼ _Const_•ConstCol1:STRING(20)=Name•ConstCol2:INT=1•ConstCol3:DECIMAL=0.8▼ _RowType_•Col1:STRING(20)•Col2:INT:SUM•Col3:DECIMAL:AVG▼ N•0•test▼ I•1•test1▼ U•2•test3▼ O•2•test3-1▼ D•3•test4▼ ▼