Страница 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','&');