📄 jcledi_ansix12.pas
字号:
DeleteElements;
FState := ediAssembled;
end;
procedure TEDISegment.DeleteElement(Index: Integer);
begin
DeleteEDIDataObject(Index);
end;
procedure TEDISegment.DeleteElement(Element: TEDIElement);
begin
DeleteEDIDataObject(Element);
end;
procedure TEDISegment.DeleteElements(Index, Count: Integer);
begin
DeleteEDIDataObjects(Index, Count);
end;
procedure TEDISegment.DeleteElements;
begin
DeleteEDIDataObjects;
end;
procedure TEDISegment.Disassemble;
var
I, StartPos, SearchResult: Integer;
begin
// Data Input Scenarios
// 4.) SegID*---*---~
// Composite Element Data Input Secnarios
// 9.) SegID*---*--->---~
FSegmentId := '';
DeleteElements;
if not Assigned(FDelimiters) then // Attempt to assign the delimiters
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError035);
end;
// Continue
StartPos := 1;
SearchResult := StrSearch(FDelimiters.ED, FData, StartPos);
FSegmentId := Copy(FData, 1, SearchResult - 1);
StartPos := SearchResult + 1;
SearchResult := StrSearch(FDelimiters.ED, FData, StartPos);
while SearchResult <> 0 do
begin
I := AddElement;
if (SearchResult - StartPos) > 0 then // data exists
begin
FEDIDataObjects[I].Data := Copy(FData, ((StartPos + FDelimiters.EDLen) - 1),
(SearchResult - StartPos));
FEDIDataObjects[I].Disassemble;
end;
StartPos := SearchResult + 1;
SearchResult := StrSearch(FDelimiters.ED, FData, StartPos);
end;
// Get last element before next segment
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
if SearchResult <> 0 then
begin
I := AddElement;
if (SearchResult - StartPos) > 0 then // data exists
begin
FEDIDataObjects[I].Data := Copy(FData, ((StartPos + FDelimiters.EDLen) - 1),
(SearchResult - StartPos));
FEDIDataObjects[I].Disassemble;
end;
end;
FData := '';
FState := ediDisassembled;
end;
function TEDISegment.GetElement(Index: Integer): TEDIElement;
begin
Result := TEDIElement(GetEDIDataObject(Index));
end;
function TEDISegment.InsertElement(InsertIndex: Integer): Integer;
begin
Result := InsertEDIDataObject(InsertIndex);
end;
function TEDISegment.InsertElement(InsertIndex: Integer; Element: TEDIElement): Integer;
begin
Result := InsertEDIDataObject(InsertIndex, Element);
end;
function TEDISegment.InsertElements(InsertIndex: Integer; ElementArray: TEDIElementArray): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, TEDIDataObjectArray(ElementArray));
end;
function TEDISegment.InsertElements(InsertIndex, Count: Integer): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, Count);
end;
function TEDISegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
if not Assigned(FDelimiters) then // Attempt to assign the delimiters
// Get the delimiters from the transaction set
if Assigned(Parent) and (Parent is TEDITransactionSet) then
begin
if Assigned(Parent.Delimiters) then
begin
Result := Parent.Delimiters;
Exit;
end;
// Get the delimiters from the functional group
if Assigned(Parent.Parent) and (Parent.Parent is TEDIFunctionalGroup) then
begin
if Assigned(Parent.Parent.Delimiters) then
begin
Result := Parent.Parent.Delimiters;
Exit;
end;
// Get the delimiters from the interchange control header
if Assigned(Parent.Parent.Parent) and (Parent.Parent.Parent is TEDIInterchangeControl) then
Result := Parent.Parent.Parent.Delimiters;
end;
end;
end;
function TEDISegment.InternalCreateElement: TEDIElement;
begin
Result := TEDIElement.Create(Self);
end;
procedure TEDISegment.SetElement(Index: Integer; Element: TEDIElement);
begin
SetEDIDataObject(Index, Element);
end;
function TEDISegment.InternalCreateEDIDataObject: TEDIDataObject;
begin
Result := InternalCreateElement;
end;
//=== { TEDITransactionSetSegment } ==========================================
constructor TEDITransactionSetSegment.Create(Parent: TEDIDataObject; ElementCount: Integer);
begin
inherited Create(Parent, ElementCount);
if Assigned(Parent) and (Parent is TEDITransactionSet) then
FParent := Parent;
end;
function TEDITransactionSetSegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := inherited InternalAssignDelimiters;
end;
//=== { TEDIFunctionalGroupSegment } =========================================
constructor TEDIFunctionalGroupSegment.Create(Parent: TEDIDataObject; ElementCount: Integer);
begin
inherited Create(Parent, ElementCount);
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
FParent := Parent;
end;
function TEDIFunctionalGroupSegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
// Attempt to assign the delimiters
if not Assigned(FDelimiters) then
// Get the delimiters from the functional group
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
begin
if Assigned(Parent.Delimiters) then
begin
Result := Parent.Delimiters;
Exit;
end;
// Get the delimiters from the interchange control
if Assigned(Parent.Parent) and (Parent.Parent is TEDIInterchangeControl) then
Result := Parent.Parent.Delimiters;
end;
end;
//=== { TEDIInterchangeControlSegment } =====================================
constructor TEDIInterchangeControlSegment.Create(Parent: TEDIDataObject; ElementCount: Integer);
begin
inherited Create(Parent, ElementCount);
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
FParent := Parent;
end;
function TEDIInterchangeControlSegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
// Attempt to assign the delimiters
if not Assigned(FDelimiters) then
// Get the delimiters from the interchange control
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
Result := Parent.Delimiters;
end;
//=== { TEDITransactionSet } =================================================
constructor TEDITransactionSet.Create(Parent: TEDIDataObject; SegmentCount: Integer);
begin
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
inherited Create(Parent, SegmentCount)
else
inherited Create(nil, SegmentCount);
FEDIDOT := ediTransactionSet;
InternalCreateHeaderTrailerSegments;
end;
destructor TEDITransactionSet.Destroy;
begin
FSESegment.Free;
FSTSegment.Free;
inherited Destroy;
end;
function TEDITransactionSet.AddSegment: Integer;
begin
Result := AddEDIDataObject;
end;
function TEDITransactionSet.AddSegments(Count: Integer): Integer;
begin
Result := AddEDIDataObjects(Count);
end;
function TEDITransactionSet.AppendSegment(Segment: TEDISegment): Integer;
begin
Result := AppendEDIDataObject(Segment);
end;
function TEDITransactionSet.AppendSegments(SegmentArray: TEDISegmentArray): Integer;
begin
Result := AppendEDIDataObjects(TEDIDataObjectArray(SegmentArray));
end;
function TEDITransactionSet.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(@RsEDIError026);
end;
FData := FSTSegment.Assemble;
FSTSegment.Data := '';
if GetCount > 0 then
for I := 0 to GetCount - 1 do
if Assigned(FEDIDataObjects[I]) then
FData := FData + FEDIDataObjects[I].Assemble;
DeleteSegments;
FData := FData + FSESegment.Assemble;
FSESegment.Data := '';
FLength := Length(FData);
Result := FData;
FState := ediAssembled;
end;
procedure TEDITransactionSet.DeleteSegment(Index: Integer);
begin
DeleteEDIDataObject(Index);
end;
procedure TEDITransactionSet.DeleteSegment(Segment: TEDISegment);
begin
DeleteEDIDataObject(Segment);
end;
procedure TEDITransactionSet.DeleteSegments;
begin
DeleteEDIDataObjects;
end;
procedure TEDITransactionSet.DeleteSegments(Index, Count: Integer);
begin
DeleteEDIDataObjects(Index, Count);
end;
procedure TEDITransactionSet.Disassemble;
var
I, StartPos, SearchResult: Integer;
S, S2: string;
begin
FSTSegment.Data := '';
FSTSegment.DeleteElements;
FSESegment.Data := '';
FSESegment.DeleteElements;
DeleteSegments;
// Check delimiter assignment
if not Assigned(FDelimiters) then
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError025);
end;
// Find the first segment
StartPos := 1;
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
while SearchResult <> 0 do
begin
S := Copy(FData, StartPos, Length(TSHSegmentId));
S2 := Copy(FData, StartPos, Length(TSTSegmentId));
if (S <> TSHSegmentId) and (S2 <> TSTSegmentId) then
begin
I := AddSegment;
if (SearchResult - StartPos) > 0 then // data exists
begin
FEDIDataObjects[I].Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FEDIDataObjects[I].Disassemble;
end;
end
else
if S = TSHSegmentId then
begin
if (SearchResult - StartPos) > 0 then // data exists
begin
FSTSegment.Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FSTSegment.Disassemble;
end;
end
else
if S2 = TSTSegmentId then
begin
if (SearchResult - StartPos) > 0 then // data exists
begin
FSESegment.Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FSESegment.Disassemble;
end;
end;
StartPos := SearchResult + FDelimiters.SDLen;
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
end;
FData := '';
FState := ediDisassembled;
end;
function TEDITransactionSet.GetSegment(Index: Integer): TEDISegment;
begin
Result := TEDISegment(GetEDIDataObject(Index));
end;
function TEDITransactionSet.InsertSegment(InsertIndex: Integer): Integer;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -