Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1205958322
ply
2008-03-19 23:25
2008.04.13
floattostr


2-1205486032
masv
2008-03-14 12:13
2008.04.13
соединениться с mssql Server 2005 express


15-1204081129
Slider007
2008-02-27 05:58
2008.04.13
С днем рождения ! 27 февраля 2008 среда


15-1204193130
Kerk
2008-02-28 13:05
2008.04.13
Google Sites


15-1203874860
Dmitry S
2008-02-24 20:41
2008.04.13
Через 13 часов вылет в столицу...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский