C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[62676] Re:문자 저장 질문입니다.
박영목.월천 [gsbsoft] 1231 읽음    2010-10-14 10:39
꾸벅... 저장은 잘 되신 것 같습니다.  눈으로 보기가 힘들어서 그렇지...
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배열의 문자를
: 저장한 뒤 이걸 저기 위의 함수에 넘기는대요
:
: 
: 식으로 저장되니까 어떻게 해야할지 모르겠습니다
: 제가 문자 처리를 잘못하는건지.ㅠㅠ도와주세요

+ -

관련 글 리스트
62670 문자 저장 질문입니다. 알론소 1150 2010/10/13
62676     Re:문자 저장 질문입니다. 박영목.월천 1231 2010/10/14
62755         Re:Re:문자 저장 질문입니다.감사합니다!!! 알론소 1343 2010/10/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.