Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Регистр букв / Delphi XE


Автор: Campus2000 2.6.2018, 17:13
Код полностью рабочий: 
Как в это коде обрабатывать без учета регистра букв, сейчас обрабатывается текст с учетом регистра букв:
Код

var
  LenArray: Integer;
  Str: string;
  // В какой файл пишем результат
  fResult: TextFile;
  Idx: array of Integer;
  i: Integer;
  // Какой символ из считанной строки сравнивается
  CharIdx: Integer;
  // Сколько подстрок совпало
  MatchCnt: Integer;
  LenStr: Integer;
begin
  LenArray := Length(Matching);
  SetLength(Idx, LenArray);
  try
    // Открываем файл для записи найденых данных
      i := 0;
      AssignFile(fResult, GenerateFileName(ExtractFilePath((TTextRec(F).Name)) + 'Rez_' + IntToStr(i + 1) + ExtractFileExt(TTextRec(F).Name)));
      Rewrite(fResult);
      // Файл открылся, 0 убрали
     for i := 0 to LenArray - 1 do
      Idx[i] := 1;
 
    while not Eof(F) do
    begin
      // Читаем следующую строку из файла
      Readln(F, Str);
      // Сравнение для всех подстрок начинаем с 1 символа
      for i := 0 to LenArray - 1 do
        Idx[i] := 1;
      // Пока не нашли ни одной подстроки
      MatchCnt := 0;
      // Сравниваем каждый считанный символ с текущей позицией в искомой подстроке
      for CharIdx := 1 to Length(Str) do
        for i := 0 to LenArray - 1 do
        begin
          LenStr := Length(Matching[i]);
          // Если еще не нашли всю подстроку
          if Idx[i] <= LenStr then
          begin
            // Если текущий считанный символ совпадает с текущим символом в искомой подстроке
            if Str[CharIdx] = Matching[i, Idx[i]] then
            begin
              // Если дошли до конца подстроки, то совпали все символы
              if Idx[i] = LenStr then
              begin
                // Увеличиваем число совпадений
                Inc(MatchCnt);
                // Записываем считанную строку в нуужный файл
                Writeln(fResult, Str);
              end
            else
                // Увеличиваем позицию
                Inc(Idx[i]);
            end
          else
              // Если текущий считанный символ НЕ совпадает с текущим символом в искомой подстроке
              // то начинаем поиск по этой подстроке сначала
              Idx[i] := 1;
          end;
        end;
        // Если нашли ВСЕ подстроки, то дальше проверять символы не нужно
        if MatchCnt = LenArray then
          Break;  // прерываем текущую итерацию
      end;
  finally
         // Закрываем файл с полученным результатом
        CloseFile(fResult);
  end;
end;

Автор: Snowy 4.6.2018, 10:25
if Str[CharIdx] = Matching[i, Idx[i]]
->
if AnsiLowerCase(Str[CharIdx]) = AnsiLowerCase(Matching[i, Idx[i]])

Автор: _zorn_ 7.6.2018, 17:58
Модератор: Сообщение скрыто.

Автор: Campus2000 9.6.2018, 23:03
Snowy, Спасибо огромное, все получилось!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)