Victor_VG
Tracker Mod | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору MihailM Первый и третий примеры это препроцессор - код выполняемый перед компиляцией, и для этапа времени исполнения (собственно установки) они бесполезны. Второй просто копирует файл, а для замены обычно (пример на IBM PL/1, Паскаль его не поймёт, но он демонстрирует идею алгоритма) нужно открыть файл на редактирование и сделать следующие операции: Proc Sample option(main); /* объявим точку входа и имя нашей программы, это обязательно */ Function StrRep(file,str1,str2,ret); /* поиск и замена строки в файле */ /* явно объявим используемые переменные */ Dcl A char() str1; /* искомая строка, инициализируем */ Dcl B char() str2 /* заменяющая строка */ Dcl C int(32); /* смещение строки относительно начала файла в байтах */ ret bin(1) False /* код завершения, при входе в функцию False так как операция ещё не выполнена */ /* часть переменных объявим неявно, компилятор сам поставит правильный тип */ I=strlng(A); /* получили длину искомой строки */ J=strlng(B); /* получили длину строки замены */ X=strlng(file); /* получили длину файла */ GetMem(BUF,X); /* получили память для буфера и его начальный адрес в переменной X */ Open(file,rw); /* открыли файл на чтение-запись */ C=find(file,A); /* получили значение смещения A */ Read(BUF,file,C+I,X-I); /* прочитали в буфер оставшуюся часть файла по смещению С +I*/ write(file,C,B); /* записали в файл строку B по смещению I */ write(file,C+J,BUF); /* записали по смещению C длина B оставшуюся часть файла */ close(file,rw): /* закрыли файл чтобы другие программы могли с ним работать */ FreeMem(BUF); /* освободим память буфера */ ret=True; /* установим код завершения True так как операция завершена */ Return; /* возврат в вызывающую программу */ End; /* а дальше просто вызываем нашу функцию */ Call StrRep(MyFile,L"искомая строка",L"заменяемая строка",RET); If RET == True Then ; Else Print(display,L"Операция не удалась") End; Return; /* вернём управление ОС */ EndProc; /* объявим компилятору что процедура завершена */ в других языках программирования запись будет иной, но идея алгоритма сохранится. Я использовал функцию, а не процедуру, так как нам достаточно получить только код завершения. Функция принимает на вход несколько параметров и возвращает один. Процедура ограничения по числу возвращаемых параметров не имеет, но тут она нам не нужна.
---------- Жив курилка! (Р. Ролан, "Кола Брюньон") Xeon E5 2697v2/C602/128 GB PC3-14900L/GTX 1660 Ti, Xeon E5-2697v2/C602J/128 Gb PC3-14900L/GTX 1660 Ti |
| Всего записей: 33227 | Зарегистр. 31-07-2002 | Отправлено: 14:01 22-12-2017 | Исправлено: Victor_VG, 14:31 22-12-2017 |
|