|
답변 정말 감사드립니다.
죄송한데 자료형식이 아래와 같이 되어 있다고 합니다.
그러면 이 자료는 어떻게 읽어야 하나요?
구조체로 해서 읽는 방식이 따로 읽는건가요?
이런게 여러줄 있으면 어떻게 읽어야하나요? 한꺼번에 읽어서 처리해주면 되는건가요?
*자료 파일 레코드 구조
Dreal file (DLssvvv.dat : 시간)
Record Size (32 item) ⇒ 80 Byte
Record position Description
Format
1, 2 Year (4 digits) : 2byte integer
3 Month : 1byte integer
4 Day : 1byte integer
5 Hour(0-23) : 1byte integer
6 Minutes : 1byte integer
7 Item 1-4 missing data flag pack data
8 Item 5-8 missing data flag pack data
9 Item 9-12 missing data flag pack data
10 Item 13-16 missing data flag pack data
11 Item 17-20 missing data flag pack data
12 Item 21-24 missing data flag pack data
13 Item 25-28 missing data flag pack data
14 Item 29-32 missing data flag pack data
15, 16 Item 1 data : 2byte integer
17, 18 Item 2 data : 2byte integer
19, 20 Item 3 data : 2byte integer
21, 22 Item 4 data : 2byte integer
23, 24 Item 5 data : 2byte integer
. .
. .
. .
73, 74 Item 30 data : 2byte integer
75, 76 Item 31 data : 2byte integer
77, 78 Item 32 data : 2byte integer
79, 80 unused
(1) 1 Byte integer :
An integer number 1 byte in length with a value from 0 to 255
(2) 2 Byte integer :
An integer number 2 byte in length with a value from -32768 to +32768
To calculate the actual density value of an item, the item value is divided
by 10 raised to the power of the decimal point location value given in the
DCT.
For example, if the item value is 500 and the decimal point location value
is 2 the resulting item value would be 5.0(500/10 power of 2=5.0)
(3) pack data :
The status of each item at any particular interval is recorded in a 2 bit area.
Each pack data field is 1 byte in length and contains the value for item 1,
bits 2 & 3 contain the value for item 2, etc
2 bit area Description
00 Normal data (정상)
01 Missing data due to maintenance (조정중)
10 Missing data due poor movement (동작불량)
11 Missing data due to power down (전원 단절)
pack data byte B7,B6
B5,B4
B3,B2
B1,B0
item 1-4 position 7 4
3
2
1
item 5-8 position 8 8
7
6
5
item 9-12 position 9 12
11
10
9
item 13-16 position 10 16
15
14
13
item 17-20 position 11 20
19
18
17
item 21-24 position 12 24
23
22
21
item 25-28 position 13 28
27
26
25
item 29-32 position 14 32
31
30
29
smleelms 님이 쓰신 글 :
: 일단 파일을 읽는 함수는 여러가지가 있습니다. 그중에 편한것을 사용하시면 될거구요..
: 예를 든다면...
:
: byte buff[1024];
: TFileStream *infs;
: try
: {
: try
: {
: infs = new TFileStream("c:\\dl05005.dat", fmOpenRead);
: infs->Seek(0, soFromBeginning);
: infs->ReadBuffer(buff, sizeof(buff)); // 파일사이즈만큼 또는 블럭사이만큼이 되겠지요
: }
: catch(const Exception& e)
: {
: Application->MessageBox(e.Message.c_str(), "File Open/Read Error", MB_OK|MB_ICONERROR);
: }
:
: }
: __finally
: {
: delete infs;
: }
:
:
: 그런데 실제로 올려주신 파일을 위의 예제처럼 buff에 읽어들인다고 하더라도...
: 저넘들을 어떻게 해석해야 되는지는 파일저장시 했던 과정의 역으로 해석이 되어야 한다는 겁니다.
:
: 즉.. 올려주신 내용이 11122120040820235000000.~~~
: 이렇게 되더라도.. 저내용이 그냥 integer 데이터인지.. float 데이터인지.. 아니면
: struct {
: int aaa;
: float bbb;
: char ccc;
: }
: 처럼 저장된 데이터인지 알 수가 없다는겁니다. 올려주신 데이터를 보면 숫자(물론 그냥 char일수도 있습니다.)뿐 아니라 dot에 알파벳까지 있으니 더 알수가 없지요.
:
: 그리고 또 다른 측면에서 보면 지금 제시해주신 원본 데이터가 다른 프로그램에서 읽어들인것을 보여주신것 같은데요..
: 그렇다면 cnt 파일과 dat 파일이 서로 연관되어 있다고 볼 수도 있습니다.
: ( .cnt 파일은 가장 많이 사용되기로는 "Windows 또는 기타 시스템, 도움말 색인 등의 목적으로 사용되는 콘텐츠 파일"이라고 소개되기도 하네요..)
:
: 그렇다면 더더욱 저장할때의 포맷을 알아야만이 제대로 읽어들일 수가 있겠지요.
:
:
: 30억 님이 쓰신 글 :
: : 답변감사드립니다.
: : 지금 파일을 읽으면 원본 데이터가
: : 11122120040820235000000.002P00007.0U000.001P000.040P0000.40P00000.0P000.055P000.015P0000.01P00000.0P0000013D00001.6M00023.8C1000.0021017.0001000.0021000.0431000.411000100020001001700010000##
: : 이런식으로 죽 나열되어 있는 데이터 입니다. 그런데 제가 이 바이너리 파일을 만든게 아니라 다른데에서 만든 파일을 제 프로그램에서 읽어들여서 아스키로 바꿔주고 싶거든요.
: : 그런데 제가 초보라 바이너리 파일을 읽는 방법을 잘 모르겠습니다.
: : 읽어도 이상한 값으로만 깨지고. 어떻게 해야 읽을수 있을까요? 그냥 읽으면 된다고는 하는데 그 방식을 몰라서 .... 부탁드립니다.
: :
: : smleelms 님이 쓰신 글 :
: : : 음.. 바이너리 파일 2개를 첨부하셨는데요..
: : : 바이너리로 읽는 방식이 중요한게 아니라, 이 바어너리 데이터가 어떤 포맷으로 저장된, 무엇을 의미하는 데이터인가가 중요하다고 하겠지요..
: : :
: : : 실제로 올려주신 바이너리 데이터를 메모리에 읽어들여도 그데이터들을 어떤 데이터 형태로 저장(대입)하느냐에 (ex : char, float, int , struct...) 따라서 다를테니까요..
: : :
: : : 무엇보다도 올려주신 바이너리 파일이 어떠한 형태로 저장이 된것인지를 아셔야, 읽어들여도 디코딩이 되겠죠.
: : :
: : : 물론 아신다면 질문에 그 부분에 대한 언급이 있었겠지만, 바이너리 파일 2개 올리시고 읽을 수 없냐고 하시길래 노파심에 적어봅니다. (제가 잘 몰라서 그럴수도 있습니다.. 양해해 주시길.. ^^;)
: : :
: : : 그럼.. 부디 원하시는바를 이루시길...
: : :
: : :
: : : 30억 님이 쓰신 글 :
: : : : 바이너리 파일을 읽어주세요.
: : : : 이 파일을 읽어야 하는데 잘 안되네요.
: : : : Q&A에 나온 방식으로 읽었는데 원래 데이터가 이상한건지
: : : : 아니면 바이너리 읽는 방식이 다른 방식이 있는지 알고 싶습니다.
: : : : 고수님들 한번 읽어봐주세요.부탁드립니다.
|