아래처럼 복잡한 클래스의 변수들을 전부다 파일로 저장했다가..그대로 다시 불러올수있는방법없나요??
일일이 변수하나하나 집어넣기는..너무.힘들 것 같아서요.
블럭라이트로 인스턴스를 집어넣더니..예상대로 포인터만 저장되더군요...
이겅..무슨..질문인지.아시겠죠?? ^^;;;
고수님들 도아주세요~~~~~~
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;
> 아래처럼 복잡한 클래스의 변수들을 전부다 파일로 저장했다가..그대로 다시 불러올수있는방법없나요??
> 일일이 변수하나하나 집어넣기는..너무.힘들 것 같아서요.
> 블럭라이트로 인스턴스를 집어넣더니..예상대로 포인터만 저장되더군요...
> 이겅..무슨..질문인지.아시겠죠?? ^^;;;
> 고수님들 도아주세요~~~~~~
>
> 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을 쓰겠습니다.
델파이도 내부적으로 폼이나 컴포넌트의 값을 스트림화시켜서 저장합니다.
님의 말씀대로 하나하나 저장한다는건 너무 무시한 처사죠...
그런즉슨, 전체를 메모리버퍼에 넣은다음 스트림으로 집어넣으면 되겠죠..