Modyfikacja pliku txt podczas wywołania SaveDialog

1

Witam

Mam program który otwiera pliki tekstowe .txt i zawartość ładuje do pola Memo. Potem moge sobie modyfikować zawartość pola Memo, i mam Button odpowiedzialny za okno zapisu i wywołanie SaveDialog.

Na początku kodu przycisku Button mam ustawione filtry:
SaveDialog1.Filter:='Plik tekstowy(.txt)|.txt|Dokument HTML(.html)|.html|Wszystkie pliki(.)|.';
SaveDialog1.DefaultExt:='Plik tekstowy(
.txt)|.txt|Dokument HTML(.html)|.html|Wszystkie pliki(.)|.';

Potem mam petle ktora podmienia jakies slowo i wstawia z pola edit:
s:=Memo2.Text;
while pos('TYTUL',s)<>0 do
begin
a:=pos('TYTUL',s);
delete(s,a,5);
insert(Edit1.Text,s,a);
end;
Memo2.Text:=s;

I na końcu kodu mam:
if SaveDialog1.Execute then
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

I teraz pytanie: Czy da się zrobić (a jeśli tak to jak) tak, aby przy wywolaniu SaveDialog, i wybrania rozszerzenia pliku jako .html program jeszcze mógl znalezc słowo KOD i wstawić konkretną linijke tekstu, np:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">

Dla przykładu: jesli wybiore zapisz jako txt, to program usunie slowo KOD, a gdy wybiore zapisz jako .html to program wstawi zamiast slowa KOD, <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">

Chyba trzeba wstawic jakis kod do savedialog, tylko zupelnie nie mam pomyslu jak to zrobic:(

0

mysle ze ze standardowym save dialog nie da sie tego zrobic prosto. Najlepiej daj userowi mozliwosc wyboru rozszerzenia jeszcze przed wywolanie okna savedialog. Wybrane rozszerzenie. np. z comboboxa przypisujesz jako jedyne mozliwe rozszerzenie w savedialog.

0

hmm, a jak sie odwołać do nazwy wyświetlonego pola Zapisz jako typ:Plik tekstowy(*.txt) ??

Prubuje cos takiego zrobić:

if SaveDialog1.Execute then
begin
if SaveDialog1.Filter='Plik tekstowy(.txt)|.txt' then
begin
s:=Memo2.Text;
while pos('KODMETA',s)<>0 do
begin
a:=pos('KODMETA',s);
delete(s,a,7);
insert('METAAAAAA',s,a);
end;
Memo2.Text:=s;

  end;

end;
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

0
adiek napisał(a)

hmm, a jak sie odwołać do nazwy wyświetlonego pola Zapisz jako typ:Plik tekstowy(*.txt) ??

Prubuje cos takiego zrobić:

if SaveDialog1.Execute then
begin
if SaveDialog1.Filter='Plik tekstowy(.txt)|.txt' then
begin
s:=Memo2.Text;
while pos('KODMETA',s)<>0 do
begin
a:=pos('KODMETA',s);
delete(s,a,7);
insert('METAAAAAA',s,a);
end;
Memo2.Text:=s;

  end;

end;
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

dobra. cofam wszystko co powiedzialem :) Przeciez wystarczy:

  extension:=ExtractExt(SaveDialog1.FileName);
  name:=ExtractFileName(SaveDialog1.FileName);

bo to nie jest modyfikacja podczas, tylko po wywolaniu

0

hmm, a mozesz napisac gdzie wstawic te dwie linijki kodu? bo nie za bardzo rozumie do czego te dwie linijki sluza:) i czy da sie za ich pomoca zmodyfikowac jeszcze pole memo, podmieniajac dane slowo, tak jak chcialem zrobic na poczatku:)

0

ogolnie to tak jak napisales

if SaveDialog1.Execute then
begin
if ExtractExt(SaveDialog1.FileName) ='.html' then
begin
if SaveDialog1.Filter='Plik tekstowy(.txt)|.txt' then
begin
// jesli ma usunac slowo KOD, to
for i:=0 to Memo1.lines.count-1 do
strreplace(memo1.lines.line[i],'KOD','',NIL);
// jesli ma cos dopisac to jakis
insert(pos('cos'),'co',memo1.....
end;

if ExtractExt(SaveDialog1.FileName) ='.zip' then
begin
end;
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

end;

kombinuj :]

0

jak zrobie:
if SaveDialog1.Execute then
begin
if ExtractExt(SaveDialog1.FileName)='.txt' then
begin
if SaveDialog1.Filter='Plik tekstowy(.txt)|.txt' then
begin
while pos('KODMETA',s)<>0 do
begin
a:=pos('KODMETA',s);
delete(s,a,7);
insert('aaaaaaaaaaaaaaa',s,a);
end;
Memo2.Text:=s;
end;
end;
end;
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

to kompilator wywala błąd: undeclared identifier: ExtractExt

a jak zrobie to na:
if SaveDialog1.Execute then
begin
if ExtractFileName(SaveDialog1.FileName)='.txt' then
begin
if SaveDialog1.Filter='Plik tekstowy(.txt)|.txt' then
begin
while pos('KODMETA',s)<>0 do
begin
a:=pos('KODMETA',s);
delete(s,a,7);
insert('aaaaaaaaaaaaaaa',s,a);
end;
Memo2.Text:=s;
end;
end;
end;
Memo2.Lines.SaveToFile(SaveDialog1.FileName);

to kod przechodzi ale nie zamienia mi slowa w polu Memo.....

Za co odpowiada ExtractExt i ExtractFileName ?

0

sory, to byla moja nakladka na inna funkcje :)

function ExtractExt(path:string):string;
begin
result := LowerCase(ExtractFileExt(path));
end;

zeby zawsze bylo malymi literami

0

hmm i znowu troche nie rozumie:) to jest kod do mojego programu? chyba jestes zaawansowanym programista.....ja niestety sie ucze:(
prubuje wszystkich kombinacji i juz mam mętlik w glowie:(:(

moglbyś napisać mi kod od if savedialog1.execute do memo2.lines.SaveToFile(SaveDialog1.FileName); ?
Z wykorzystaniem mojej petli while ktora znajduje slowo 'KODMETA' i wstawia ustalony łancuch

Tak na marginesie, dalej nie mam pojęcia jak zrobić by program "wyciągnął" informacje że wybieram Zapisz jako typ: Dokument tekstowy (albo HTML) i znajdował słowo KOD META, zmienił je na stringa i zapisał na dysku.....:(

no fakt, nie jest to modyfikacja podczas, tylko po wywołaniu savedialog, ale przed kliknieciem w przycisk ZAPISZ - przepraszam

gdybym wiedział jakie polecenie odpowiada za przechwycenie Zapisz jako: Dokument txt to moze bylo by mi latwiej cos pomyslec...... Bo abym mogl zmodyfikowac pole memo a nastepnie je zapisac, to program musi wiedziec kiedy ma zmienic to pole memo.

Aby bylo juz prosciej to może taki by problem rozwiązać:
Otwiera sie okno savedialog, wybieram Zapisz jako: Dokument txt i naciskam ZAPISZ(SAVE) a program wyswietla komunikat: " zapisujesz jako txt" po czym wciskam OK i jest zapisane na dysku.
Jak cos takiego da sie zrobić, to tamto myśle tez.
Problem tylko w tym, że nie mam pojęcia jak przechwycic to "Zapisz jako:Dokument txt"

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0