Главная страница
    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.007 c
2-1205665714
Igor23
2008-03-16 14:08
2008.04.13
Дата


2-1205843333
Muson_1984
2008-03-18 15:28
2008.04.13
Конвертация


2-1205520894
Vikindos
2008-03-14 21:54
2008.04.13
Как построчно считывать содержимое из файла?


15-1203994796
Slider007
2008-02-26 05:59
2008.04.13
С днем рождения ! 26 февраля 2008 вторник


2-1205758991
savyhinst
2008-03-17 16:03
2008.04.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский