|
꾸벅... 저장은 잘 되신 것 같습니다. 눈으로 보기가 힘들어서 그렇지...
HEXEDITOR로 보시면 잘 보일 것인데... 그냥 메모장 말고...
그래서 메모장에서도 볼 수 있게.. HEX로 저장하게 끔 바꾸어 보았습니다.
참고하시고... 문자열이나 어떤 DATA 이던지... HEX로 보시기 바랍니다.
보이는 문자 안보이는 문자 다 숫자로 나타나니... 어떻게 해야할지 판단할 수 있을 것입니다.
헥사에디터 사용합시다. 저희 때는 많이 사용했는 데...
칠레 광부님들 다 구조되셨네요.... 기분이 좋군요.... ㅋㅋㅋ
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
AnsiString __fastcall PerfectFolder( AnsiString asFolder )
{
if( asFolder.Length()<1 ) return asFolder;
asFolder = asFolder.TrimLeft(); //Folder를 안정으로 보충하고
asFolder = asFolder.TrimRight(); //fedDataFolder C:가 있는가?
if( asFolder[asFolder.Length()] != '\\' ) asFolder += "\\";
return asFolder;
}
bool __fastcall CreateFolder( AnsiString asFolder )
{
asFolder = PerfectFolder( asFolder );
int len;
char *buf;
bool bRet;
bRet = true;
len = asFolder.Length();
buf = new char[len+1];
strncpy( buf, asFolder.c_str(), len );
buf[len] = 0x00;
for(int idx = 0; idx < len; idx++)
{
if(buf[idx] && buf[idx] != '\\') continue;
buf[idx] = '\0';
if( !DirectoryExists( buf ) )
{
if( CreateDir( buf )==false )
{
bRet = false;
break;
}
}
buf[idx] = '\\';
}
delete []buf;
//----------------------------------------------------------------------------
return bRet;
}
void AddMsg( char* pformat, ...)
{
FILE *fp;
String strTime, dirname, strBuf, sIniName;
char buff[8192];
va_list argptr;
sIniName = ExtractFilePath(Application->ExeName);
strTime = FormatDateTime("yyyymmddhhnnss", Now());
AnsiString asFolder;
asFolder.sprintf("%sLOG", sIniName.c_str() );
CreateFolder( asFolder ); //폴더를 없으면 만드는 부분, 폴더 없으면 저장이 안되니..
dirname.sprintf("%sLOG\\%8.8s.log", sIniName.c_str(), strTime.c_str()+2);
va_start(argptr, pformat);
int len = vsprintf(buff, pformat, argptr);
va_end(argptr);
strBuf.sprintf("%s %d, %s\n", strTime, len, buff);
//중간 중간 메세지 띄워 보시던지...
//아니면 Memo장 하나 붙혀서 그 안으로 들어오게 하는 것이 더 좋을 것인데..
//뭐 파일에 저장하셔도 되고.....
AnsiString asImsi = strTime + "\nFORMAT: " + AnsiString(pformat) + "\nDATA: ";
char str[10];
int i=0;
while( i<len )
{
wsprintf( str, "%02X ", buff[i] ); //문자 마다 보기 쉽게 간격을 하나씩 주었는 데
//이게 또 헷갈릴 수도 있으니 잘 보셔야지..
asImsi += str;
i++;
}
//계속 한 파일에 연이어 저장될 수 있도록 했습니다.
if((fp = fopen(dirname.c_str(),"a+b"))==NULL) return;
//fprintf(fp, "%s\n", strBuf);
fseek( fp, 0, SEEK_END );
fprintf(fp, "%s\n\n", asImsi.c_str() );
fclose(fp);
}
//%c 씩으로 포멧이 넘어 오면 문자들 나타날 수 있습니다.
//ASCII에 문자로 표현 안되는 것들이지요. ASCII 코드표는 있지요? 인터넷 찾으면 많이 있음
//그러니까 이런 중간 값을 보려고 하면 HEX로 표현하면 분석하기에 좋겠지요.
//그냥 저장하시고 HEXEDITER로 보셔도 되겠지만...
//그리고 이런 경우는 FORMAT도 관찰해야 합니다. 포멧도 언제 바뀔지 모르니...
//어떤 포멧 유형으로 넘어올 때 이때는 이렇게 하면 되겠다.
//감이 오겠지요...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AddMsg( "%d %d %c", 1, 2, 'A' ); //끝에 /n 없이
AddMsg( "%c %c %c %d\n", 1, 2, 'A', 40 ); //끝에 /n 있게 한줄 더 띄워지겠지요
}
//---------------------------------------------------------------------------
알론소 님이 쓰신 글 :
: 파일저장하는건데
: 이건책에도나와있는거고 기본적인건데도
: 불구하고 질문하기가 좀 죄송한대요
:
: 계속생각해봤는데 되질않아서요
: 제가 데이터를 받는데 텍스트파일에 있는것을
: 받습니다 그래서
: 데이터를 리드하면
: 일단 잘들어옵니다
: 근데 이것을 DB에 저장을 해야하는데
:
: 들어오는것이 텍스트로 들어오고 어떻게
: 처리해야할지 몰라서 일단 메모장에 저장해서
: 어떻게 들어오나 확인해보고싶어서
: 파일로 저장하고싶은데
:
: 아래가 파일로 저장하는 함수입니다
: 데이터를 여기로 넘기는대요
:
: void AddMsg(const char* pformat, ...)
: {
: FILE *fp;
: String strTime, dirname, strBuf, sIniName;
: char buff[8192];
: va_list argptr;
:
: sIniName = ExtractFilePath(Application->ExeName);
: strTime = FormatDateTime("yyyymmddhhnnss", Now());
:
: dirname.sprintf("%s\\LOG\\%8.8s.log", sIniName.c_str(), strTime.c_str()+2);
:
: va_start(argptr, pformat);
: vsprintf(buff, pformat, argptr);
: va_end(argptr);
:
: strBuf.sprintf("%s %s\n", strTime, buff);
:
: if((fp = fopen(dirname.c_str(),"a"))==NULL) return;
: fprintf(fp, "%s\n", strBuf);
: fclose(fp);
: }
:
: 그래서 확인해보려고가면
:
: 식으로 저장이 되는거에요
: 그래서 요리조리 바꿔보고 그랬는데도 잘되지가않네요
:
: 보통 char 배열에 저장해서
: ansisitring 변수에 sprintf 함수를 이용해서 char배열의 문자를
: 저장한 뒤 이걸 저기 위의 함수에 넘기는대요
:
:
: 식으로 저장되니까 어떻게 해야할지 모르겠습니다
: 제가 문자 처리를 잘못하는건지.ㅠㅠ도와주세요
|