Страница 1 из 1

обработка файла

Добавлено: 03 апр 2005, 21:02
Neel
Надо чтобы програма искала в тексте 5 символов сравнивала их с переменой и вслучае совпадения копировала в переменую типа String или вставляла его в форму следующие за этой групой текст до каково-нибудь знака к примеру &.
это вобще осуществимо?
p.s. пожалуйста попадробней

Добавлено: 03 апр 2005, 22:11
OTELLO

Код: Выделить всё

FUNCTION MakeSTR(txt:STRING; // сам текст
  FiveSimbols:STRING; // твои 5 символов
  EndCopy:Char // твой амперсанд
):STRING;
VAR  i,j:Integer;

BEGIN

 RESULT:=''; // обнуляем результат
 FOR :=1 TO Length(txt)  DO 
   // Смотрим каждый символ txt с 1 по последний
  BEGIN
   IF (txt[i]+txt[i+1]+txt[i+2]+txt[i+3]+txt[i+4])=FiveSimbols THEN
    BEGIN
     // если найдены твои 5 символов
     FOR j:=i+5 TO Length(txt) DO
     //  ищем EndCopy
      BEGIN
       IF txt[j]=EndCopy THEN EXIT; // если найден, то выходим вообще
       RESULT:=RESULT+txt[j];
      END;
    END;
  END;

END;
функцию проверил- работает...

Добавлено: 03 апр 2005, 22:55
Neel
небольшое дополнение текст находится в файле
Assign(f,'c:\1.txt');
txt{STRING}:=f{Text};
а при таком действии выдает ошибку несовместимости как это решить,
а за алгоритм большое спаибо

Добавлено: 04 апр 2005, 07:45
Хыиуду
В общем-то, если мне не изменяет память, в Паскале была и в Дельфи благополучно переехала функция pos. Убей Бог, не помню, что там идет в аргументах - то ли строка и подстрока, то ли подстрока и строка. Если первый вариант, то можно сделать так:

Код: Выделить всё

FUNCTION MakeSTR(txt:STRING; // сам текст 
  FiveSimbols:STRING; // твои 5 символов 
  EndCopy:Char // твой амперсанд 
):STRING; 
BEGIN
  Result:='';
  if pos(txt,Fivesymbols)<>0
  then result:=result+copy(txt,pos(txt,fivesymbols)+5,length(s)-pos(txt,fivesymbols)-5);
  if pos(Result,EndCopy)<>0 then delete (Result,pos(Result,EndCopy),Length(Result)-pos(Result,EndCopy));
END;
Вроде бы так, может, где-то надо добавить или вычесть 1, но в целом оно. Точнее проверить не могу, в институт опаздываю

Добавлено: 04 апр 2005, 11:54
LAngel
Если с файлом и до символа "&" то можно так:

Код: Выделить всё

function GetString(FileName: String; Afind: String): String;
var
  S : TStringList;
  i : Integer;
begin
  Result := '';
  S := TStringList.Create;
  try
    S.LoadFromFile(FileName);
    i := pos(AFind, S.Text);
    if i > 0 then
    begin
      i := i + Length(AFind);
      while (i <= Length(S.text)) and (S.text[i] <> '&') do
      begin
        Result := Result + S.text[i];
        inc(i);
      end;
    end;
  finally
    S.Free;
  end;
end;

Добавлено: 04 апр 2005, 16:00
OTELLO
Assign(f,'c:\1.txt');
txt{STRING}:=f{Text};
а при таком действии выдает ошибку несовместимости как это решить,
если честно- то это бред, то, что ты написал. Ты присваиваешь переменной типа стринг переменную типа файл... =((

Можно создать переменню t:=TStringList, затем в неё методои LoadFromFile считать файл и использовать мою функцию так:

Код: Выделить всё

 Переменная результата:=MakeSTR(t.text,'12345','&');