⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcledi_unedifact.pas

📁 East make Tray Icon in delphi
💻 PAS
📖 第 1 页 / 共 5 页
字号:

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
  begin
    // 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;
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;

//=== { TEDIMessage } ========================================================

constructor TEDIMessage.Create(Parent: TEDIDataObject; SegmentCount: Integer);
begin
  if Assigned(Parent) and
    ((Parent is TEDIFunctionalGroup) or (Parent is TEDIInterchangeControl)) then
    inherited Create(Parent, SegmentCount)
  else
    inherited Create(nil, SegmentCount);
  FEDIDOT := ediMessage;
  InternalCreateHeaderTrailerSegments;
end;

destructor TEDIMessage.Destroy;
begin
  FUNTSegment.Free;
  FUNHSegment.Free;
  inherited Destroy;
end;

function TEDIMessage.AddSegment: Integer;
begin
  Result := AddEDIDataObject;
end;

function TEDIMessage.AddSegments(Count: Integer): Integer;
begin
  Result := AddEDIDataObjects(Count);
end;

function TEDIMessage.AppendSegment(Segment: TEDISegment): Integer;
begin
  Result := AppendEDIDataObject(Segment);
end;

function TEDIMessage.AppendSegments(SegmentArray: TEDISegmentArray): Integer;
begin
  Result := AppendEDIDataObjects(TEDIDataObjectArray(SegmentArray));
end;

function TEDIMessage.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(@RsEDIError031);
  end;

  FData := FUNHSegment.Assemble;
  FUNHSegment.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 + FUNTSegment.Assemble;
  FUNTSegment.Data := '';

  FLength := Length(FData);
  Result := FData;

  FState := ediAssembled;
end;

procedure TEDIMessage.DeleteSegment(Index: Integer);
begin
  DeleteEDIDataObject(Index);
end;

procedure TEDIMessage.DeleteSegment(Segment: TEDISegment);
begin
  DeleteEDIDataObject(Segment);
end;

procedure TEDIMessage.DeleteSegments;
begin
  DeleteEDIDataObjects;
end;

procedure TEDIMessage.DeleteSegments(Index, Count: Integer);
begin
  DeleteEDIDataObjects(Index, Count);
end;

procedure TEDIMessage.Disassemble;
var
  I, StartPos, SearchResult: Integer;
  S, S2: string;
begin
  FUNHSegment.Data := '';
  FUNHSegment.DeleteElements;
  FUNTSegment.Data := '';
  FUNTSegment.DeleteElements;
  DeleteSegments;
  // Check delimiter assignment
  if not Assigned(FDelimiters) then
  begin
    FDelimiters := InternalAssignDelimiters;
    if not Assigned(FDelimiters) then
      raise EJclEDIError.CreateRes(@RsEDIError030);
  end;
  // Find the first segment
  StartPos := 1;
  SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
  while SearchResult <> 0 do
  begin
    S := Copy(FData, StartPos, Length(UNHSegmentId));
    S2 := Copy(FData, StartPos, Length(UNTSegmentId));
    if (S <> UNHSegmentId) and (S2 <> UNTSegmentId) 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 = UNHSegmentId then
    begin
      if (SearchResult - StartPos) > 0 then // data exists
      begin
        FUNHSegment.Data := Copy(FData, StartPos,
          ((SearchResult - StartPos) + FDelimiters.SDLen));
        FUNHSegment.Disassemble;
      end;
    end
    else
    if S2 = UNTSegmentId then
    begin
      if (SearchResult - StartPos) > 0 then // data exists
      begin
        FUNTSegment.Data := Copy(FData, StartPos,
          ((SearchResult - StartPos) + FDelimiters.SDLen));
        FUNTSegment.Disassemble;
      end;
    end;
    StartPos := SearchResult + FDelimiters.SDLen;
    SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
  end;
  FData := '';
  FState := ediDisassembled;
end;

function TEDIMessage.GetSegment(Index: Integer): TEDISegment;
begin
  Result := TEDISegment(GetEDIDataObject(Index));
end;

function TEDIMessage.InsertSegment(InsertIndex: Integer): Integer;
begin
  Result := InsertEDIDataObject(InsertIndex);
end;

function TEDIMessage.InsertSegment(InsertIndex: Integer; Segment: TEDISegment): Integer;
begin
  Result := InsertEDIDataObject(InsertIndex, Segment);
end;

function TEDIMessage.InsertSegments(InsertIndex, Count: Integer): Integer;
begin
  Result := InsertEDIDataObjects(InsertIndex, Count);
end;

function TEDIMessage.InsertSegments(InsertIndex: Integer;
  SegmentArray: TEDISegmentArray): Integer;
begin
  Result := InsertEDIDataObjects(InsertIndex, TEDIDataObjectArray(SegmentArray));
end;

function TEDIMessage.InternalAssignDelimiters: TEDIDelimiters;
begin
  Result := nil;
  if FDelimiters = nil then // Attempt to assign the delimiters
    if Assigned(Parent) and
      ((Parent is TEDIFunctionalGroup) or (Parent is TEDIInterchangeControl)) then
      if Assigned(Parent.Delimiters) then
        Result := Parent.Delimiters
      else
      if Assigned(Parent.Parent) and (Parent.Parent is TEDIInterchangeControl) then
        Result := Parent.Parent.Delimiters;
end;

function TEDIMessage.InternalCreateSegment: TEDISegment;
begin
  Result := TEDISegment.Create(Self);
end;

procedure TEDIMessage.InternalCreateHeaderTrailerSegments;
begin
  FUNHSegment := TEDIMessageSegment.Create(Self);
  FUNTSegment := TEDIMessageSegment.Create(Self);
end;

procedure TEDIMessage.SetSegment(Index: Integer; Segment: TEDISegment);
begin
  SetEDIDataObject(Index, Segment);
end;

procedure TEDIMessage.SetUNTSegment(const UNTSegment: TEDIMessageSegment);
begin
  FreeAndNil(FUNTSegment);
  FUNTSegment := UNTSegment;
  if Assigned(FUNTSegment) then
    FUNTSegment.Parent := Self;
end;

procedure TEDIMessage.SetUNHSegment(const UNHSegment: TEDIMessageSegment);
begin
  FreeAndNil(FUNHSegment);
  FUNHSegment := UNHSegment;
  if Assigned(FUNHSegment) then
    FUNHSegment.Parent := Self;
end;

function TEDIMessage.InternalCreateEDIDataObject: TEDIDataObject;
begin
  Result := InternalCreateSegment;
end;

//=== { TEDIFunctionalGroup } ================================================

constructor TEDIFunctionalGroup.Create(Parent: TEDIDataObject; MessageCount: Integer);
begin
  if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
    inherited Create(Parent, MessageCount)
  else
    inherited Create(nil, MessageCount);
  FEDIDOT := ediFunctionalGroup;
  InternalCreateHeaderTrailerSegments;
end;

destructor TEDIFunctionalGroup.Destroy;
begin
  FUNGSegment.Free;
  FUNESegment.Free;
  inherited Destroy;
end;

function TEDIFunctionalGroup.AddMessage: Integer;
begin
  Result := AddEDIDataObject;
end;

function TEDIFunctionalGroup.AddMessages(Count: Integer): Integer;
begin
  Result := AddEDIDataObjects(Count);
end;

function TEDIFunctionalGroup.AppendMessage(Message: TEDIMessage): Integer;
begin
  Result := AppendEDIDataObject(Message);
end;

function TEDIFunctionalGroup.AppendMessages(
  MessageArray: TEDIMessageArray): Integer;
begin
  Result := AppendEDIDataObjects(TEDIDataObjectArray(MessageArray));
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 := FUNGSegment.Assemble;
  FUNGSegment.Data := '';

  if GetCount > 0 then
    for I := 0 to GetCount - 1 do
      if Assigned(FEDIDataObjects[I]) then
        FData := FData + FEDIDataObjects[I].Assemble;

  DeleteMessages;

  FData := FData + FUNESegment.Assemble;
  FUNESegment.Data := '';

  FLength := Length(FData);
  Result := FData;

  FState := ediAssembled;
end;

procedure TEDIFunctionalGroup.DeleteMessage(Index: Integer);
begin
  DeleteEDIDataObject(Index);
end;

procedure TEDIFunctionalGroup.DeleteMessage(Message: TEDIMessage);
begin
  DeleteEDIDataObject(Message);
end;

procedure TEDIFunctionalGroup.DeleteMessages;
begin
  DeleteEDIDataObjects;
end;

procedure TEDIFunctionalGroup.DeleteMessages(Index, Count: Integer);
begin
  DeleteEDIDataObjects(Index, Count);
end;

procedure TEDIFunctionalGroup.Disassemble;
var
  I, StartPos, SearchResult: Integer;
begin
  FUNGSegment.Data := '';
  FUNGSegment.DeleteElements;
  FUNESegment.Data := '';
  FUNESegment.DeleteElements;
  DeleteMessages;
  // Check delimiter assignment
  if not Assigned(FDelimiters) then
  begin
    FDelimiters := InternalAssignDelimiters;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -