[ smjesko @ 26.06.2004. 18:31 ] @
imam jedan malo problemcic naime imam neki tekst u listboxu i sada zelim da mi taj tekst kopira u neki dokument npr *.txt i mislim da bi trebao koristiti ovu komandu
listbox1.Items.SaveToFile(); ali sta ide izmedu zagrada?
[ Bojan Kopanja @ 26.06.2004. 18:41 ] @
U tim zagradama ide npr. F :)... Ma ozbiljno, stvar je krajnje jednostavna:

Code:
...........

var F:textfile;

............

assignfile(F,'nekifajl.txt');
rewrite(F);
listbox1.items.savetofile(F);
closefile(F);

..............


Eto, ovo sam pisao napamet, pa mozda ima neke greske ali to ti je u sustini to
[ smjesko @ 26.06.2004. 19:10 ] @
hmm neradi..... incompatible types string and text, i zaboravio sam dodat da te neke stavke rijeci nebitno.. slaze znaci ne da samo prepisujue nadam se da razumijes
[ smjesko @ 26.06.2004. 19:44 ] @
resio sam problem
listbox1.items.SaveToFile(SaveDialog2.FileName);

ali imam sledeci problem jer mi uvek prepise predhodni deo teksta koji je bio snimljen.
kada god snjimi samo prepise postojeci dio teksta novim i tako da nemam koristi sta mislite imali kakvo lepse resenje???

Pozdrav by smjesko
[ Bojan Kopanja @ 26.06.2004. 20:31 ] @
Joj izvini za onu gresku, to uvek uradim, ali posto sam pisao napamet nije bilo Delphija da me obavesti o tome pa da ispravim ...

Pa ta funkcija ( SaveToFile ) ce ti uvek prepisivat postojeci fajl... Ovaj put ces upisivanje ipak morati da odradis rucno...

Evo otpriliko koda:

Code:
.................

var f:textfile;
    s:string;
    i:integer;
begin
  AssignFile( f,'nekifajl.txt' );
  Append( f );     { zbog ovoga ce dopisivati u postojeci fajl, ali sada fajl MORA da postoji, moze se i to srediti, ali bi to malo komplikovalo kod, a tebi sada samo treba sustina :) }
  for i := 1 to Listbox1.Count-1 do
  begin
    s:=ListBox1.Items.Strings[i];
    Writeln(f,s);
  end;
  CloseFile(f);

................


Evo, ovo ce da ti radi 100% ( pisano u Delphiju ovaj put )!

P.S. Na ovoj adresi imas moj tutorial za rad sa datotekama ( sve operacije nad njima su opisanje ), pa malo pogleda, nece da skodi ...
[ hwfanatic @ 26.06.2004. 20:58 ] @
Može to i malo elegantnije, ako mene pitaš...

Code:

procedure TForm1.Button1Click(Sender: TObject);
var
  AStream: TFileStream;
begin
  try
    if SaveDialog1.Execute
      then begin
        AStream := TFileStream.Create(SaveDialog1.FileName, fmShareDenyWrite);
        AStream.Seek(0, soFromBeginning);
        Memo1.Lines.SaveToStream(AStream);
      end
      else Exit;
  finally
    AStream.Free;
  end;
end;

Svojstvo Lines objekta Memo1 je tipa TStrings, te tu može doći i onaj tvoj ListBox, ako treba.
[ Bojan Kopanja @ 26.06.2004. 21:07 ] @
Pa dobro, moje predlog je stvarno malo "siroviji", ali je mozda i razumljiviji, osim toga tvoj primer je za Memo, a covek je lepo rekao da je u pitanju ListBox ...
[ hwfanatic @ 26.06.2004. 21:38 ] @
Ih, kao da je važno - pa obe klase koriste TStrings.
Nego, tvoja metoda je sasvim u redu, ali mi se učinilo da ima premalo onog "objektnog", što je, ustvari, cela poenta OP-a... :)
[ smjesko @ 26.06.2004. 21:52 ] @
[Error] main.pas(575): Undeclared identifier: 'Count'
nerazumem ljudi gde gresim?

for i := 1 to Listbox1.Count(ovde daje gresku)-1 do
begin
s:=ListBox1.Items.Strings;
Writeln(f,s);
end;
CloseFile(f);
[ hwfanatic @ 26.06.2004. 22:16 ] @
Alternativno iskoristi Count objekta Items (TStrings); tako bi trebalo da radi. Znači: ListBox1.Items.Count
[ smjesko @ 26.06.2004. 22:21 ] @
RADI mnogo Vam hvala momci samo tako nastavite :)))

AssignFile( f,'c:\log.txt' );
Append( f );
for i := 1 to Listbox1.items.count-1 do
begin
s:=ListBox1.Items.Strings;
Writeln(f,s);
end;
CloseFile(f);
[ smjesko @ 26.06.2004. 22:26 ] @
i jos samo jedna molba da mi kazete dali mogu to sada sve opet importovat u program i ubacit u listbox1
[ hwfanatic @ 26.06.2004. 22:34 ] @
Vrlo slično... Na mestu Append() stavi Reset(), a umesto ove dve linije:
Code:

s:=ListBox1.Items.Strings;
Writeln(f,s);

A, ti stavi:
Code:

ReadLn(f,s);
ListBox1.Items.Add(s);

Sve se to, naravno, može odraditi mnogo elegantnije koristeći SaveToStream i LoadFromStream metoda TStrings klase, ili neke nasleđene...
[ smjesko @ 26.06.2004. 22:49 ] @
nece, [Error] dReport.pas(421): Incompatible types: 'String' and 'Word'
[ Bojan Kopanja @ 27.06.2004. 01:52 ] @
hwfanatic >> Nego, tvoja metoda je sasvim u redu, ali mi se učinilo da ima premalo onog "objektnog", što je, ustvari, cela poenta OP-a...

Pa sto jest, jest, ali to ti je ta stara skola

A za ovo ucitavanje u ListBox1: To ti je isto kao upisivanje u fajl, samo malo drugacije ( ih, al' sam srocio recenicu ):

Code:
var f:textfile;
    s:string;
    i:integer;
begin
  AssignFile( f,'log.txt' );
  Reset( f );
  repeat
    readln(f,s);
    Listbox1.Items.Add(s);
  until eof(f);
  CloseFile(f);
end;


a sve to mozes i malo jednostavnije da odradis ovako:

Code:
ListBox1.Items.LoadFromFile('log.txt');


Uzivaj!
[ smjesko @ 27.06.2004. 08:34 ] @
Hvala vam momci radi :))
[ Bojan Kopanja @ 27.06.2004. 10:59 ] @
Nema na cemu ;)!
[ bancika @ 28.06.2004. 00:42 ] @
Code:

ljudi, sto komplikujete stvari
za ucitavanje je
  ListBox.Items.LoadFormFile('c:\autoexec.bat')
a za snimanje
  ListBox.Items.SaveToFile('c:\autoexec.bat');

ako hocete da user bira fajl bacite po jedan TSaveDialog i TOpenDialog (nalaze sa na Dialogs kartici) i promenite kod u:

if SaveDialog1.Execute then
  ListBox.Items.LoadFormFile(SaveDialog1.FileName);

ili ja ne razumem sta ti hoces uopste :)
pozdravi
[ Bojan Kopanja @ 28.06.2004. 01:00 ] @
Pa za ucitavanje sam mu i rakao za OpenFromFile, ali za snimanje mu je
trebao append, tako da mu SaveToFile ne odgovara...
[ bancika @ 28.06.2004. 02:01 ] @
ok onda, video sam da sve ubacujete red po red, sto je glupavo malo. kod append moze tako, ali je brze preko stream-a, ListBox -> Stream -> File
[ Bojan Kopanja @ 28.06.2004. 22:25 ] @
Ma dobro, rece covek da mu ono odradjuje posao, tako da sada vise nije bitno.