Untitled diff
function TTextTestImporter.ParseHeader(Lines: TStrings): Boolean;
function TTextTestImporter.ParseHeader(Lines: TStrings): Boolean;
var
var
  i, Pos1, Pos2, Pos3, Pos4, Age: Integer;
  PatientFound, DateFound: Boolean;
  Line, PatientName: String;
  Line, PatientName, AgeStr, BirthDateStr, DateStr: String;
  PatientRegex, DateRegex: TRegExpr;
  i: Integer;
begin
begin
  PatientRegex := TRegExpr.Create;
  PatientRegex.Expression := 'Paciente\s+:*(.*)\s{2,}Idade:+(\d+)\s*anos\s*Nascimento:*(.+)';
  PatientRegex.ModifierI := True;
  PatientRegex.ModifierG := True;
  DateRegex := TRegExpr.Create;
  DateRegex.Expression := 'Data\s*de\s*Cadastro\.*\s*:*(.+)';
  DateRegex.ModifierI := True;
  DateRegex.ModifierG := True;
  Result := False;
  Result := False;
  for i := 0 to Lines.Count -1 do
  PatientFound := False;
  DateFound := False;
  for i := 0 to Lines.Count - 1 do
  begin
  begin
    if Result then
    if (DateFound and PatientFound) or (i > 20) then
      Exit;
      break;
    Line := UpperCase(Trim(Lines[i]));
    Line := Trim(Lines[i]);
    if AnsiStartsStr('PACIENTE', Line) then
    if not PatientFound and PatientRegex.Exec(Line) then
    begin
    begin
      Pos1 := PosEx(':', Line, Length('PACIENTE') + 1);
      PatientFound := True;
      if Pos1 > 0 then
      PatientName := Trim(PatientRegex.Match[1]);
      begin
      AgeStr := Trim(PatientRegex.Match[2]);
        Pos2 := RPos('IDADE', Line);
      BirthDateStr := Trim(PatientRegex.Match[3]);
        if Pos2 > 0 then
      FData.Strings['name'] := PatientName;
        begin
      FData.Integers['age'] := StrToIntDef(AgeStr, 0);
          PatientName := Trim(Copy(Line, Pos1 + 1, Pos2 - Pos1 - 1));
      FData.Floats['birthdate'] := ScanDateTime('dd/mm/yy', BirthDateStr);
          if PatientName <> '' then
      continue;
          begin
    end;
            Result := True;
            FData.Strings['name'] := PatientName;
    if not DateFound and DateRegex.Exec(Line) then
            Pos3 := PosEx(':', Line, Pos2);
    begin
            if Pos3 <> 0 then
      DateFound := True;
            begin
      DateStr := Trim(DateRegex.Match[1]);
              Pos4 := PosEx('ANOS', Line, Pos3);
      FData.Floats['date'] := ScanDateTime('dd/mm/yyyy', DateStr);
              if TryStrToInt(Trim(Copy(Line, Pos3 + 1, Pos4 - Pos3 - 1)), Age) then
                FData.Integers['age'] := Age;
            end;
          end;
        end;
      end;
    end;
    end;
  end;
  end;
  Result := DateFound and PatientFound
     and (FData.Get('name', '') <> '')
     and (FData.Get('age', 0) <> 0)
     and (FData.Get('birthdate', 0.0) <> 0)
     and (FData.Get('date', 0.0) <> 0);
end;
end;