Код полностью рабочий: Как в это коде обрабатывать без учета регистра букв, сейчас обрабатывается текст с учетом регистра букв:
| Код | 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;
|
|