|
이제서야 뒤늦게봤네요.,ㅠㅠ
감사합니다 엄청 끙끙댔는데
그때 끙끙대고 딴일생겨서
그거하고그러니까 답변 이제서야봤어요
이걸 한번 해봤는데
저장 제가원하는대로했는데
간혹 FFFFFF라던가 이상하게 들어가더라구요
데이터가 이상하게 들어와서 잘못된건지 아님 제 소스에 맞게 적절하게
약간 고쳐야하는지 더봐야할꺼같은대
손수 함수까지 짜주시고.ㅠㅠㅠㅠㅠ감동이.ㅠㅠ감이왔습니다
감사해요!!!!
박영목.월천 님이 쓰신 글 :
: 꾸벅... 저장은 잘 되신 것 같습니다. 눈으로 보기가 힘들어서 그렇지...
: 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배열의 문자를
: : 저장한 뒤 이걸 저기 위의 함수에 넘기는대요
: :
: :
: : 식으로 저장되니까 어떻게 해야할지 모르겠습니다
: : 제가 문자 처리를 잘못하는건지.ㅠㅠ도와주세요
|