Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.06;
Скачать: CL | DM;

Вниз

Предложите алгоритм   Найти похожие ветки 

 
Ra-BOT:Nick   (2003-02-21 12:25) [0]

У меня есть много файлов *.htm. В каждом нужно найти строчку r.php?100 и заменить на 100.htm. То есть, изменяется номер, в общем виде это выглядит так r.php?<n> -> <n>.htm. Как это можно сделать, чтоб пройтись по всем файлам и сделать такую замену?
Спасибо за любые идеи.


 
Palladin ©   (2003-02-21 12:37) [1]


FileList, // список файлов
dataProceed:TStringList;

for i:=0 to FileList.Count-1 do
begin
dataProceed.LoadFromFile(FileList[i]);
StringReplace(dataProceed.Text,"r.php?","",[rfReplaceAll,rfIgnoreCase]);
dataProceed.SaveToFile(FileList[i]);
end;


 
Palladin ©   (2003-02-21 12:40) [2]

упс
заметил что r.php?n без .htm


 
Palladin ©   (2003-02-21 12:53) [3]


procedure _Proceed(var s:string);
var
p,p2:integer;
begin
while true do
begin
p:=pos("r.php?",s);
if p=0 then break;
p2:=p+7;
while s[p2] in ["0","1","2","3","4","5","6","7","8","9"] do inc(p2);
s:=copy(s,1,p-1)+copy(s,p+6,p2-7-p)+".htm"+copy(s,p2,length(s));
end;
end;


подставь в предыдущий код вместо
строки со StringReplace
строку
_Proceed(dataProceed.Text);


 
Ra-BOT:Nick   (2003-02-21 13:00) [4]

in ["0","1","2","3","4","5","6","7","8","9"] эквивалентно
Numbers:set of ("0".."9");

while s[p2] in Numbers ...


 
Palladin ©   (2003-02-21 13:02) [5]

можно и так...


 
Ra-BOT:Nick   (2003-02-21 13:04) [6]

2Palladin © (21.02.03 13:02)
_Proceed(dataProceed.Text);
Error: Constant object cannot be passed as var parameter


 
Palladin ©   (2003-02-21 13:07) [7]

s:string;

s:=dataProceed.text;
_Proceed(s);
dataProceed.text:=s;


 
Ra-BOT:Nick   (2003-02-21 13:09) [8]

2Palladin © (21.02.03 13:07)
и ещё вроде конструктор нужен для TStringList...


 
Ra-BOT:Nick   (2003-02-21 13:14) [9]

и замена не так делается: r.php?100 -> .htm100


 
Palladin ©   (2003-02-21 13:14) [10]

ну :)
я же алгоритм привел...
остальным то сам наверно сможешь обвешать...


 
Ra-BOT:Nick   (2003-02-21 13:20) [11]

да, это я прогнал, когда использовал
Numbers:set of ("0".."9");

while s[p2] in Numbers ...
и это не сработало...

Вообщем, спасибо


 
Palladin ©   (2003-02-21 13:22) [12]

заменяет все верно...
только цифру 7 на 6 надо исправить
из
s:=copy(s,1,p-1)+copy(s,p+6,p2-7-p)+".htm"+copy(s,p2,length(s));
в
s:=copy(s,1,p-1)+copy(s,p+6,p2-6-p)+".htm"+copy(s,p2,length(s));


 
guest   (2003-02-22 09:31) [13]

perl -pi.orig -e "s/r\.php\?(\d+)/\1\.htm/g" file.htm

Просто и без наворотов. Pascal - не лучший инструмент для таких задач.



Страницы: 1 вся ветка

Текущий архив: 2003.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
6-17238
Demetrius
2003-01-15 10:32
2003.03.06
Proxy & иже с ним


7-17425
ShadowFromXZone
2003-01-07 00:37
2003.03.06
Ребята вот какой возник вопрос.... Надо запретить только копирова


1-17025
Dmitriy_R
2003-02-25 09:40
2003.03.06
Окно внутри окна.


3-16873
Валентина
2003-02-17 21:40
2003.03.06
DBF >> MDB


3-16951
dimich1978
2003-02-15 08:39
2003.03.06
Код для выявления уникальности(быстренький).