Q&A

  • 클래스의 멤버변수따위를 전부 파일로 저장했다가 불러오기?
아래처럼 복잡한 클래스의 변수들을 전부다 파일로 저장했다가..그대로 다시 불러올수있는방법없나요??

일일이 변수하나하나 집어넣기는..너무.힘들 것 같아서요.

블럭라이트로 인스턴스를 집어넣더니..예상대로 포인터만 저장되더군요...

이겅..무슨..질문인지.아시겠죠?? ^^;;;

고수님들 도아주세요~~~~~~



type

TLogProcess = class (TObject)

public

Mail_E_N, Mail_ES_N, Mail_ER_N : Integer;

Mail_EA_N, Mail_RA_N, Mail_SA_N : Real;

Result_S_N, Result_F_N, Result_D_N : Integer;

Add_RA_N, Add_SA_N: Real;

Host_RA_N, Host_SA_N: Real;

Host_U_N, Add_U_N : Integer;

Mail_E_B , Mail_ES_B, Mail_ER_B : Int64;

Mail_EA_B, Mail_RA_B, Mail_SA_B : Real;

Result_D_B, Result_F_B, Result_S_B : Int64;

Add_SA_B, Add_RA_B : Real;

Host_U_B, Add_U_B : Int64;

Host_RA_B, Host_SA_B : Real;

Delay_E, Delay_A, Delay_BPS : Real;

Start_DT : TDateTime;

EMail_String, Host_String : String;

Email_ID, Host : String;



Sendnum21 : Array[0..23] of Integer;

Recnum21 : Array[0..23] of Integer;

TotalRec21 : Integer;

TotalSnd21 : Integer;



Sendnum22 : Array[0..23] of Integer;

Recnum22 : Array[0..23] of Integer;

TotalRec22 : Integer;

TotalSnd22 : Integer;



Sendnum23 : Array[0..6] of Integer;

Recnum23 : Array[0..6] of Integer;

TotalRec23 : Integer;

TotalSnd23 : Integer;



Sendnum24 : Array[0..6] of Integer;

Recnum24 : Array[0..6] of Integer;

TotalRec24 : Integer;

TotalSnd24 : Integer;



AnalRecord25 : Array of TAnalRecord;

AnalRecord26 : Array of TAnalRecord;

AnalRecord27 : Array of TAnalRecord;

AnalRecord28 : Array of TAnalRecord;

AnalRecord29 : Array of TAnalRecord;

ErrorMaxNum : Integer;



Header : String;

CurrentLog : String;

pCurrentLog : pChar;

StartLine : PChar;

LogLine : Array[0..10] of String;

SizeofFile,SpPos : Integer;

HostMaxNum : Integer; // host의 총갯수

MailMaxNum : Integer; // e-mail의 총갯수

LogArray : Array of LongInt; // 인덱싱 데이타 저장

FH : File of Char; // 파일 핸들

TotalLog : Integer; // 전체 라인수(인덱싱된 로그라인)

LogRecord : TLogRecord; // 분석된 로그라인을 저장할 공간

FileName: TFileName; // 큐멜로그 파일이름

BlockBegin : Integer; //블럭시작의 파일포인터

BlockEnd : Integer; // 블럭끝의 파일포인터

MaxLine : Integer; // 한번에 로딩 할 최대 라인

LogString : pChar; // 로딩된 블럭 데이타

LogSize : Integer; // 로그 한 줄의 최대 크기

Buffer : PChar; // 인덱싱을위한 버터..

Function HighHost(StartNum: Integer ; Kind : Integer; AnalRecord: Array of TAnalRecord): Integer; // 가장큰 TanalRecord를 구함

Procedure SortHost(Kind : Integer; var AnalRecord: Array of TAnalRecord);

//TanalRecord를 소팅함 Kind - 1:Send Host, 2:Receive Host, 3:Send Mail, 4:Receive Mail

Procedure MakeAnalData; // 로그분석 엔진!!!!! Core!!!

Procedure OpenLogFile; // 파일열고 인덱싱

procedure GetLogRecord(RequestLine: Integer); // 요청라인의 로그를 분석 해서 LogRecord에 저장

Function UnixtimetoDateTime(Unixtime: Integer): TDatetime; //n64 UnixTimeStamp to TDatetime

Function GoThere(Here : Double): Integer; // 특정시간의 로그라인으로 잽싸게 이동

// procedure AnalDataSave; // 로그분석 데아타 저장

// procedure AnalDataLoad; // 로그분석 데아타 로딩

{ Public declarations }

end;

1  COMMENTS
  • Profile
    david 2000.09.28 02:07
    김경태 wrote:

    > 아래처럼 복잡한 클래스의 변수들을 전부다 파일로 저장했다가..그대로 다시 불러올수있는방법없나요??

    > 일일이 변수하나하나 집어넣기는..너무.힘들 것 같아서요.

    > 블럭라이트로 인스턴스를 집어넣더니..예상대로 포인터만 저장되더군요...

    > 이겅..무슨..질문인지.아시겠죠?? ^^;;;

    > 고수님들 도아주세요~~~~~~

    >

    > type

    > TLogProcess = class (TObject)

    > public

    > Mail_E_N, Mail_ES_N, Mail_ER_N : Integer;

    > Mail_EA_N, Mail_RA_N, Mail_SA_N : Real;

    > Result_S_N, Result_F_N, Result_D_N : Integer;

    > Add_RA_N, Add_SA_N: Real;

    > Host_RA_N, Host_SA_N: Real;

    > Host_U_N, Add_U_N : Integer;

    > Mail_E_B , Mail_ES_B, Mail_ER_B : Int64;

    > Mail_EA_B, Mail_RA_B, Mail_SA_B : Real;

    > Result_D_B, Result_F_B, Result_S_B : Int64;

    > Add_SA_B, Add_RA_B : Real;

    > Host_U_B, Add_U_B : Int64;

    > Host_RA_B, Host_SA_B : Real;

    > Delay_E, Delay_A, Delay_BPS : Real;

    > Start_DT : TDateTime;

    > EMail_String, Host_String : String;

    > Email_ID, Host : String;

    >

    > Sendnum21 : Array[0..23] of Integer;

    > Recnum21 : Array[0..23] of Integer;

    > TotalRec21 : Integer;

    > TotalSnd21 : Integer;

    >

    > Sendnum22 : Array[0..23] of Integer;

    > Recnum22 : Array[0..23] of Integer;

    > TotalRec22 : Integer;

    > TotalSnd22 : Integer;

    >

    > Sendnum23 : Array[0..6] of Integer;

    > Recnum23 : Array[0..6] of Integer;

    > TotalRec23 : Integer;

    > TotalSnd23 : Integer;

    >

    > Sendnum24 : Array[0..6] of Integer;

    > Recnum24 : Array[0..6] of Integer;

    > TotalRec24 : Integer;

    > TotalSnd24 : Integer;

    >

    > AnalRecord25 : Array of TAnalRecord;

    > AnalRecord26 : Array of TAnalRecord;

    > AnalRecord27 : Array of TAnalRecord;

    > AnalRecord28 : Array of TAnalRecord;

    > AnalRecord29 : Array of TAnalRecord;

    > ErrorMaxNum : Integer;

    >

    > Header : String;

    > CurrentLog : String;

    > pCurrentLog : pChar;

    > StartLine : PChar;

    > LogLine : Array[0..10] of String;

    > SizeofFile,SpPos : Integer;

    > HostMaxNum : Integer; // host의 총갯수

    > MailMaxNum : Integer; // e-mail의 총갯수

    > LogArray : Array of LongInt; // 인덱싱 데이타 저장

    > FH : File of Char; // 파일 핸들

    > TotalLog : Integer; // 전체 라인수(인덱싱된 로그라인)

    > LogRecord : TLogRecord; // 분석된 로그라인을 저장할 공간

    > FileName: TFileName; // 큐멜로그 파일이름

    > BlockBegin : Integer; //블럭시작의 파일포인터

    > BlockEnd : Integer; // 블럭끝의 파일포인터

    > MaxLine : Integer; // 한번에 로딩 할 최대 라인

    > LogString : pChar; // 로딩된 블럭 데이타

    > LogSize : Integer; // 로그 한 줄의 최대 크기

    > Buffer : PChar; // 인덱싱을위한 버터..

    > Function HighHost(StartNum: Integer ; Kind : Integer; AnalRecord: Array of TAnalRecord): Integer; // 가장큰 TanalRecord를 구함

    > Procedure SortHost(Kind : Integer; var AnalRecord: Array of TAnalRecord);

    > //TanalRecord를 소팅함 Kind - 1:Send Host, 2:Receive Host, 3:Send Mail, 4:Receive Mail

    > Procedure MakeAnalData; // 로그분석 엔진!!!!! Core!!!

    > Procedure OpenLogFile; // 파일열고 인덱싱

    > procedure GetLogRecord(RequestLine: Integer); // 요청라인의 로그를 분석 해서 LogRecord에 저장

    > Function UnixtimetoDateTime(Unixtime: Integer): TDatetime; //n64 UnixTimeStamp to TDatetime

    > Function GoThere(Here : Double): Integer; // 특정시간의 로그라인으로 잽싸게 이동

    > // procedure AnalDataSave; // 로그분석 데아타 저장

    > // procedure AnalDataLoad; // 로그분석 데아타 로딩

    > { Public declarations }

    > end;



    만약 제가 이런경우라면...

    Stream을 쓰겠습니다.

    델파이도 내부적으로 폼이나 컴포넌트의 값을 스트림화시켜서 저장합니다.

    님의 말씀대로 하나하나 저장한다는건 너무 무시한 처사죠...

    그런즉슨, 전체를 메모리버퍼에 넣은다음 스트림으로 집어넣으면 되겠죠..