Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
ВнизЗаменить в файле Найти похожие ветки
← →
alert2006 (2008-03-16 03:14) [0]Как заменить в файле подстроку на строку чтобы файл не блокировался для доступа ?
← →
Loginov Dmitry © (2008-03-16 08:22) [1]> чтобы файл не блокировался для доступа
Открыть его с параметром fmShareDenyNone
← →
SerJaNT © (2008-03-16 10:55) [2]Спасибо!
Теперь все хорошо, только вот данные теперь просто дописываются в файл, а надо как-бы только изменить содержимое.
Делаю так:Templ:=TStringList.Create;
Templ2:=TStringList.Create;
S_1 := TFileStream.Create(prog+"data/Templates/General/template_line.html", fmOpenReadWrite, fmShareDenyWrite);
S_2 := TFileStream.Create(prog+"data/Templates/General/template.htm", fmOpenReadWrite, fmShareDenyWrite);
Templ.LoadFromStream(S_1);
templ.Text := Replace(templ.Text, "%DATE%", DateToStr(DateTimePicker1.Date));
templ.Text := Replace(templ.Text, "%TIME%", edit1.text);
templ.Text := Replace(templ.Text, "%PK%", combobox1.Items.Strings[combobox1.ItemIndex]);
templ.Text := Replace(templ.Text, "%FIO%", combobox2.Items.Strings[combobox2.ItemIndex]);
templ.Text := Replace(templ.Text, "%PLANE%", combobox3.Items.Strings[combobox3.ItemIndex]);
templ.Text := Replace(templ.Text, "%DISCIP%", combobox4.Items.Strings[combobox4.ItemIndex]);
templ.Text := Replace(templ.Text, "%MODULE%", combobox5.Items.Strings[combobox5.ItemIndex]);
templ.Text := Replace(templ.Text, "%PROC%", combobox6.Items.Strings[combobox6.ItemIndex]);
templ.Text := Replace(templ.Text, "%SIGN%", " ");
templ.Text := Replace(templ.Text, "%PRODUCT%", combobox7.Text);
templ.Text := Replace(templ.Text, "%MARK%", " ");
templ.Text := Replace(templ.Text, "%MANAGER%", " ");
Templ2.LoadFromStream(S_2);
Templ2.text:= Replace(Templ2.text, "<!--HERE-->", templ.Text);
Templ2.SaveToStream(S_2);
Templ2.free;
Templ.free;
S_1.Free;
S_2.free;
и получается измененное содержимое файла template.htm дописывается еще раз в конец файла
← →
SerJaNT © (2008-03-17 00:19) [3]Удалено модератором
← →
Anatoly Podgoretsky © (2008-03-17 00:44) [4]Надо переоткрыть поток, только нафига здесь потоки не пойму.
← →
SerJaNT © (2008-03-17 00:47) [5]
> Надо переоткрыть поток
как?
← →
Anatoly Podgoretsky © (2008-03-17 00:53) [6]А ты какое отношение имеешь к вопросу автора, заведи свою тему.
← →
SerJaNT © (2008-03-17 01:19) [7]Автор темы и есть я, просто через автозаполнение формы поставилось alert2006 а я не заметил
← →
SerJaNT © (2008-03-17 08:50) [8]Как переоткрыть поток?
← →
SerJaNT © (2008-03-17 08:50) [9]Как переоткрыть поток?
← →
Сергей М. © (2008-03-17 08:53) [10]Потоки тут нужны как корове седло
← →
SerJaNT © (2008-03-17 08:57) [11]А как сделать без потоков? Проблема в том что пока программа будет писать в файл, копия этой же программы, но запущенная на другом компе через сеть не может тоже производить запись (ошибка "Файл занят")
← →
Сергей М. © (2008-03-17 09:01) [12]
> как сделать без потоков?
TStringList.LoadFromFile/SaveToFile
> пока программа будет писать в файл, копия этой же программы,
> но запущенная на другом компе через сеть не может тоже
> производить запись (ошибка "Файл занят")
>
И это абсолютно нормальная ситуация.
Файл - это не воз из басни Крылова
← →
SerJaNT © (2008-03-17 09:03) [13]и как можно выйти из ситуации?
← →
Slym © (2008-03-17 09:10) [14]
Templ2.text:= Replace(Templ2.text, "<!--HERE-->", templ.Text);
S_2.Position:=0;
Templ2.SaveToStream(S_2);
← →
Slym © (2008-03-17 09:18) [15]Anatoly Podgoretsky © (17.03.08 0:44) [4]
только нафига здесь потоки не пойму
а нафига здесь стринглисты :)? убрал один TStringList, оставив второй только ради LoadFromFile/SaveToFile :) но можно и его убратьvar
Templ:TStringList;
S:string;
begin
Templ:=TStringList.Create;
try
Templ.LoadFromFile(prog+"data/Templates/General/template_line.html");
S:=templ.Text;
S := Replace(S, "%DATE%", DateToStr(DateTimePicker1.Date));
S := Replace(S, "%TIME%", edit1.text);
S := Replace(templ.Text, "%PK%", combobox1.Items.Strings[combobox1.ItemIndex]);
S := Replace(S, "%FIO%", combobox2.Items.Strings[combobox2.ItemIndex]);
S := Replace(S, "%PLANE%", combobox3.Items.Strings[combobox3.ItemIndex]);
S := Replace(S, "%DISCIP%", combobox4.Items.Strings[combobox4.ItemIndex]);
S := Replace(S, "%MODULE%", combobox5.Items.Strings[combobox5.ItemIndex]);
S := Replace(S, "%PROC%", combobox6.Items.Strings[combobox6.ItemIndex]);
S := Replace(S, "%SIGN%", " ");
S := Replace(S, "%PRODUCT%", combobox7.Text);
S := Replace(S, "%MARK%", " ");
S := Replace(S, "%MANAGER%", " ");
Templ.LoadFromFile(prog+"data/Templates/General/template.htm");
Templ.text:= Replace(Templ.text, "<!--HERE-->", S);
Templ2.SaveToFile(prog+"data/Templates/General/template.htm");
finally
Templ.free;
end;
← →
SerJaNT © (2008-03-17 09:23) [16]Спасибо, Slym! Все работает как надо.
← →
Плохиш © (2008-03-17 10:41) [17]
> SerJaNT © (17.03.08 08:57) [11]
> А как сделать без потоков? Проблема в том что пока программа
> будет писать в файл, копия этой же программы, но запущенная
> на другом компе через сеть не может тоже производить запись
Хороша логика :-)
Вторая программа пишет, пишет в файл, но тут первая программа взяла и файл переписала и все изменения в одно место.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c