📄 jcledi_ansix12.pas
字号:
Result := InsertEDIDataObject(InsertIndex);
end;
function TEDITransactionSet.InsertSegment(InsertIndex: Integer; Segment: TEDISegment): Integer;
begin
Result := InsertEDIDataObject(InsertIndex, Segment);
end;
function TEDITransactionSet.InsertSegments(InsertIndex, Count: Integer): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, Count);
end;
function TEDITransactionSet.InsertSegments(InsertIndex: Integer;
SegmentArray: TEDISegmentArray): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, TEDIDataObjectArray(SegmentArray));
end;
function TEDITransactionSet.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
if FDelimiters = nil then // Attempt to assign the delimiters
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
begin
if Assigned(Parent.Delimiters) then
begin
Result := Parent.Delimiters;
Exit;
end;
if Assigned(Parent.Parent) and (Parent.Parent is TEDIInterchangeControl) then
Result := Parent.Parent.Delimiters;
end;
end;
function TEDITransactionSet.InternalCreateSegment: TEDISegment;
begin
Result := TEDISegment.Create(Self);
end;
procedure TEDITransactionSet.InternalCreateHeaderTrailerSegments;
begin
FSTSegment := TEDITransactionSetSegment.Create(Self);
FSESegment := TEDITransactionSetSegment.Create(Self);
end;
procedure TEDITransactionSet.SetSegment(Index: Integer; Segment: TEDISegment);
begin
SetEDIDataObject(Index, Segment);
end;
procedure TEDITransactionSet.SetSESegment(const SESegment: TEDITransactionSetSegment);
begin
FreeAndNil(FSESegment);
FSESegment := SESegment;
if Assigned(FSESegment) then
FSESegment.Parent := Self;
end;
procedure TEDITransactionSet.SetSTSegment(const STSegment: TEDITransactionSetSegment);
begin
FreeAndNil(FSTSegment);
FSTSegment := STSegment;
if Assigned(FSTSegment) then
FSTSegment.Parent := Self;
end;
function TEDITransactionSet.InternalCreateEDIDataObject: TEDIDataObject;
begin
Result := InternalCreateSegment;
end;
//=== { TEDIFunctionalGroup } ================================================
constructor TEDIFunctionalGroup.Create(Parent: TEDIDataObject; TransactionSetCount: Integer);
begin
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
inherited Create(Parent, TransactionSetCount)
else
inherited Create(nil, TransactionSetCount);
FEDIDOT := ediFunctionalGroup;
InternalCreateHeaderTrailerSegments;
end;
destructor TEDIFunctionalGroup.Destroy;
begin
FGSSegment.Free;
FGESegment.Free;
inherited Destroy;
end;
function TEDIFunctionalGroup.AddTransactionSet: Integer;
begin
Result := AddEDIDataObject;
end;
function TEDIFunctionalGroup.AddTransactionSets(Count: Integer): Integer;
begin
Result := AddEDIDataObjects(Count);
end;
function TEDIFunctionalGroup.AppendTransactionSet(TransactionSet: TEDITransactionSet): Integer;
begin
Result := AppendEDIDataObject(TransactionSet);
end;
function TEDIFunctionalGroup.AppendTransactionSets(
TransactionSetArray: TEDITransactionSetArray): Integer;
begin
Result := AppendEDIDataObjects(TEDIDataObjectArray(TransactionSetArray));
end;
function TEDIFunctionalGroup.Assemble: string;
var
I: Integer;
begin
FData := '';
FLength := 0;
Result := '';
if not Assigned(FDelimiters) then // Attempt to assign the delimiters
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError020);
end;
FData := FGSSegment.Assemble;
FGSSegment.Data := '';
if GetCount > 0 then
for I := 0 to GetCount - 1 do
if Assigned(FEDIDataObjects[I]) then
FData := FData + FEDIDataObjects[I].Assemble;
DeleteTransactionSets;
FData := FData + FGESegment.Assemble;
FGESegment.Data := '';
FLength := Length(FData);
Result := FData;
FState := ediAssembled;
end;
procedure TEDIFunctionalGroup.DeleteTransactionSet(Index: Integer);
begin
DeleteEDIDataObject(Index);
end;
procedure TEDIFunctionalGroup.DeleteTransactionSet(TransactionSet: TEDITransactionSet);
begin
DeleteEDIDataObject(TransactionSet);
end;
procedure TEDIFunctionalGroup.DeleteTransactionSets;
begin
DeleteEDIDataObjects;
end;
procedure TEDIFunctionalGroup.DeleteTransactionSets(Index, Count: Integer);
begin
DeleteEDIDataObjects(Index, Count);
end;
procedure TEDIFunctionalGroup.Disassemble;
var
I, StartPos, SearchResult: Integer;
begin
FGSSegment.Data := '';
FGSSegment.DeleteElements;
FGESegment.Data := '';
FGESegment.DeleteElements;
DeleteTransactionSets;
// Check delimiter assignment
if not Assigned(FDelimiters) then
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError019);
end;
// Find Functional Group Header Segment
StartPos := 1;
// Search for Functional Group Header
if FGHSegmentId + FDelimiters.ED = Copy(FData, 1, Length(FGHSegmentId + FDelimiters.ED)) then
begin
// Search for Functional Group Header Segment Terminator
SearchResult := StrSearch(FDelimiters.SD, FData, 1);
if (SearchResult - StartPos) > 0 then // data exists
begin
FGSSegment.Data := Copy(FData, 1, (SearchResult + FDelimiters.SDLen) - 1);
FGSSegment.Disassemble;
end
else
raise EJclEDIError.CreateRes(@RsEDIError021);
end
else
raise EJclEDIError.CreateRes(@RsEDIError022);
// Search for Transaction Set Header
SearchResult := StrSearch(FDelimiters.SD + TSHSegmentId + FDelimiters.ED, FData, StartPos);
if SearchResult <= 0 then
raise EJclEDIError.CreateRes(@RsEDIError027);
// Set next start position
StartPos := SearchResult + FDelimiters.SDLen; // Move past the delimiter
// Continue
while SearchResult <> 0 do
begin
// Search for Transaction Set Trailer
SearchResult := StrSearch(FDelimiters.SD + TSTSegmentId + FDelimiters.ED, FData, StartPos);
if SearchResult <> 0 then
begin
// Set the next start position
SearchResult := SearchResult + FDelimiters.SDLen; // Move past the delimiter
// Search for the end of Transaction Set Trailer
SearchResult := StrSearch(FDelimiters.SD, FData, SearchResult);
if SearchResult <> 0 then
begin
I := AddTransactionSet;
FEDIDataObjects[I].Data :=
Copy(FData, StartPos, ((SearchResult - StartPos) + FDelimiters.SDLen));
FEDIDataObjects[I].Disassemble;
end
else
raise EJclEDIError.CreateRes(@RsEDIError028);
end
else
raise EJclEDIError.CreateRes(@RsEDIError029);
// Set the next start position
StartPos := SearchResult + FDelimiters.SDLen; // Move past the delimiter
//
// Verify the next record is a Transaction Set Header
if (TSHSegmentId + FDelimiters.ED) <>
Copy(FData, StartPos, (Length(TSHSegmentId) + FDelimiters.EDLen)) then
Break;
end;
// Set the next start position
StartPos := SearchResult + FDelimiters.SDLen; // Move past the delimiter
// Find Functional Group Trailer Segment
if (FGTSegmentId + FDelimiters.ED) =
Copy(FData, StartPos, Length(FGTSegmentId + FDelimiters.ED)) then
begin
// Find Functional Group Trailer Segment Terminator
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos + FDelimiters.SDLen);
if (SearchResult - StartPos) > 0 then // data exists
begin
FGESegment.Data := Copy(FData, StartPos, (SearchResult + FDelimiters.SDLen));
FGESegment.Disassemble;
end
else
raise EJclEDIError.CreateRes(@RsEDIError023);
end
else
raise EJclEDIError.CreateRes(@RsEDIError024);
FData := '';
FState := ediDisassembled;
end;
function TEDIFunctionalGroup.GetTransactionSet(Index: Integer): TEDITransactionSet;
begin
Result := TEDITransactionSet(GetEDIDataObject(Index));
end;
function TEDIFunctionalGroup.InsertTransactionSet(InsertIndex: Integer): Integer;
begin
Result := InsertEDIDataObject(InsertIndex);
end;
function TEDIFunctionalGroup.InsertTransactionSet(InsertIndex: Integer;
TransactionSet: TEDITransactionSet): Integer;
begin
Result := InsertEDIDataObject(InsertIndex, TransactionSet);
end;
function TEDIFunctionalGroup.InsertTransactionSets(InsertIndex: Integer;
TransactionSetArray: TEDITransactionSetArray): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, TEDIDataObjectArray(TransactionSetArray));
end;
function TEDIFunctionalGroup.InsertTransactionSets(InsertIndex, Count: Integer): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, Count);
end;
function TEDIFunctionalGroup.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
// Attempt to assign the delimiters
if not Assigned(FDelimiters) then
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
Result := Parent.Delimiters;
end;
function TEDIFunctionalGroup.InternalCreateTransactionSet: TEDITransactionSet;
begin
Result := TEDITransactionSet.Create(Self);
end;
procedure TEDIFunctionalGroup.InternalCreateHeaderTrailerSegments;
begin
FGSSegment := TEDIFunctionalGroupSegment.Create(Self);
FGESegment := TEDIFunctionalGroupSegment.Create(Self);
end;
procedure TEDIFunctionalGroup.SetTransactionSet(Index: Integer; TransactionSet: TEDITransactionSet);
begin
SetEDIDataObject(Index, TransactionSet);
end;
procedure TEDIFunctionalGroup.SetGESegment(const GESegment: TEDIFunctionalGroupSegment);
begin
FreeAndNil(FGESegment);
FGESegment := GESegment;
if Assigned(FGESegment) then
FGESegment.Parent := Self;
end;
procedure TEDIFunctionalGroup.SetGSSegment(const GSSegment: TEDIFunctionalGroupSegment);
begin
FreeAndNil(FGSSegment);
FGSSegment := GSSegment;
if Assigned(FGSSegment) then
FGSSegment.Parent := Self;
end;
function TEDIFunctionalGroup.InternalCreateEDIDataObject: TEDIDataObject;
begin
Result := InternalCreateTransactionSet;
end;
//== { TEDIInterchangeControl } ==============================================
constructor TEDIInterchangeControl.Create(Parent: TEDIDataObject; FunctionalGroupCount: Integer);
begin
if Assigned(Parent) and (Parent is TEDIFile) then
inherited Create(Parent, FunctionalGroupCount)
else
inherited Create(nil, FunctionalGroupCount);
FEDIDOT := ediInterchangeControl;
InternalCreateHeaderTrailerSegments;
FTA1Segments := TEDIObjectList.Create;
end;
destructor TEDIInterchangeControl.Destroy;
begin
FTA1Segments.Clear;
FTA1Segments.Free;
FISASegment.Free;
FIEASegment.Free;
FreeAndNil(FDelimiters);
inherited Destroy;
end;
function TEDIInterchangeControl.AddFunctionalGroup: Integer;
begin
Result := AddEDIDataObject;
end;
function TEDIInterchangeControl.AddFunctionalGroups(Count: Integer): Integer;
begin
Result := AddEDIDataObjects(Count);
end;
function TEDIInterchangeControl.AppendFunctionalGroup(
FunctionalGroup: TEDIFunctionalGroup): Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -